Еще один способ исполнения JavaScript_кода на стороне клиента – написание этого кода в URL_адресе вслед за спецификатором псевдопротокола javascript:. Этот специальный тип протокола обозначает, что тело URL_адреса представляет собою произвольный JavaScript_код, который должен быть выполнен интерпре_ татором JavaScript. URL_адрес интерпретируется как единственная строка и по_ тому инструкции в ней должны быть отделены друг от друга точками с запятой, а для комментариев следует использовать комбинации символов /* */, а не //. Подобный URL_адрес может выглядеть, например, так:
javascript:var now = new Date(); "<h1>Время:</h1>" + now;
Когда броузер загружает такой URL_адрес, он исполняет содержащийся в нем код и использует строковое значение последней JavaScript_инструкции в качест_ ве содержимого нового отображаемого документа. Это строковое значение мо_ жет содержать HTML_теги, оно форматируется и отображается точно так же, как любой другой документ, загруженный в броузер.
URL_адрес с JavaScript_кодом может также содержать JavaScript_инструкции, выполняющие действия, но не возвращающие значения. Например:
javascript:alert("Hello World!")
Когда загружается подобный URL_адрес, броузер исполняет JavaScript_код, но т. к. значения для вывода в новом документе нет, он не изменяет текущий до_ кумент.
Часто возникает необходимость использовать спецификатор javascript: в URL_ адресе для исполнения некоторого кода без изменения текущего отображаемого документа. Для этого необходимо, чтобы последняя инструкция в URL_адресе не возвращала значение. Один из способов обеспечить отсутствие возвращаемого значения состоит в том, чтобы посредством оператора void явно указать неопре_ деленное возвращаемое значение. Просто в конец URL_адреса со спецификато_ ром javascript: поместите инструкцию:
void 0;
Вот, например, как выглядит URL_адрес, открывающий новое пустое окно бро_ узера без изменения содержимого текущего окна:
javascript:window.open("about:blank"); void 0;
Без оператора void в этом URL_адресе значение, возвращаемое вызванным мето_ дом Window.open(), было бы преобразовано в строку и отображено, в результате те_ кущий документ был бы замещен документом, в котором присутствовало что_то вроде следующего:
[object Window]
13.4. JavaScript в URL
URL_адрес со спецификатором javascript: можно указывать везде, где использу_ ется обычный URL_адрес. Один из важных приемов применения этого синтакси_ са – его ввод непосредственно в адресную строку броузера. Так можно проверять на исполнение произвольный JavaScript_код без необходимости открывать ре_ дактор и создавать HTML_файл с этим кодом.
Спецификатор псевдопротокола javascript: может использоваться в HTML_ат_ рибутах везде, где используются строки URL_адресов. Атрибут href гиперссыл_ ки – одно из таких мест. Когда пользователь щелкает на такой ссылке, исполня_ ется указанный JavaScript_код. В данном контексте URL_адрес со спецификато_ ром javascript: является, по сути, заменой обработчика события onclick. (Следу_ ет отметить, что и использование обработчика события onclick или URL_адреса со спецификатором javascript: в HTML_гиперссылках – это признак плохо про_ думанного дизайна; для нужд приложения следует применять кнопки и другие элементы управления, а гиперссылки оставить только для загрузки новых доку_ ментов.) Аналогичным образом URL_адрес со спецификатором javascript: мо_ жет указываться в качестве значения атрибута action тега <form> – благодаря это_ му при принятии пользователем формы выполняется JavaScript_код.
URL_адрес со спецификатором javascript: может также передаваться методам, таким как Window.open() (подробности см. в главе 14), которые ожидают полу_ чить строку URL_адреса в качестве аргумента.