Как работать с document.write в script, который добавлен после загрузки страницы?
Я в ситуации, когда мне нужно добавить тэг объявления script динамически.
Само объявление представляет собой простой тег script с атрибутом src, указывающим на сервер объявлений. Фактический код, который затем выполняется, представляет собой двухэтапное испытание:
Во-первых, есть document.write(), например:
document.write("<iframe id='lctopti2017041855' src='about:blank' style='visibility: hidden;' onload=\"this.style.visibility='visible';\" style='border: 0px; overflow-x: hidden;overflow-y: hidden; width: 100px; height: 400px;' width='100' height='400' scrolling='no' frameborder='0' allowtransparency='true'></iframe>");
Далее, существует:
document.getElementById('lctopti2017041855').src = 'http://www.reallylongurl.com/blah.php?whatever=whatever'
Теперь кажется, что работающий document.write() при загрузке страницы в порядке; но я обнаружил, что если бы я взял тот же самый начальный тег и вытащил его внутри $('# somediv'). Например, prepend() перепишет всю страницу.
Есть ли способ справиться с этим? Идентификатор iframe и последующие URL-адреса объявлений всегда динамичны и генерируются, когда начальный тег script запрашивает javascript с сервера объявлений. Если исходный тег script имел всю необходимую мне информацию, я мог бы просто отключить document.write с помощью $('# where'). Prepend() или что-то еще. Как я могу решить эту проблему, не дожидаясь буквально соскабливания результатов начальной загрузки script, а затем с результатом?
Есть ли способ остановить document.write() от перезаписи страницы, а вместо этого писать только там, где она была вызвана?
Ответы
Ответ 1
Вот что я успешно сделал до
var oldWrite = document.write;
var wHtml="";
document.write=function(str) {
wHtml+=str;
}
// load adcode
$('#somediv').prepend(wHtml);
// optionally reset
document.write = oldWrite;
Это может завершиться ошибкой, если adcode загружает script, используя document.write.
В этом случае используйте iFrame, так как он будет содержать всю дерьмо, которую они могут сделать
Ответ 2
Если документ загружен, document.write
очистит всю страницу. Поэтому его нельзя вводить в функцию, которая будет вызываться после загрузки документа.
Если вы хотите больше действий, я думаю, вы можете перейти к другому методу.
http://javascript.info/tutorial/document-write здесь представлена некоторая информация о document.write
. Надеюсь, это будет полезно.