JavaScript - ошибка document.write? - PullRequest
3 голосов
/ 13 июля 2010

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

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

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

</html>

Это отлично работает, и слово 'TEST' добавляется к <body>

Но когда

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

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

Это происходит только при вызове document.write в window.onload function

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

Ответы [ 4 ]

9 голосов
/ 13 июля 2010

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);
}
1 голос
/ 13 июля 2010
  1. в первом случае слово не написано в теле ... оно написано в заголовке
  2. первое работает, потому что документ все еще открыт для записи .. после того, как он завершен(Загружен DOM) документ закрыт, и при попытке записи в него вы заменяете его.
0 голосов
/ 18 августа 2015

Сначала создайте элемент, например, 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 голосов
/ 13 июля 2010

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

...