Чтение онлайн

на главную

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Из всех этих свойств наибольший интерес представляет свойство

referrer
: оно содержит URL-адрес документа, содержащего ссылку, которая привела пользователя к текущему документу. Это свойство можно было бы использовать, как показано ниже:

if (document.referrer.indexOf(" http://www.google.com/search ?") == 0) {

var args = document.referrer.substring(ref.index0f("?")+1).split("&");

for(var і = 0; і < args.length; i++) {

if (args[і].substrings,2) == "q=") {

document.write("flo6po пожаловать, пользователь Google. ");

document.write("Вы искали: " +

unescape(args[i]. substring^)). replace(' + ', ' ');

break;

}

}

}

Метод

document.write,
использованный в этом примере, является темой следующего раздела.

15.10.2. Метод document.write

Метод

document.write
был одним из первых методов, реализованных еще в вебброузере Netscape 2. Он появился еще до создания модели DOM и представлял единственный способ отображения динамически изменяемого текста в документе. В современных сценариях надобность в этом методе отпала, но вы наверняка встретите его в существующем программном коде.

Метод

document.write
объединяет свои строковые аргументы и вставляет получившуюся строку в документ, в точку вызова метода. По завершении выполнения сценария броузер выполнит синтаксический анализ сгенерированного вывода и отобразит его. Например, следующий фрагмент использует метод
write
для динамического вывода информации в статический HTML-документ:

<script>

document.write("3arоловок документа: " + document.title);

document.write("<br>URL: " + document.URL);

document.write("<br>Ссылающийся на него документ: " + document, referrer);

document.write("<br>изменен: " + document.lastModified);

document.write("<br>Открыт: " + new Date);

</script>

Важно понимать, что метод

write
можно использовать для вывода разметки HTML только в процессе синтаксического анализа документа. То есть вызывать метод
document.write
из программного кода верхнего уровня в теге
<script>
можно только в случае, если выполнение сценария является частью процесса анализа документа. Если поместить вызов
document.write
в определение функции и затем вызвать эту функцию из обработчика события, результат окажется неожиданным - этот вызов уничтожит текущий документ и все содержащиеся в нем сценарии! (Почему это происходит, будет описано чуть ниже.) По тем же причинам нельзя использовать
document.write
в сценариях с установленными атрибутами
defer
или
async
.

Пример 13.3 в главе 13 использует метод

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

Метод

write
можно использовать для создания полностью новых документов в других окнах и фреймах. (Однако при работе с другими окнами и фреймами необходимо позаботиться о том, чтобы не нарушать политику общего происхождения.) Первый вызов метода
write
другого документа полностью уничтожит имеющееся содержимое этого документа. Метод
write
можно вызывать многократно, тем самым добавляя новое содержимое в документ. Содержимое, передаваемое методу
write,
может буферизоваться (и не отображаться), пока не будет выполнен завершающий вызов метода
close
объекта документа, сообщающий парсеру, что работа с документом окончена и он может выполнить разбор документа и отобразить его.

Следует отметить, что объект

Document
поддерживает также метод
writeln,
который идентичен методу
write,
за исключением того, что он добавляет символ перевода строки после вывода своих аргументов. Это может пригодиться, например, при выводе форматированного текста внутри элемента
<рге>
.

Метод

document.write
редко используется в современных сценариях: свойство
innerHTML
и другие приемы, поддерживаемые моделью DOM, обеспечивают более удачные способы добавления содержимого в документ. С другой стороны, некоторые алгоритмы лучше укладываются в схему потокового ввода/вывода, реализуемую методом
write.
Если вы создаете сценарий, который динамически генерирует и выводит текст в процессе своего выполнения, вам, возможно, будет интересно ознакомиться с примером 15.10, в котором свойство
innerHTML
указанного элемента обертывается простыми методами
write
и
close.

Пример 15.10. Интерфейс потоков ввода-вывода к свойству innerHTML

// Определить простейший интерфейс "потоков ввода/вывода” для свойства innerHTML элемента

function ElementStream(elt) {

if (typeof elt === "string”) elt = document.getElementByld(elt);

this.elt = elt; this.buffer = "”;

}

// Объединяет все аргументы и добавляет в буфер

ElementStream.prototype.write = function {

this.buffer += Array.prototype.join.call(arguments,

};

// To же, что и write, но добавляет символ перевода строки

ElementStream.prototype.writeln = function {

this.buffer += Array.prototype.join.call(arguments, "") + "\n";

};

// Переносит содержимое буфера в элемент и очищает буфер.

ElementStream.prototype.close = function {

this.elt.innerHTML = this.buffer; this.buffer = "";

};

Поделиться:
Популярные книги

На границе империй. Том 10. Часть 7

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 7

Фантом памяти

Маринина Александра
2. Преступления правильной жизни
Детективы:
прочие детективы
8.43
рейтинг книги
Фантом памяти

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Товарищ "Чума" 7

lanpirot
7. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 7

Целого Мира Мало

Джиллиан Алекс
Любовные романы:
современные любовные романы
8.88
рейтинг книги
Целого Мира Мало

Хозяин Стужи 4

Петров Максим Николаевич
4. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Хозяин Стужи 4

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Дважды одаренный

Тарс Элиан
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Дважды одаренный

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Изгой Проклятого Клана. Том 3

Пламенев Владимир
3. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 3

Эволюционер из трущоб. Том 10

Панарин Антон
10. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 10

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17

Я все еще не князь. Книга XV

Дрейк Сириус
15. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще не князь. Книга XV