Javascript document write document сооkiе

Javascript document write document сооkiе

document.write

document.write(arg1[, arg2[, arg3[, . ]]]) — метод, выводящий на страницу переданные ему аргументы. Аргументов может быть любое количество, и они могут быть любых типов, при выводе они преобразуются в строки.

Также существует функция document.writeln , которая аналогична document.write , но добавляет в конце своего вывода перевод строки.

Как работает document.write

document.write выводит свои аргументы после того тега script , в котором он был вызван. К примеру код

Обратите внимание: не после того тега script , в котором записано выражение document.write , а после того, в котором оно было вызвано. Следующий код

document.write работает только на этапе загрузки страницы, его нельзя вызывать в ответ на какое-нибудь событие. Если document.write вызвать после того, как страница загрузилась, результат во всех браузерах будет примерно одинаков — пустая страница и, возможно, тот текст, который был выведен последним document.write . Поэтому даже не пытайтесь использовать его в ответ на какие-то действия пользователя, только на этапе загрузки страницы.

Вывод скриптов

Как и любое другое содержимое, document.write может выводить и скрипты, которые тоже в свою очередь могут содержать document.write . Но нужно помнить: внедрённые в HTML скрипты не могут содержать внутри себя в явном виде строку . Нужно или разорвать этот тег на части ‘ ‘ , или заменить какой-нибудь символ на escape-последовательность . В скриптах, содержащихся во внешних файлах, такие манипуляции не требуются.

Если вложенные скрипты тоже, в свою очередь, содержат document.write , то всё будет выведено последовательно.

Результат на странице будет

Создаём первый скрипт.
Первый скрипт
Создаём второй скрипт.
Второй скрипт
Закончили.

Однако такая последовательность сохраняется до тех пор, пока мы не решим подключить внешние скрипты, выводящие текст на страницу. Создадим, например, файл test1.js с содержимым

И файл test2.js с содержимым

Тогда результат работы скриптов на следующей странице будет различаться в различных браузерах.

В Firefox и Safari выведется ожидаемое

Подключаем test1.js
Содержимое test1.js
Подключаем test2.js
Содержимое test2.js
Закончили подключать

А вот Opera, Chrome и Internet Explorer поведут себя в какой-то мере логично, но не последовательно.

Подключаем test1.js
Подключаем test2.js
Закончили подключать
Содержимое test1.js
Содержимое test2.js

Другими словами, если Firefox и Safari обрабатывают появляющиеся скрипты последовательно, независимо от того, внешние они или внедрёные, то Opera, Chrome и IE выполняют внешние созданные динамически скрипты только после того, как выполнится текущий блок

Читайте также:  Форматирование жесткого диска на низком уровне

Определение и применение

JavaScript метод .write() объекта document записывает в поток документа строку текста. Чтобы открыть поток для записи документа необходимо воспользоваться методом open() объекта document .

Для завершения записи документа (закрыть поток открытый с помощью метода .open() объекта document ) необходимо воспользоваться методом close() объекта document .

Данные в поток могут быть переданы также с помощью метода writeln(). Основное отличие методов .write() и writeln() заключается в том, что метод writeln() дополнительно добавляет символ новой строки.

Имейте ввиду, что если документ существует, то метод open() очистит его содержимое (автоматический вызов метода open() объекта document происходит когда методы .write(), или writeln() вызываются после загрузки страницы, но это не определено в спецификации W3C ).

Методы .write() и writeln() объекта document не работают в документах XHTML, и игнорируются в асинхронных и отложенных (deferred) скриптах.

Поддержка браузерами

Метод Chrome Firefox Opera Safari IExplorer Edge
document .write() Да Да Да Да Да Да

JavaScript синтаксис:

Спецификация

Значения параметров

Параметр Описание
exp1, exp2, . expN Текстовое содержимое, которое будет добавлено в поток. Допускается указать несколько аргументов через запятую, данные в аргументах будут добавлены в документ в порядке их нахождения. Необязательный параметр.

Пример использования

В этом примере с использованием атрибута событий onclick при нажатии на кнопку (HTML элемент ) вызываем функцию myFunc() , которая с использованием JavaScript метода .open() объекта window открывает новое окно браузера, а с помощью метода .open() объекта document открывает поток для записи этого документа. В этот документ с помощью методов .write() и writeln() записываем в поток необходимые строки текста.

Основное отличие методов .write() и writeln() заключается в том, что метод writeln() дополнительно добавляет символ новой строки. Это полезно, например, при работе с HTML элементом

, который сохраняет как пробелы, так и разрывы строк.

После того как мы записали в документ необходимое текстовое содержимое, мы с помощью метода close() объекта document закрываем поток открытый с помощью метода .open() объекта document .

Обратите внимание, что мы дополнительно передали в метод .open() объекта document два аргумента, первый определяет тип документа (" text/html " — HTML документ по умолчанию), а второй аргумент соответствует значению " replace ", которое указывает, что пользователь, если перейдет в открытом окне на новую страницу не сможет обратно на неё вернуться (кнопка браузера "назад" будет не активна).

