Букмарклет — это закладка , хранящаяся в веб-браузере , которая содержит команды JavaScript, добавляющие новые функции в браузер. Они хранятся как URL-адрес закладки в веб-браузере или как гиперссылка на веб-странице . Букмарклеты обычно представляют собой небольшие фрагменты JavaScript , выполняемые при щелчке пользователя. При щелчке букмарклеты могут выполнять широкий спектр операций, таких как запуск поискового запроса из выделенного текста или извлечение данных из таблицы.
Другое название букмарклета — фавелет или фавлет , происходящее от favorites (синоним слова bookmark). [1]
Стив Кангас из bookmarklets.com придумал слово букмарклет [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 ) { return d.selection ? d.selection.createRange ( ) . text : d.getSelection ( ) } var s = se ( документ ); для ( var i = 0 ; i < frames . length && ( s == null || s == '' ); i ++ ) s = se ( frames [ i ]. document ); если ( ! s || s == '' ) s = prompt ( 'Введите%20термины%20поиска%20для%20Википедии' , '' ); открыть ( 'https://en.wikipedia.org' + ( s ? '/w/index.php?title=Special:Search&search=' + encodeURIComponent ( s ) : '' )). focus (); })();
Букмарклеты могут изменять местоположение , например, сохранять веб-страницу на Wayback Machine ,
javascript : location . href = 'https://web.archive.org/save/' + document . location . 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: бот: исходный статус URL неизвестен ( ссылка )