Предлагаю админам прекрепить эту тему. Потому что это тоже разнавидность скриптов.

Введение:
Bookmarklets (букмарклеты) - закладки с JavaScript кодом. Код выполняется в момент нажатия и может влиять на страницу, как обычный JavaScript. Код нужно вставлять в поле адреса (по сути работает, как тег <a href="javascript:alert('Hello!');">Hello!</a>).
Bookmarklets работают во всех современных браузерах.

Как создать bookmarklet?
1. Создать закладку.
2. Вставить в поле адреса код bookmarklet
Готово!

Стандартный шаблон bookmarklet:

Выделить код

Код:

javascript:void((function () {
    alert('test');
})());

На место 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/');
})());


Значение регулярного выражения можно увидеть тут /^https?://(www.)?developer.mozilla.org/[a-z]+(-[a-z]+)?//i

Пример 2:
Просто редирект (перенаправление) с текущего адреса на результат его проверки.
То есть:
Было - google.ru
Стало - https://www.similarweb.com/website/google.ru

скрытый текст

Выделить код

Код:

javascript: void((function() {
    window.open('https://www.similarweb.com/website/' + document.domain);
})());


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());
})());


Где взять:
1. http://marklets.com/ - сборник букмарклетов, код никто не проверяет, будьте осторожны!
2. Попросить на любом форуме в теме "скрипты" написать для вас, может кто-то поможет
3. Использовать google для поиска

Что за странный вид кода получается при вставке 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 - это не значит, что его кто-то так писал:

Выделить код

Код:

function hello(a){alert("Hello, "+a)}hello("New user");

Его пропустили через оптимизатор.

Обфускация (в качестве шутки, но знать об этом надо, если встретите)
Хотите скрыть ваш код от злобного соперника, который может скопировать и изменить ваш скрипт под себя? Тогда вам на выбор несколько сервисов заменяющих имена функций на последовательность символов, которые после компиляции выполняются как ваш код (по сути это он и есть):
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. :P
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> пустой страницы.

Результат выполнения кода: пустая страница с надписью "hello"

Выделить код

Код:

javascript:(function(){   return 'hello'; })();


2. Ещё варианты обёрток для кода bookmarklet:
Вариант 1. Вызвать void последним: javascript:console.log('hello');void(0);
Вариант 2. Не вызывать return вконце: javascript:(function(){ console.log('hello'); /* в конце нету return */ })();
3. Если вставить в адресную строку код: javascript:(function(){   return 'hello'; })();, то javascript: из него удалится само в целях безопасности. Но если ввести javascript: вручную, то bookmarklet сработает.

Проблемы:
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

Да вроде есть уже тема https://forum.mozilla-russia.org/viewtopic.php?id=36530

Что за странный вид кода получается при вставке Bookmarklet в закладку?
Это base64, а точнее URI Encoding в который кодируется JavaScript, потому что в адресе нельзя пробелы.

А при чём здесь base64?

rbfyec пишет

А при чём здесь base64?

Исправил.

rbfyec пишет

Да вроде есть уже тема https://forum.mozilla-russia.org/viewtopic.php?id=36530

Она не прикреплена и уже старая. Нету шапки темы. Хотя перенести что-то оттуда можно.

Пример 4:
Open site through web.archive.org bookmarklet
Открывает текущий сайт в веб архиве.

скрытый текст

Выделить код

Код:

javascript: void((function() {
    window.open('https://web.archive.org/web/' + document.location.href);
})());

:) [firefox] :)

bar22890 пишет

А кто устанавливал Tampermonkey на браузер Edge? У меня не устанавливаются скрипты, они просто скачиваются в папку, а не устанавливаются. Может их вручную нужно на Edge устанавливать? Не знаю куда написать, написал здесь...

Не много не по теме форум выбрал Здесь вроде только Mozilla ????

del

Есть у меня буркмарклет 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]

Пандёнок
Некоторые работают. Перевод выделенного...на вскидку:

скрытый текст

Выделить код

Код:

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
Странно, сейчас на [firefox] 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=

Соответственно, как минимум не нужен элемент

Выделить код

Код:

&langpair=auto|ru

Обновил букмарклеты для Переводчика Google в FAQ в соответствии с тем, как это работает из расширения To Google Translate.

Букмарклет для копирования текущего 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]

Поиск текста по текущему домену, также ищется выделенный текст. Если текст не был выделен, то будет выдан запрос.
В выделенном тексте, а также в запросе, введенном вручную, автоматически убираются лишние пробелы. Например, строка "    привет     мир     " будет в итоге = "привет мир"

DuckDuckGo

Выделить код

Код:

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);


Google

Выделить код

Код:

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);


Yandex

Выделить код

Код:

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 пишет

Поиск текста по текущему домену

Выделить код

Код:

javascript:(function(){const q=prompt('Query:','what?');window.open(`https://duckduckgo.com/?ia=web&q=site:${document.domain} ${q}`);})()

А можно такое же только с перламутровыми пуговицами через Гугол, а то КимКиДук прямо не находит этой фразы Поиск текста по текущему домену  в этой теме  Bookmarklets (букмарклеты) - закладки с JavaScript кодом :sick:

vending_machine пишет

А можно такое же только с перламутровыми пуговицами через Гугол

Дополнил

vending_machine пишет

а то КимКиДук прямо не находит этой фразы Поиск текста по текущему домену  в этой теме  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)

oleg.sgh
Спасибо. Доработал, обновил пост

Поиск выделенного на странице в поисковых системах. Если ничего не выделено, то откроется окно ввода.
Меняя поисковый адрес и имя в окне, можно сделать желаемый поиск.

скрытый текст
Яндекс карты

Выделить код

Код:

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)


В  название самого букмарклета можно добавить эмоджи (символы).
.
2021-02-01_190313481656365bb85de1.png

oleg.sgh пишет

Поиск выделенного на странице в поисковых системах. Если ничего не выделено, то откроется окно ввода.
Меняя поисковый адрес и имя в окне, можно сделать желаемый поиск.

скрытый текст
Яндекс карты

Выделить код

Код:

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

Перестали работать все букмарклеты с перенаправлением на следующую вкладку. Можно что-нибудь с этим сделать?
FOTO1.jpg

ionessi
Отключить блокировку всплывающих окон. У меня 78-я версия и я ещё не сталкивался с этой проблемой.
.
Тема https://forum.mozilla-russia.org/viewtopic.php?id=76310