Рассмотрим сценарий ..

<html>
<head>
   <script type="text/javascript">
        document.write('TEST');
   </script>
</head>

<body>
    Some body content ...
</body>

</html>

Это прекрасно работает, и слово {ТЕСТ 'добавляется в <body>

Но когда

<script type="text/javascript">
    window.onload = function(){
        document.write('TEST');
    }
</script>

Используется, затем содержимое тела полностью заменяется словом «TEST», т. е. старое содержимое тела удаляется и добавляется ТОЛЬКО слово «TEST».

Это происходит только тогда, когда document.write вызывается внутри функции window.onload

Я попробовал это в Chrome. Есть ли какая-то ошибка, сделанная мной? какие-либо предложения ?

3
Aakash Chakravarthy 13 Июл 2010 в 14:46

4 ответа

Лучший ответ

document.write() нестабилен, если вы используете его после того, как документ закончен, анализируется и закрывается. Поведение кросс-браузер непредсказуемо, и вы не должны использовать его вообще. Управляйте DOM, используя innerHTML или createElement / createTextNode.

Из документации Mozilla:

Запись в уже загруженный документ без вызова document.open () автоматически выполнит вызов document.open. После того, как вы закончили писать, рекомендуется вызвать document.close (), чтобы сообщить браузеру о завершении загрузки страницы. Текст, который вы пишете, анализируется в модели структуры документа. В приведенном выше примере элемент h1 становится узлом в документе.

Если вызов document.write () встроен непосредственно в HTML-код, он не будет вызывать document.open ().

Эквивалентный код DOM будет:

window.onload = function(){
    var tNode = document.createTextNode("TEST");
    document.body.appendChild(tNode);
}
9
Andy E 13 Июл 2010 в 11:23

Сначала создайте элемент, например, div, а затем добавьте содержимое в div с событием window.onload.

document.write('<div id="afterpostcontent"><\/div>');
window.onload = function()
{
    document.getElementById('afterpostcontent').innerHTML = '<span>TEST<\/span>';
}

Вы можете создать внешний файл JavaScript с этим содержимым и просто вызывать его где угодно, например:

<script src="afterpostcontentcode.js"></script>
0
Harkály Gergő 18 Авг 2015 в 12:27

Когда документ полностью загружен, любой дальнейший вызов document.write() переопределит содержимое документа. Вы должны использовать document.close() перед вызовом document.write(), чтобы избежать перезаписи.

0
Thevs 13 Июл 2010 в 12:34
  1. в первом случае слово не написано в теле .. оно написано в голове
  2. первый работает, потому что документ все еще открыт для записи ... после того, как он завершен (загружен DOM), документ закрыт, и при попытке записи в него вы заменяете его ..
1
Gabriele Petrioli 13 Июл 2010 в 11:02