Букмарклет — это закладка , хранящаяся в веб-браузере и содержащая команды JavaScript, добавляющие в браузер новые функции. Они сохраняются в виде URL- адреса закладки в веб-браузере или в виде гиперссылки на веб-странице . Букмарклеты обычно представляют собой небольшие фрагменты кода JavaScript , которые выполняются, когда пользователь нажимает на них. При нажатии букмарклеты могут выполнять самые разнообразные операции, например запускать поисковый запрос по выделенному тексту или извлекать данные из таблицы.
Другое название букмарклета — favelet или favlet , происходящее от слова «фавориты» (синоним закладки). [1]
Стив Кангас из bookmarklets.com придумал слово bookmarklet [2], когда начал создавать короткие сценарии на основе рекомендаций, содержащихся в руководстве Netscape по JavaScript. [3] До этого Тантек Челик называл эти сценарии фавелетами и использовал это слово еще 6 сентября 2001 года (личный адрес электронной почты [ нужны разъяснения ] ). Брендан Эйх , который разработал JavaScript в Netscape, рассказал о происхождении букмарклетов:
В этом смысле они были преднамеренной функцией: я изобрел
javascript:
URL-адрес вместе с JavaScript в 1995 году и предполагал, чтоjavascript:
URL-адреса можно использовать как любой другой тип URL-адресов, включая возможность добавления в закладки. В частности, я сделал возможным генерировать новый документ, загружая, напримерjavascript:'hello, world'
, , а также (ключ для букмарклетов) запускать произвольный скрипт против DOM текущего документа, напримерjavascript:alert(document.links[0].href)
. Разница в том, что последний тип URL-адреса использует выражение, которое в JS возвращает неопределенный тип. Я добавил оператор void в JS до выхода Netscape 2, чтобы упростить удаление любого неопределённого значения вjavascript:
URL.- Брендан Эйх, в электронном письме Саймону Уиллисону [4]
Более широкое внедрение Политики безопасности контента (CSP) на веб-сайтах вызвало проблемы с выполнением и использованием букмарклетов (2013–2015 гг.), [5] при этом некоторые предполагают, что это означает конец или смерть букмарклетов. [6] [7] Уильям Доннелли создал обходное решение этой проблемы (в конкретном случае загрузки, ссылки и использования кода библиотеки JavaScript) в начале 2015 года с использованием пользовательского сценария Greasemonkey ( расширение браузера Firefox / Pale Moon ). и простой протокол связи букмарклет-пользовательский скрипт . [8] Он позволяет запускать букмарклеты (на основе библиотеки) на любых веб-сайтах, включая те, которые используют CSP и имеют схему https:// URI. Однако обратите внимание, что если/когда браузеры поддерживают отключение/запрет выполнения встроенных скриптов с использованием CSP, и если/когда веб-сайты начнут реализовывать эту функцию, это «сломает» это «исправление».
Веб-браузеры используют URI для href
атрибута тега и закладок. Схема URI, такая как или и которая обычно определяет протокол , определяет формат остальной части строки. Браузеры также реализуют URI, которые для парсера аналогичны любому другому URI. Браузер распознает указанную схему и обрабатывает остальную часть строки как программу JavaScript, которая затем выполняется. Результат выражения, если таковой имеется, рассматривается как исходный код HTML для новой страницы, отображаемой вместо оригинала.<a>
http
ftp
javascript:
javascript
Выполняемый сценарий имеет доступ к текущей странице, которую он может проверять и изменять. Если скрипт возвращает неопределенный тип (а не, например, строку), браузер не будет загружать новую страницу, в результате чего скрипт просто запускается с содержимым текущей страницы. Это позволяет вносить такие изменения, как размер шрифта и цвет на месте, без перезагрузки страницы.
Немедленно вызванная функция , которая не возвращает никакого значения или выражение, которому предшествует void
оператор, не позволит браузеру попытаться проанализировать результат вычисления как фрагмент разметки HTML:
javascript : ( функция (){ //Операторы, возвращающие неопределенный тип, например присваивания})();
Букмарклеты сохраняются и используются как обычные закладки. По сути, это простые инструменты «одного щелчка», которые добавляют функциональность браузеру. Например, они могут:
«Установка» букмарклета позволяет вам быстро получать доступ к программам JavaScript и запускать их одним щелчком мыши на панели закладок вашего браузера. Выполните следующие подробные шаги, чтобы установить букмарклет:
Ctrl+Shift+O
или выбрав «Закладки» в меню браузера, а затем выбрав «Диспетчер закладок».javascript:
фрагмента кода.Чтобы использовать букмарклет, просто щелкните его значок или имя на панели закладок. Код JavaScript будет немедленно выполнен на текущей веб-странице, которую вы просматриваете. Прежде чем использовать букмарклет, убедитесь, что веб-страница полностью загружена, чтобы обеспечить оптимальную производительность.
Этот пример букмарклета выполняет поиск в Википедии по любому выделенному тексту в окне веб-браузера. При обычном использовании следующий код JavaScript будет установлен в закладку на панели инструментов закладок браузера [13] . С этого момента, после выбора любого текста, щелчок по букмарклету выполняет поиск.
javascript : ( функция () { функция se ( d ) { вернуть д . выбор ? д . выбор . создатьдиапазон (). текст : д . получить выбор () } вар s = se ( документ ); for ( var i = 0 ; i < frames . length && ( s == null || s == '' ); я ++ ) s = se ( frames [ i ]. document ); if ( ! s || s == '' ) s = Prompt ( 'Enter%20search%20terms%20for%20Wikipedia' , '' ); open ( 'https://en.wikipedia.org' + ( s ? '/w/index.php?title=Special:Search&search=' + encodeURIComponent ( s ) : '' )). фокус (); })();
Букмарклеты могут изменять местоположение , например, для сохранения веб-страницы на Wayback Machine .
javascript : местоположение . href = 'https://web.archive.org/save/' + документ . расположение . href ;
Откройте новое окно или вкладку веб-браузера , например, чтобы показать источник веб-ресурса, если веб-браузер поддерживает схему URI источника представления ,
javascript : void ( window . open ( 'view-source:' + location ));
Показать информацию, связанную с текущим URL-адресом , например:
javascript : alert ( '\tdocument.URL\n' + document . URL + ' \n\tdocument.lastModified\n' + document.lastModified + '\n\tlocation\n' + location ) ;
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )