AJAX для загрузки кода
Несколько дней назад я столкнулся с проектом Polymer и веб-компонентами. Говорят, что это будущее Интернета. Я не знаю много об этом. Но если я правильно понял, идея состоит в том, чтобы улучшить модульность веб-кода. Я хотел бы задать простой вопрос, в этом отношении.
Есть ли какой-либо недостаток или возражение против использования AJAX для того, чтобы читать предварительно "обычный текстовый" файл (но с HTML, CSS и JS) и использовать функцию JavaScript "document.write" для вставки этого кода в другой файл? Я удивился этому, потому что это, кажется, решает модульность веб-кода очень простым и быстрым способом. Есть ли проблема в этом?
Спасибо!
2 ответа
Общий принцип в порядке, но, конечно, используя document.write
это ужасно document.write
не может быть безопасно использован после полного анализа документа. Поэтому после асинхронной загрузки ресурса будет небезопасно его использовать.
Гораздо лучший подход - создать узел DOM, загрузить извлеченный ресурс в узел, а затем загрузить узел в DOM. Например, асинхронная загрузка скрипта (но общий принцип распространяется и на другие ресурсы):
var xhr = new XMLHttpRequest();
xhr.open("GET", "somescript.js");
xhr.send();
xhr.addEventListener("load", function(e) {
var fetchedScriptContent = e.target.responseText
var s = document.createElement("script");
s.textContent = fetchedScriptContent;
// s.innerText = fetchedScriptContent; // for older browsers
document.body.appendChild(s);
});
Это не проблема, за исключением того, что document.write не будет работать после загрузки страницы, но обычно это делается для загрузки скриптов во время выполнения:
function addScript(anUrl) {
var aScript = document.createElement( 'script' );
aScript.type = 'text/javascript';
aScript.src = anUrl;
$("head").append( aScript );
}
Браузер позаботится о загрузке и запуске скрипта с URL-адреса, поэтому вам не нужно вставлять исходный код вручную, но при необходимости вы можете сделать это следующим образом:
function addScriptSource(sourceText) {
var aScript = document.createElement( 'script' );
aScript.type = 'text/javascript';
aScript.textContent = sourceText;
$("head").append( aScript );
}