Как работать с 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. Надеюсь, это будет полезно.