Предлагаю админам прекрепить эту тему. Потому что это тоже разнавидность скриптов.
Введение:
Bookmarklets (букмарклеты) - закладки с JavaScript кодом. Код выполняется в момент нажатия и может влиять на страницу, как обычный JavaScript. Код нужно вставлять в поле адреса (по сути работает, как тег <a href="javascript:alert('Hello!');">Hello!</a>).
Bookmarklets работают во всех современных браузерах.
Как создать bookmarklet?
1. Создать закладку.
2. Вставить в поле адреса код bookmarklet
Готово!
Стандартный шаблон bookmarklet:
На место alert('test'); подставьте стандартный код JavaScript. После нажатия на закладку - он выполнится.
Пример 1:
Делаем переадресацию с адреса вида: https://developer.mozilla.org/ru/Add-ons/WebExtensions
На адрес вида: https://developer.mozilla.org/en-US/Add-ons/WebExtensions.
javascript:void((function () { window.location.href = document.location.href.replace(/^https?\:\/\/(www\.)?developer\.mozilla\.org\/[a-z]+(\-[a-z]+)?\//i, 'https://developer.mozilla.org/en-US/'); })());
Пример 2:
Просто редирект (перенаправление) с текущего адреса на результат его проверки.
То есть:
Было - google.ru
Стало - https://www.similarweb.com/website/google.ru
javascript: void((function() { window.open('https://www.similarweb.com/website/' + document.domain); })());
Пример 3:
Поиск в гугл выделенного на странице текста.
Выделить текст на странице. Нажать bookmarklet - откроется страница с результатами поиска в google.
javascript:void((function () { function getSelectionText() { const activeEl = document.activeElement; const activeElTagName = activeEl.tagName.toLowerCase(); if (activeEl && (activeElTagName === 'textarea' || activeElTagName === 'input')) { return activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd); } return String(window.getSelection()); } const url = 'https://www.google.ru/search?q=%s'; window.location.href = url.replace(/\%s/, getSelectionText()); })());
Что за странный вид кода получается при вставке Bookmarklet в закладку?
Это URI Encoding в который кодируется JavaScript, потому что в адресе нельзя пробелы. Ну и чтобы проблем с кодировками не было.
Вы увидете код похожего вида:
javascript:void((function%20()%20{%20%20%20window.location.href%20=%20document.location.href.replace(/^https?\:\/\/(www\.)?developer\.mozilla\.org\/[a-z]+\-?[a-z]*\//i,%20'https://developer.mozilla.org/en-US/');%20})());
Существует 2 (два) стандартных способа вернуть этому коду оригинальный вид:
1. Вставить код в онлайн сервис: http://jsbeautifier.org/ или любой другой.
2. Использовать стандартные инструменты браузера (ctrl+shift+I) и там в разделе "дебаг" (отладка) есть кнопочка, которая делает код красивым.
Конечно вы можете найти любое дополнение или даже отдельную программу для красивого форматирования кода. Например дополнение Web Developer или любая IDE типа Eclipse или NetBeans умеет красиво форматировать. Как и множество плагинов для текстовых редакторов: Notepad++, Atom и других.
Оптимизаци:
Лишние пробелы и табуляция, длинные имена переменных, комментарии. Всё это занимает место и память. Некоторые куски кода меденные, хотя это неочевидно.
Оптимизатор Google Closure Compiler исправит всё за вас! Просто вставьте код в окошко и нажмите кнопочку! Это не единственный оптимизатор, их не мало, например: UglifyJS
Если видите код с переменными a, b, c - это не значит, что его кто-то так писал:
Его пропустили через оптимизатор.
Обфускация (в качестве шутки, но знать об этом надо, если встретите)
Хотите скрыть ваш код от злобного соперника, который может скопировать и изменить ваш скрипт под себя? Тогда вам на выбор несколько сервисов заменяющих имена функций на последовательность символов, которые после компиляции выполняются как ваш код (по сути это он и есть):
http://www.jsfuck.com/
http://utf-8.jp/public/jjencode.html
http://utf-8.jp/public/aaencode.html
Хотите немного запутать сам текст? Тогда вам в помощь leet speak:
http://textinvert.ru/
http://www.sherv.net/weirdmaker.html
https://eeemo.net/
Где писать bookmarklets??? (инструменты разработки)
1. Самый простой и удобный инструмент: Scratchpad. Он встроен в Firefox, нажмите Shift+F4 для открытия. И откройте консоль, чтобы видеть ошибки: Ctrl+Shift+K. Только нужно помнить, что и Scratchpad не всегда ведет себе так, как поведет bookmarklet.
2. Множество сред разработки (IDE) типа Eclipse или NetBeans могут открывать результат работы JavaScript в браузере или даже имеют встроенный браузер.
3. Atom - текстовый редактор. По сути сам является браузером. Но для удобной разработки придется поискать плагины к нему.
4. GreaseMonkey - в нём тоже можно тестировать код, только нужно иметь ввиду, что возможности и привилегии кода в GreaseMonkey больше. Поэтому код работающий там может не сработать в bookmarklet. Для Chrome (Chromium) есть аналог: Tampermonkey
Как писать bookmarklets???
1. Способ 1: просто писать код. По некоторым сведениям до 2000 символов. (поэтому код пропускают через оптимизатор - чтобы больше кода поместилось)
2. Способ 2: написать код, который подгружает другой код из интернета и выполняет. Так снимается ограничение на 2000 символов.
Хаки bookmarklet (отличия от JavaScript)
1. Если функция вернет без void значение return '123', то возвращенное значение '123' откроется в текущей вкладке и будет помещено в <body>...</body> пустой страницы.
Проблемы:
1. Если на сайте включено Content Security Policy, то window.open(), window.location.href = document.URL и подобные функции для загрузки контента с других сайтов не сработают.
Причем такой хак со вставкой скрипта в страницу содержимое которой получаем через return - тоже не сработает. И при этом даже ошибок в консоль не пишет:
javascript: (function() { const s = document.createElement('script'); s.innerHTML = "window.open('https://web.archive.org/web/' + location.href)"; return s; })();
Ссылки:
https://en.wikipedia.org/wiki/Bookmarklet - страница на Википедии
https://forum.mozilla-russia.org/viewto … =36530&p=1 - старая тема на этом форуме
https://support.mozilla.org/ru/kb/ispol … olneniya-z - описание bookmarlets на mozilla.org с парой ссылок на примеры
http://javascript.ru/unsorted/bookmarklet - гайд на javascript.ru
Гайд на habrahabr.ru: Часть 1, Часть 2, Часть 3
Отредактировано Dorian (21-10-2016 20:49:04)
Отсутствует
Да вроде есть уже тема https://forum.mozilla-russia.org/viewtopic.php?id=36530
Что за странный вид кода получается при вставке Bookmarklet в закладку?
Это base64, а точнее URI Encoding в который кодируется JavaScript, потому что в адресе нельзя пробелы.
А при чём здесь base64?
Отсутствует
А при чём здесь base64?
Исправил.
Да вроде есть уже тема https://forum.mozilla-russia.org/viewtopic.php?id=36530
Она не прикреплена и уже старая. Нету шапки темы. Хотя перенести что-то оттуда можно.
Отредактировано Dorian (11-10-2016 22:45:19)
Отсутствует
Пример 4:
Open site through web.archive.org bookmarklet
Открывает текущий сайт в веб архиве.
javascript: void((function() { window.open('https://web.archive.org/web/' + document.location.href); })());
Отредактировано Dorian (21-10-2016 20:58:53)
Отсутствует
А кто устанавливал Tampermonkey на браузер Edge? У меня не устанавливаются скрипты, они просто скачиваются в папку, а не устанавливаются. Может их вручную нужно на Edge устанавливать? Не знаю куда написать, написал здесь...
Не много не по теме форум выбрал Здесь вроде только Mozilla ????
Отсутствует
Есть у меня буркмарклет Upload
javascript:(function(){var%20c='ujs_max_upload',w=window,d=(w.document.body%20instanceof%20HTMLFrameSetElement%3Fw.frames[0]:w).document,e=d.getElementById(c);if(e){e.del();return};e=d.createElement('div');e.id=c;e.setAttribute('style','display:none;position:fixed;right:0;bottom:0;width:auto;height:auto;border:1px%20solid%20%23555;padding:10px;text-align:left;z-index:99999;background-color:%23EEE;background:-o-skin(%5Cx22Window%20Skin%5Cx22);');e.add=function(lnk,frm){var%20d=this.ownerDocument,a=d.createElement('a');a.href=lnk.href;a.target='_blank';a.setAttribute('style','padding:0;margin:0;border:none;text-decoration:none;color:%2300C;font:14px%20Times%20New%20Roman;');a.appendChild(d.createTextNode(lnk.text));this.appendChild(a);var%20f=d.createElement('form');f.action=lnk.action;f.method='post';f.enctype='multipart/form-data';f.target='_blank';f.setAttribute('style','display:block;margin:5px;');var%20t=d.createElement('input');t.type='file';t.name=lnk.name;t.setAttribute('style','width:auto;height:auto;padding:1px;margin:0;border-color:%23AAA;font:12px%20Arial;');t.onchange=function(){this.nextSibling.disabled=!this.value};f.appendChild(t);var%20s=d.createElement('input');s.type='submit';s.value='Upload';s.disabled=true;s.setAttribute('style','width:auto;height:auto;padding:1px%204px;margin:0%200%200%202px;color:buttontext;font:12px%20Arial;');f.appendChild(s);if(frm)for(var%20name%20in%20frm){var%20h=d.createElement('input');h.type='hidden';h.name=name;h.value=frm[name];f.appendChild(h)};this.appendChild(f)};e.vis=function(v){this.style.display=v%3F'block':'none';return%20this.offsetHeight*this.offsetWidth};e.del=function(){this.vis(false);this.parentNode.removeChild(this)};var%20b=d.createElement('div');b.title='Close';b.setAttribute('style','display:block;float:right;height:18px;width:18px;padding:0;margin:-5px;border:none;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin(%5Cx22Caption%20Close%20Button%20Skin%5Cx22);cursor:pointer');b.onclick=function(){this.parentNode.del()};e.appendChild(b);e.add({href:'http://fastpic.ru',text:'FastPic.ru',action:'http://fastpic.ru/uploadmulti',name:'file[]'},{uploading:'1'});e.add({href:'http://rghost.ru/',text:'Rghost.ru',action:'http://kaon.rghost.ru/files',name:'file'},{'data-max-file-size':'52428800'});d.documentElement.appendChild(e);e.vis(true)})();
Отправляет файлы на fastpic и rghost. Но теперь с rghost он не справляется. Почините пожалуйста, или предложите что-то альтернативное.
Отсутствует
Возможно ли получить доступ к gBrowser из bookmarklet?
Отсутствует
У меня в Firefox есть несколько букмарклетов для перевода текста и страниц. Но когда я захожу на сайт addons.mozilla.org и пытаюсь перевести какое-нибудь английское описание расширения — ни один из букмарклетов не срабатывает. Как это обойти?
Отсутствует
Пандёнок
думаю, должно помочь такое (в user.js):
/* 2662: disable webextension restrictions on certain mozilla domains (см. 4503) [FF60+] ***/ user_pref("extensions.webextensions.restrictedDomains", ""); /* 4503: disable mozAddonManager Web API [FF57+] * [NOTE] На FF60+ совместно с (2662) заставит работать расширения на AMO и т.п. * привилегированных страницах. Например переводчики. В итоге функционал удаления, * поломается и кнопка установки на AMO всегда будет в состоянии "Установить...". ***/ user_pref("privacy.resistFingerprinting.block_mozAddonManager", true); // [HIDDEN PREF]
Отредактировано Inko7 (25-04-2020 12:56:50)
Отсутствует
Пандёнок
Некоторые работают. Перевод выделенного...на вскидку:
javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection &&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){window.open('http://translate.google.com/translate_t?text='+t+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e);}else{window.open('http://translate.google.com/translate?u='+escape(location.href)+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e);};void 0;
javascript:(function(){ var text = encodeURI(document.getSelection()); if (!text.length) { text = prompt('%D0%A7%D1%82%D0%BE %D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%B5%D1%81%D1%82%D0%B8') } var url = 'https://translate.yandex.ru/?text=' + text + ' &sl=es&tl=pt#';%20window.open(url,'trans','left=0,top=90,width=1080,height=400,toolbar=0,location=0,resizable=1');%20})();
Отсутствует
Inko7
oleg.sgh
Странно, сейчас на 78.6.0esr (64-битный) работает всё, что угодно, на AMO. При том, что в user.js и в about:config я ничего не менял, функционал AMO не поломан.Но вылезла другая проблема: при попытке переводе всей страницы букмарклетом для Переводчика Google перевода страницы не происходит, пока не нажму вначале «Оригинал», потом «Перевод».
Пробовал разные букмарклеты:
javascript:var%20t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection%20&&document.selection.createRange&&document.selection.createRange().text));var%20e=(document.charset||document.characterSet);if(t!=''){window.open('http://translate.google.com/translate_t?text='+t+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e);}else{window.open('http://translate.google.com/translate?u='+escape(location.href)+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e);};void 0;
(который должен при невыделенном тексте переводить всю страницу, а при выделенном — этот текст)
javascript:q=(document.location.href);void(open('http://translate.google.com/translate?u='+escape(q)));
javascript:q=(document.location.href);void(open('http://translate.google.com/translate?u='+escape(q),'_self'));
(моb самодельныt, для перевода только всей страницы)
— результат одинаковый.
Добавлено 06-01-2021 21:29:44
При этом расширения для перевода, например, To Google Translate — работают с первой попытки.
Добавлено 06-01-2021 21:44:59
Вопрос решён!!! Всё проще, чем я думал: достаточно вместо адреса
http://translate.google.com/translate?u=
использовать
http://translate.google.com/translate?sl=auto&tl=ru&u=
или
https://translate.google.com/translate?sl=auto&tl=ru&u=
Соответственно, как минимум не нужен элемент
Обновил букмарклеты для Переводчика Google в FAQ в соответствии с тем, как это работает из расширения To Google Translate.
Отредактировано Пандёнок (06-01-2021 22:56:52)
Отсутствует
Букмарклет для копирования текущего URL в виде BB-кода для сообщения форума. После вызова букмарклета появляется окошко с выделенной ссылкой в виде BB-кода, которую необходимо самостоятельно скопировать. Чтобы закрыть окошко достаточно нажать кнопку Enter.
Использование буфера обмена обошел стороной, так как копирование в него посредством скрипта проблематично из-за ограничений.
javascript:{prompt('URL:',`[url=${document.location}]${document.title}[/url]`);}void(0);
Получим BB-код в виде:
[url=https://forum.mozilla-russia.org/viewtopic.php?pid=780539]Bookmarklets (букмарклеты) - закладки с JavaScript кодом | Форум Mozilla Россия[/url]
Отредактировано zzzephire (02-02-2021 00:41:14)
Отсутствует
Поиск текста по текущему домену, также ищется выделенный текст. Если текст не был выделен, то будет выдан запрос.
В выделенном тексте, а также в запросе, введенном вручную, автоматически убираются лишние пробелы. Например, строка " привет мир " будет в итоге = "привет мир"
javascript:{q=ClearSpace(document.getSelection().toString());if(!q)q=ClearSpace(prompt('Search for:'));if(q){const qe=encodeURIComponent(`site:${document.domain} ${q}`);window.open(`https://duckduckgo.com/?ia=web&q=${qe}`)}}function ClearSpace(src){return src.trim().replace(/\s{2,}/g,' ')}void(0);
javascript:{q=ClearSpace(document.getSelection().toString());if(!q)q=ClearSpace(prompt('Search for:'));if(q){const qe=encodeURIComponent(`site:${document.domain} ${q}`);window.open(`https://www.google.com/search?q=${qe}`)}}function ClearSpace(src){return src.trim().replace(/\s{2,}/g,' ')}void(0);
javascript:{q=ClearSpace(document.getSelection().toString());if(!q)q=ClearSpace(prompt('Search for:'));if(q){const qe=encodeURIComponent(`site:${document.domain} ${q}`);window.open(`https://yandex.ru/search/?text=${qe}`)}}function ClearSpace(src){return src.trim().replace(/\s{2,}/g,' ')}void(0);
Отредактировано zzzephire (02-02-2021 00:14:20)
Отсутствует
Поиск текста по текущему домену
Выделить кодКод:
javascript:(function(){const q=prompt('Query:','what?');window.open(`https://duckduckgo.com/?ia=web&q=site:${document.domain} ${q}`);})()
А можно такое же только с перламутровыми пуговицами через Гугол, а то КимКиДук прямо не находит этой фразы Поиск текста по текущему домену в этой теме Bookmarklets (букмарклеты) - закладки с JavaScript кодом
Отсутствует
А можно такое же только с перламутровыми пуговицами через Гугол
а то КимКиДук прямо не находит этой фразы Поиск текста по текущему домену в этой теме Bookmarklets (букмарклеты) - закладки с JavaScript кодом
Чтобы КимКиДук нашел что-то, это что-то должно быть проидексировано поисковиками, а для этого нужно время
Отсутствует
zzzephire
Если текст выделен, то ищет его.
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%B9%D1%82%D0%B5").replace(/\s\+/g,"+");if(q!=null)window.open("https://yandex.ru/search/?text="+q.replace(/\s+/g,"+")+"+site:"+location.hostname);void(0)
Отсутствует
Поиск выделенного на странице в поисковых системах. Если ничего не выделено, то откроется окно ввода.
Меняя поисковый адрес и имя в окне, можно сделать желаемый поиск.
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Яндекс карты").replace(/\s\+/g,"+");if(q!=null)window.open("https://yandex.ru/maps/?text="+q.replace(/\s+/g,"+"));void(0)
Гугл карты
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Гугл карты").replace(/\s\+/g,"+");if(q!=null)window.open("https://www.google.ru/maps?q="+q.replace(/\s+/g,"+"));void(0)
Ютуб
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Ютуб").replace(/\s\+/g,"+");if(q!=null)window.open("https://www.youtube.com/results?search_query="+q.replace(/\s+/g,"+"));void(0)
Отредактировано oleg.sgh (01-02-2021 18:39:11)
Отсутствует
Поиск выделенного на странице в поисковых системах. Если ничего не выделено, то откроется окно ввода.
Меняя поисковый адрес и имя в окне, можно сделать желаемый поиск.скрытый текстЯндекс картыВыделить кодКод:
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Яндекс карты").replace(/\s\+/g,"+");if(q!=null)window.open("https://yandex.ru/maps/?text="+q.replace(/\s+/g,"+"));void(0)Гугл карты
Выделить кодКод:
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Гугл карты").replace(/\s\+/g,"+");if(q!=null)window.open("https://www.google.ru/maps?q="+q.replace(/\s+/g,"+"));void(0)Ютуб
Выделить кодКод:
javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Ютуб").replace(/\s\+/g,"+");if(q!=null)window.open("https://www.youtube.com/results?search_query="+q.replace(/\s+/g,"+"));void(0)
В название самого букмарклета можно добавить эмоджи (символы).
.
https://i.comss.pics/2021/02/01/2021-02 … b85de1.png
Перестали работать все букмарклеты с перенаправлением на следующую вкладку. Можно что-нибудь с этим сделать?
Отредактировано ionessi (11-02-2021 09:16:26)
Отсутствует
ionessi
Отключить блокировку всплывающих окон. У меня 78-я версия и я ещё не сталкивался с этой проблемой.
.
Тема https://forum.mozilla-russia.org/viewtopic.php?id=76310
Отредактировано oleg.sgh (11-02-2021 13:01:18)
Отсутствует