Читайте также:  Не работает кнопка меню на пульте телевизора

Результат нашего примера:

Пример создания документа в новом окне JavaScript Document

Данный код выведет ошибку о том, что переменная jQuery не объявлена.
С другой стороны:

А этот код выполнится без ошибок, потому что второй тег

А в файле printC.js содержится следующее:

Данный код выведет в консоль следующее:

Из этого примера видно, что весь код из первого тега

Какие еще глупости можно натворить с document.write ?

Да какие угодно!

Например, можно сделать синхронный AJAX-запрос и вставить его результат непосредственно в тело страницы:

Отправка запроса заблокирует загрузку основной страницы, и содержимое ответа будет вставлено так, как если бы оно изначально располагалось на загружаемой странице. В данном случае вместо URL передана пустая строка, поэтому загружаться будет та же самая страница, а она, в свою очередь, снова начнет загружать сама себя, и так до бесконечности*.

* Под «до бесконечности» подразумевается 20 раз. Или 21. Или еще меньше, если вы в IE.

Что-нибудь еще?

В текущей спецификации этого нет (хотя было в прошлых версиях), но можно передавать в document.write несколько параметров, например:

Если метод бесполезен, зачем я про него вообще читаю?

А вот это действительно хороший вопрос!

Любопытно, что только первый вызов document.write после загрузки страницы очищает ее содержимое. Последующие вызовы дописывают текст после первого.

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 10 апреля 2011 в 12:37

Пишем интерпретатор трехадресного кода

extsrc.js — загружаем все скрипты асинхронно и уже после отрисовки страницы (даже с document.write)

MooTools — AJAX + document.write

Заказы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 35

Оригинальная статья какого года? У меня первая ассоциация: "школьник 21 века и кассетный плеер". Я так стар? Уже выросло поколение, не заставшее эпоху, когда половина сайтов работала на это хреновине?

> Существует ли нормальный повод применять document.write?
> Я о таком не слышал.

А как же что-то типа этого?

Поговаривают что некоторые программисты пользуют document.createElement(‘script’) — врут наверное.

По вашей же ссылке лучший ответ:

И следующий ответ советует использовать document.write.

Читайте также:  Электрический чайник редмонд стеклянный

А зачем вам это делать synchronously? Какая объективная причина может быть для этого?

если сторонний скрипт или легаси — то да, может быть, но в своем коде — то проверяться надо и предохраняться. Зависимостей может не быть по многим причинам.

Использую, зачем вы из меня плюшевого мишку делаете? Дискуссия развернулась с вот этой фразы — "Существует ли нормальный повод применять document.write?". ПОВОД! Не нужда.

Извиняюсь за немного резкую фразу.

Как- то не отделяю данные понятия. Нужда даёт повод.

Ну как же? "А как бы нам тут приспособится к этой гребаной либе, которая использует :"№%%:? Да, придется делать document.write." Это нужда.
"А как бы нам тут document.write поиспользовать. Очень хочется, есть где?" Это поиск повода.
Так вот поводов использовать document.write — нет, язык развился, DOM развился, есть нормальные инструменты, закопайте стюардессу.

>> * Под «до бесконечности» подразумевается 20 раз.

Автор статьи, видимо, раньше в рекламе работал?

Существует ли нормальный повод применять document.write?

«Существует ли нормальный повод применять document.write?» Как-то делал фан-сайт игры основной функциональностью которого было показывать логи. Т.е. информация однотипна, уникальной информации мало, и большую часть составляет статистика вычисленная на основе базовой информации, подсвеченные интересные моменты и т.п. Сначала были static html таблички по мегабайту и больше, но т.к. предполагалось что их должно быть много и храниться должны на сервере чуть ли не вечность переделал html в: и все. А подгружаемый скрипт уже с помощью document.write рисовал всю страницу полностью. В итоге вместо >1Мб html, я получил 100b html + 100kb js (который кэшируется) — неимоверная экономия места на сервере, экономия трафика, и страницы стали загружаться моментально*.

*Под «моментально» имеется в виду время загрузки было меньше времени реакции человека.

Вообще, не совсем «пока страница не загружена».
Когда вызовы идут в основном потоке загрузки, то пишется в этот поток.
Но, например:

setTimeout(function () <
document.write(4);
>, 0);

Если страница будет долго грузится и таймер сработает раньше, он грохнет текущий документ ещё до его загрузки.

Много раз сталкивался с примерами document.write и до сих пор не понимаю почему всегда когда вставляется скрипт он разбит на части

будет работать точно также.
Это эстетство или есть определенные подводные камни которые обходят таким образом?

Ссылка на основную публикацию
Canon 600d для видеосъемки
Страница 142 Отснятые видеозаписи рекомендуется просматривать, подключив фотоаппарат к телевизору (стр. 218, 221). Поверните диск установки режима в положение ....
Adblock detector