Книга: JavaScript. Подробное руководство, 6-е издание
13.2.5. JavaScript в URL
13.2.5. JavaScript в URL
Еще один способ выполнения JavaScript-кода на стороне клиента - включение этого кода в URL-адресе вслед за спецификатором псевдопротокола javascript:
. Этот специальный тип протокола обозначает, что тело URL-адреса представляет собою произвольный JavaScript-код, который должен быть выполнен интерпретатором JavaScript. Он интерпретируется как единственная строка, и потому инструкции в ней должны быть отделены друг от друга точками с запятой, а для комментариев следует использовать комбинации символов /* */, а не //. «Ресурсом», который определяется URL-адресом javascript:
, является значение, возвращаемое этим программным кодом, преобразованное в строку. Если программный код возвращает значение undefined
, считается, что ресурс не имеет содержимого.
URL вида javascгipt:
можно использовать везде, где допускается указывать обычные URL: в атрибуте href
тега <а>,
в атрибуте action
тега <form>
и даже как аргумент метода, такого как window.ореп().
Например, адрес URL с программным кодом на языке JavaScript в гиперссылке может иметь такой вид:
<a href="JavaScript:new Date().toLocaleTimeString();">
Который сейчас час?
</a>
Некоторые броузеры (такие как Firefox) выполняют программный код в URL и используют возвращаемое значение в качестве содержимого нового отображаемого документа. Точно так же, как при переходе по ссылке http:, броузер стирает текущий документ и отображает новое содержимое. Значение, возвращаемое примером выше, не содержит HTML-теги, но если бы они имелись, броузер мог бы отобразить их точно так же, как любой другой HTML-документ, загруженный в броузер. Другие броузеры (такие как Chrome и Safari) не позволяют URL-адресам, как в примере выше, затирать содержимое документа - они просто игнорируют возвращаемое значение. Однако они поддерживают URL-адреса вида:
<a href="JavaScript: alert (new Date().toLocaleTimeString()); ">
Узнать время, не затирая документ
</a>
Когда загружается такой URL-адрес, броузер выполняет JavaScript-код, но, т.к. он не имеет возвращаемого значения (метод alert()
возвращает значение undefined
), такие броузеры, как Firefox, не затирают текущий отображаемый документ. (В данном случае URL-адрес javascript:
служит той же цели, что и обработчик события onclick
. Ссылку выше лучше было бы выразить как обработчик события onclick
элемента <button>
- элемент <а>
в целом должен использоваться только для гиперссылок, которые загружают новые документы.) Если необходимо гарантировать, что URL-адрес javascript:
не затрет документ, можно с помощью оператора void
обеспечить принудительный возврат значения undefined
:
<а href="javascript:void window.open('about:blank');">Open Window</a>
Без оператора void
в этом URL-адресе значение, возвращаемое методом Window.ореп()
, было бы преобразовано в строку и (в некоторых броузерах) текущий документ был бы затерт новым документом с текстом:
[object Window]
Подобно HTML-атрибутам обработчиков событий, URL-адреса javascript:
являются пережитком раннего периода развития Веб и не должны использоваться в современных HTML-страницах. URL-адреса javascript:
могут сослужить полезную службу, если использовать их вне контекста HTML-документов. Если потребуется проверить работу небольшого фрагмента JavaScript-кода, можно ввести URL-адрес javascript:
непосредственно в адресную строку броузера. Другое узаконенное применение URL-адресов javascript:
- создание закладок в броузерах, как описывается ниже.
13.2.5.1. Букмарклеты
«Закладкой» в веб-броузере называется сохраненный URL-адрес. Если закладка содержит URL-адрес javascript:
, такая закладка играет роль мини-программы на языке JavaScript, которая называется букмарклетом (bookmarklet). Букмарклеты легко можно запустить из меню или панели инструментов. Программный код в букмарклете выполняется, как если бы он являлся сценарием в странице; он может читать и изменять содержимое документа, его представление и поведение. Если букмарклет не возвращает какое-либо значение, он может манипулировать содержимым любого отображаемого документа, не замещая его новым содержимым.
Взгляните на следующий фрагмент URL javascript:
в теге <а>.
Щелчок на ссылке открывает простейший обработчик JavaScript-выражений, который позволяет вычислять выражения и выполнять инструкции в контексте страницы:
<a href='javascript:
var e = r = /* Вычисляемое выражение и результат */
do {
/* Отобразить выражение и результат, а затем запросить новое выражение */
e = prompt("Выражение: " + e + "n" + r + "n", e);
try { r = "Результат: " + eval(e); } /* Попробовать вычислить выражение */
catch(ex) { r = ex; } /* Или запомнить ошибку */
} while(e); /* продолжать, пока не будет введено пустое выражение */
/* или не будет выполнен щелчок на кнопке Отмена*/
void 0; /* Это предотвращает затирание текущего документа */
'>
Обработчик JavaScript-выражений
</а>
Обратите внимание: несмотря на то что этот программный код записан в нескольких строках, синтаксический анализатор разметки HTML обработает его как одну строку, а потому однострочные комментарии (//) здесь работать не будут. Кроме того, не забывайте, что весь этот программный код является частью значения HTML-атрибута, заключенного в одиночные кавычки, поэтому этот программный код не может содержать одиночные кавычки.
Ссылки, подобные этой, удобны, когда они «зашиты» в тело разрабатываемой страницы, но еще более удобны, когда они хранятся как закладки, которые можно запустить из любой страницы. Обычно закладки создаются щелчком правой кнопкой мыши на странице и выбором в контекстном меню пункта Добавить страницу в закладки или подобного ему. В броузере Firefox для этого достаточно просто перетащить ссылку на панель закладок.
- 13.3. Выполнение JavaScript-программ
- getURL - Переход на веб-страницу
- Spurl
- Листинг 9.3. Пример JavaScript-файла, закрывающего всплывающее окно
- Глава 12 Краткий курс JavaScript
- Справочник по базовому JavaScript
- Основы программирования на JavaScript
- URL-адрес сайта или адрес магазина приложений
- Объект WshUrlShortcut
- Работа с XSLT и JavaScript в Internet Explorer
- Глава 1. Введение в JavaScript
- Новые игрушки! API JavaScript