Книга: 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 для этого достаточно просто перетащить ссылку на панель закладок.

Оглавление книги


Генерация: 1.053. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз