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

<b>Узнать время, не затирая документ</b>

<b>&lt;/a&gt;</b>

Когда загружается такой URL-адрес, броузер выполняет JavaScript-код, но, т.к. он не имеет возвращаемого значения (метод

<b>alert()</b>
возвращает значение
<b>undefined</b>
), такие броузеры, как Firefox, не затирают текущий отображаемый документ. (В данном случае URL-адрес
<b>javascript:</b>
служит той же цели, что и обработчик события
<b>onclick</b>
. Ссылку выше лучше было бы выразить как обработчик события
<b>onclick</b>
элемента
<b>&lt;button&gt;</b>
- элемент
<b>&lt;а&gt;</b>
в целом должен использоваться только для гиперссылок, которые загружают новые документы.) Если необходимо гарантировать, что URL-адрес
<b>javascript:</b>
не затрет документ, можно с помощью оператора
<b>void</b>
обеспечить принудительный возврат значения
<b>undefined</b>
:

<b>&lt;а href=&quot;javascript:void window.open('about:blank');&quot;&gt;Open Window&lt;/a&gt;</b>

Без оператора

<b>void</b>
в этом URL-адресе значение, возвращаемое методом
<b>Window.ореп()</b>
, было бы преобразовано в строку и (в некоторых броузерах) текущий документ был бы затерт новым документом с текстом:

<b>[object Window]</b>

Подобно HTML-атрибутам обработчиков событий, URL-адреса

<b>javascript:</b>
являются пережитком раннего периода развития Веб и не должны использоваться в современных HTML-страницах. URL-адреса
<b>javascript:</b>
могут сослужить полезную службу, если использовать их вне контекста HTML-документов. Если потребуется проверить работу небольшого фрагмента JavaScript-кода, можно ввести URL-адрес
<b>javascript:</b>
непосредственно в адресную строку броузера. Другое узаконенное применение URL-адресов
<b>javascript:</b>
- создание закладок в броузерах, как описывается ниже.

13.2.5.1. Букмарклеты

«Закладкой» в веб-броузере называется сохраненный URL-адрес. Если закладка содержит URL-адрес

<b>javascript:</b>
, такая закладка играет роль мини-программы на языке JavaScript, которая называется букмарклетом (bookmarklet). Букмарклеты легко можно запустить из меню или панели инструментов. Программный код в букмарклете выполняется, как если бы он являлся сценарием в странице; он может читать и изменять содержимое документа, его представление и поведение. Если букмарклет не возвращает какое-либо значение, он может манипулировать содержимым любого отображаемого документа, не замещая его новым содержимым.

Взгляните на следующий фрагмент URL

<b>javascript:</b>
в теге
<b>&lt;а&gt;.</b>
Щелчок на ссылке открывает простейший обработчик JavaScript-выражений, который позволяет вычислять выражения и выполнять инструкции в контексте страницы:

<b>&lt;a href='javascript:</b>

<b>  var e = r = /* Вычисляемое выражение и результат */</b>

<b>  do {</b>

<b>    /* Отобразить выражение и результат, а затем запросить новое выражение */</b>

<b>    e = prompt(&quot;Выражение: &quot; + e + &quot;\n&quot; + r + &quot;\n&quot;, e);</b>

<b>    try { r = &quot;Результат: &quot; + eval(e); } /* Попробовать вычислить выражение */</b>

<b>    catch(ex) { r = ex; } /* Или запомнить ошибку */</b>

<b>  } while(e); /* продолжать, пока не будет введено пустое выражение */</b>

<b>  /* или не будет выполнен щелчок на кнопке Отмена*/ </b>

<b>  void 0; /* Это предотвращает затирание текущего документа */</b>

<b>'&gt;</b>

<b>  Обработчик JavaScript-выражений </b>

<b>&lt;/а&gt;</b>

Обратите внимание: несмотря на то что этот программный код записан в нескольких строках, синтаксический анализатор разметки HTML обработает его как одну строку, а потому однострочные комментарии (//) здесь работать не будут. Кроме того, не забывайте, что весь этот программный код является частью значения HTML-атрибута, заключенного в одиночные кавычки, поэтому этот программный код не может содержать одиночные кавычки.

Ссылки, подобные этой, удобны, когда они «зашиты» в тело разрабатываемой страницы, но еще более удобны, когда они хранятся как закладки, которые можно запустить из любой страницы. Обычно закладки создаются щелчком правой кнопкой мыши на странице и выбором в контекстном меню пункта Добавить страницу в закладки или подобного ему. В броузере Firefox для этого достаточно просто перетащить ссылку на панель закладок.

13.3. Выполнение JavaScript-программ

Вообще говоря, не существует формального определения программы на клиентском языке JavaScript. Можно лишь сказать, что программой является весь программный код на языке JavaScript, присутствующий в веб-странице (встроенные сценарии, обработчики событий в разметке HTML и URL-адреса

<b>javascript:</b>
), а также внешние сценарии JavaScript, на которые ссылаются атрибуты
<b>src</b>
тегов
<b>&lt;script&gt;.</b>
Все эти отдельные фрагменты программного кода совместно используют один и тот же глобальный объект
<b>Window</b>
. Это означает, что все они видят один и тот же объект
<b>Document</b>
и совместно используют один и тот же набор глобальных функций и переменных: если сценарий определяет новую глобальную переменную или функцию, эта переменная или функция будет доступна любому программному коду на языке JavaScript, который будет выполняться после этого сценария.

Если веб-страница содержит встроенный фрейм (элемент

<b>&lt;iframe&gt;</b>
), JavaScript-код во встроенном документе будет работать с другим глобальным объектом, отличным от глобального объекта в объемлющем документе, и его можно рассматривать как отдельную JavaScript-программу. Однако напомню, что не существует формального определения, устанавливающего границы JavaScript-программы. Если оба документа, вмещающий и вложенный, получены с одного сервера, то программный код в одном документе сможет взаимодействовать с программным кодом в другом документе и их можно считать взаимодействующими частями одной программы. Подробнее о глобальном объекте
<b>Window</b>
и о взаимодействии программ, выполняющихся в разных окнах и фреймах, рассказывается в разделе 14.8.3.