• В разделе 14.1 демонстрируется, как с помощью функций
setTimeout
и
setlnterval
зарегистрировать собственную функцию для вызова в определенные моменты времени в будущем.
• В разделе 14.2 описывается, как использовать свойство
location
, чтобы получить URL-адрес текущего документа и загрузить новый документ.
• В разделе 14.3 описывается свойство
history
и демонстрируется, как перемещаться взад и вперед по списку ранее посещавшихся страниц.
• В разделе 14.4 демонстрируется, как использовать свойство
navigator
для получения информации о производителе броузера и как использовать свойство
screen
для определения размеров рабочего стола.
• В разделе 14.5 демонстрируется, как выводить простые диалоги с текстовыми сообщениями, используя методы
alert,
confirm
и
prompt
, и как отображать диалоги с разметкой HTML с помощью метода
showModalDialog
.
• В разделе 14.6 описывается, как регистрировать обработчик
onerror
, который будет вызываться при появлении необработанных исключений.
• В разделе 14.7 рассказывается о том, что идентификаторы и имена HTML-элементов используются в качестве свойств объекта
Window
.
• В самом длинном разделе 14.8 описывается, как открывать и закрывать окна броузера и как писать JavaScript-код, призванный взаимодействовать с несколькими окнами и фреймами.
14.1. Таймеры
Функции
setTimeout
и
setlnterval
позволяют зарегистрировать функцию, которая будет вызываться один или более раз через определенные интервалы времени. Это очень важные функции для клиентского JavaScript, и поэтому они были определены как методы объекта
Window
, несмотря на то что являются универсальными функциями, не выполняющими никаких действий с окном.
Метод
setTimeout
объекта Window планирует запуск функции через определенное число миллисекунд. Метод
setTimeout
возвращает значение, которое может быть передано методу
clearTimeout
, чтобы отменить запланированный ранее запуск функции.
Метод
setlnterval
похож на
setTimeout,
за исключением того, что он автоматически заново планирует повторное выполнение через указанное количество миллисекунд:
setInterval(updateClock, 60000); // Вызывать updateClock через каждые 60 сек.
Подобно
setTimeout,
метод
setlnterval
возвращает значение, которое может быть передано методу
clearlnterval
, чтобы отменить запланированный запуск функции.
В примере 14.1 определяется вспомогательная функция, которая ожидает указанный интервал времени, многократно вызывает указанную функцию и затем отменяет запланированные вызовы по истечении другого заданного интервала времени. Этот пример демонстрирует использование методов
setTimeout, setlnterval
и
clearlnterval.
Пример 14.1. Вспомогательная функция для работы с таймером
/*
* Планирует вызов или вызовы функции f в будущем.
*
Ожидает перед первым вызовом start миллисекунд, затем вызывает f
* каждые interval миллисекунд и останавливается через start+end миллисекунд.
* Если аргумент interval указан, а аргумент end нет, повторяющиеся вызовы функции f
* никогда не прекратятся. Если отсутствуют оба аргумента, interval и end,
* тогда функция f будет вызвана только один раз, через start миллисекунд.
* Если указан только аргумент f, функция будет вызвана немедленно, как если бы
* в аргументе start было передано число 0. Обратите внимание, что вызов invokeQ
* не блокируется: она сразу же возвращает управление.
*/
function invoke(f, start, interval, end) {
if (!start) start =0; //По умолчанию через 0 мс
if (arguments.length <= 2) // Случай однократного вызова
setTimeout(f, start); // Вызвать 1 раз через start мс.
else { // Случай многократного вызова
setTimeout(repeat, start); // Начать вызовы через start мс
function repeat { // Планируется на вызов выше
var h = setlntervalQ, interval); // Вызывать f через interval мс.
// Прекратить вызовы через end мс, если значение end определено
if (end) setTimeout(function { clearlnterval(h); }, end);
}
}
}
По исторически сложившимся причинам в первом аргументе методам
setTimeout
и
setlnterval
допускается передавать строку. В этом случае строка будет интерпретироваться (как с применением функции
eval
) через указанный интервал, времени. Спецификация HTML5 (и все броузеры, кроме IE) допускает передавать методам
setTimeout
и
setlnterval
дополнительные аргументы после первых двух. Все эти дополнительные аргументы будут передаваться функции, вызов которой планируется этими методами. Однако если требуется сохранить совместимость с IE, эту возможность использовать не следует.
Если методу
setTimeout
указать величину интервала 0 миллисекунд, указанная функция будет вызвана не сразу, а «как только такая возможность появится, т. е. как только завершат работу все обработчики событий.
14.2. Адрес документа и навигация по нему
Свойство
location
объекта
Window
ссылается на объект
Location
, представляющий текущий URL-адрес документа, отображаемого в окне и определяющий методы, инициирующие загрузку нового документа в окно.