Вызов document.write () - PullRequest
       3

Вызов document.write ()

5 голосов
/ 31 августа 2011

Этот код не работает:

<div class="pix"><div id="addTimestamp"></div></div>
<script type="text/javascript">
(function () {
    var date = new Date(), 
        timestamp = date.getTime(),
        newScript = document.createElement("script");

    newScript.type = 'text/javascript';
    newScript.src = 'someUrl=' + timestamp + '?';
    document.getElementById('addTimestamp').appendChild(newScript);
}())
</script>

Динамический скрипт добавляет document.write(someCode which loads banners).Но в Firebug у меня ошибка:

Вызов document.write () из асинхронно загруженного внешнего скрипта был проигнорирован.

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

Добавьте это:

newScript.async = false;

Ваш скрипт должен загружаться синхронно, чтобы document.write() заработал (см. https://developer.mozilla.org/En/HTML/Element/Script#attr-async).. Как он есть сейчас, скрипт будет загружаться всякий раз, когда у браузера есть времядля этого - так что вы не можете знать, куда будет вставлен ваш HTML из document.write(). Браузер решил проигнорировать ваш document.write() вызов, чтобы предотвратить худшие проблемы.

1 голос
/ 31 августа 2011

при написании документа javascript вызывает сбой анализатора html при попытке try

document.getElementById('addTimestamp').innerHTML = '<script type="text/javascript"     src="someUrl=' + timestamp + '?"' + 'charset="utf-8"></sc' + 'ript>';

Однако, если вы хотите вставить тег сценария в DOM, вам также необходимо убедиться, что DOM загружен.

0 голосов
/ 31 августа 2011

Левон, похоже, вы пытаетесь преодолеть проблемы со скоростью загрузки страницы (я не вижу других причин не просто вставлять скрипт статически).

Ответ Владимира хорош и действителен, но посмотритекомментарий к его ответу.

Другой подход, который работает, но должен быть очень тщательно реализован, заключается в перезаписи самого document.write.Это очень, очень тонкая работа, ее нужно тщательно протестировать, но на самом деле это можно сделать.Каждый вызов document.write может хранить что-то в каком-либо строковом буфере.Затем, решив каким-то образом, что пришло время очистить весь контент, просто вставьте все содержимое буферов в некоторый элемент DOM.

Работает, но очень извращенно.Лучший вариант - не использовать document.write.Но, увы, это не всегда так.

...