Чтобы добавить содержимое в документ, вы должны вызывать document.write()
только во время фазы синтаксического анализа .
Если у вас есть вызов document.write
где-то, где он выполняется вне этого контекста, например, в вашем обработчике событий, анализ не выполняется, поэтому никуда не денется эта строка 'foo'
.
Что должно произойти в соответствии с исходной ссылкой JavaScript :
Обработчики событий выполняются после закрытия исходного документа, поэтому метод write неявно открывает новый документ mimeType text / html, если вы явно не используете метод document.open в обработчике событий.
То есть предполагается, что вы допустили ошибку и намеревались сделать:
document.open('text/html');
document.write(html);
Что заменяет весь документ новым контентом. Вы также заметите это, потому что вы не завершили это, позвонив по номеру:
document.close();
... в Firefox тумблер «загрузки» все еще оживляет, ожидая, что в документ будет записано больше контента (но он никогда не поступит).
В этом случае вы document.write()
набираете строку:
Hello bobince! How are you today?
, который явно не является действительным документом HTML. Chrome (и Safari, который ведет себя одинаково) пытается проанализировать его как документ HTML, но не удается, потому что это текстовое содержимое без пробелов за пределами элемента документа (), что недопустимо. Если вы введете несколько тегов в поле ввода имени:
Hello <em>bobince</em>! How are you today?
Вы увидите, что все элементы вне отброшены. Firefox и IE удается применить свое нарушенное HTML-правило «исправить текст вне любого элемента», чтобы спасти вас, а Chrome - нет.
Если вы хотите document.write()
новый документ, вы должны убедиться, что это действительно полный документ:
<html><head><title>Greetings</title><body><p>Hello bobince! How are you today?</p></body></html>
Или, если вы хотите document.write()
текстовую строку, вы должны теоретически вызвать:
document.open('text/plain');
перед записью (). Но будьте осторожны, параметр mimetype не поддерживается Chrome или Safari; они всегда будут воспринимать то, что вы пишете, как HTML.
В любом случае, вы, вероятно, не хотите использовать этот метод . Если вы хотите добавить (или изменить) существующую страницу, вы обычно должны использовать методы DOM, такие как установка текста в div вывода статуса или замена содержимого тела с помощью innerHTML.
document.write()
требуется в нескольких местах (в частности, когда вы создаете новое окно или рамку с нуля), но в остальном это, как правило, неправильная вещь, и ее следует рассматривать с подозрением.