Отложенный document.write - PullRequest
       12

Отложенный document.write

3 голосов
/ 01 сентября 2010

многие провайдеры веб-рекламы используют старый метод document.write, в моем случае AdTech. Можно ли перезаписать метод document.write для отсрочки после события onload?

Ответы [ 4 ]

3 голосов
/ 01 октября 2013

Как насчет использования

  • writecapture (https://github.com/iamnoah/writeCapture) утилиты, помогающей Ajax-загрузке HTML-кода, содержащего теги сценария, использующие document.write или
  • PostsScribe (https://github.com/krux/postscribe/), который позволяет асинхронно показывать синхронную рекламу без изменения рекламного кода.
0 голосов
/ 18 января 2017

На самом деле вы можете поддерживать внедрение скриптов правильным способом, перехватывая вызовы document.write следующим образом.Хитрость заключается в том, чтобы создать функцию «middleman», которая проверяет входные данные для document.write, и, если это инъекция тега скрипта, вместо этого правильно загрузите его в DOM:немного дальше, но имена переменных включены для ясности.При желании вы можете выполнить последующие действия, используя async и defer для тега script, загружая саму стороннюю библиотеку, проверяя правильность проверки после такого изменения.

Источник

0 голосов
/ 01 сентября 2010

вы можете вывести

document.old_write=document.write;
window._bufferedText='';
document.write=function(text) {
    window._bufferedText+=text;
}
//now let all the document.write go here
document.write('<h1>');
document.write('Hello World!');
document.write('</h1>');
//alert(window._bufferedText);
//end document.write methods
document.write=document.old_write;
document.write('<div id="deferred-write-placeholder"></div>');

window.onload=function() {
    document.getElementById('deferred-write-placeholder').innerHTML=window._bufferedText;
    delete window._bufferedText;
}

Примечания:

  • вы можете переписать что-то более сложное для обработки всех экземпляров document.write кусков кода.
  • вам следует заменить window.onload на специфичный для javascript обработчик загрузки.
0 голосов
/ 01 сентября 2010

Перемещение всех ваших сценариев в конец страницы (до> / body <) с рекламными сценариями абсолютно последними и без использования domReady (не нужно, если ваши сценарии вставлены после всех элементов HTML) тоже самое. Фактически, возможно, что отложенные вызовы document.write могут даже испортить всю страницу в зависимости от того, насколько ужасен рекламный код. </p>

...