Постим сюда только готовые и оформленные кнопки!
                                           
- все вопросы, замечания, обсуждения тут:
https://forum.mozilla-russia.org/viewto … amp;p=last




Как добавить кнопку(помощь для новичка)
gif
http://ipic.su/img/img7/tn/1.1449045699.gif

1 Устанавливаем расширение Custom Buttons
2 Выделяем всё что есть в секции Kод кнопки.
3 Копируем в адресную строку и жмём перейти.
4 Откроется окно диалога добавления кнопки.
5 Добавив кнопку жмём правой кнопкой мыши по свободному месту на панели и выбираем настроить.
6 Перетаскиваем кнопку в нужное место на панели.
этот способ устанавливает кнопку с иконкой.

второй способ:
ПКМ на любой панели и в открывшемся меню нажимаем пункт Добавить новую кнопку, откроется окно редактирования новой кнопки куда копируем коды из секций Код и Инициализация. Потом в окне редактирования кнопки нажимаем Ok, открываем настройку панелей инструментов (Customize) и вытаскиваем новую кнопку на нужную панель. иконку кнопки в этом случае придётся нарисовать самим или выбрать готовую(картинка 16х16 пикселей подойдёт к большинству тем), не забывайте конвертировать её в base64 иначе при перемещении файла иконки изображение с кнопки пропадёт.

Как удалить кнопку(помощь для новичка)

ПКМ на кнопке и нажать пункт Удалить в контекстном меню кнопки или открыть Управление дополнениями и там открыть вкладку Custom Buttons найти нужную кнопку и нажать Удалить.

Шаблон добавления готовой кнопки

Выделить код

Код:

[b][color=#FF4F00]Название кнопки[/color][/b](Firefox + версия), от какого числа кнопка.
Описание что кнопка делает, указать если для работы кнопки нужны расширения и программы.

[b]Клики на кнопке:[/b]
[color=#006600]ЛКМ[/color] => описание,
[color=#006600]СКМ[/color] => описание,
[color=#006600]ПКМ[/color] => описание.
Другие клики(если они есть)

[spoiler=[b]Код кнопки, вкладки код и инициализации:[/b]]

[b]Код кнопки:[/b]
тут код получаемый по ПКМ - Копировать код в буфер

[b]Код:[/b]
тут код из вкладки Код(если он есть)

[b]Инициализация:[/b]
тут код из вкладки Инициализация(если он есть)

[/spoiler]
Автор кнопки(если он известен): [b]указать автора без ссылки на его профиль[/b] + ссылка на страницу кнопки если такая есть.


Важно!
На Firefox51 и выше последняя версия Custom Buttons :: Add-ons for Firefox не работает, но можно сделать это Как отключить проверку цифровых подписей в дополнениях Firefox и установить исправлений https://yadi.sk/d/ospDu9Wp3KKoBA
Или можно удалить или отключить установленый Custom Buttons и установить от сюда подписаную версию Custom Buttons: Custom Buttons • View topic - [Signed fixed extension attached] CB broken on Firefox 48+ или от сюда: custom_buttons-0.0.5.8.9-fixed5-signed.xpi или от сюда: 19-09-2017 13:46:15

ВСЕ КНОПКИ В МОЁМ СООБЩЕНИИ ДЛЯ FIREFOX

-------------------------------------------------------------------------------------------------------------------------
Qick About:Config

Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAlZJREFUeJx9kd9LU2EYxz9n50zc2abbcbl+6XTahRYhlKFC2EVEFIFSUEIgRKt/oMsu6qIrvepGEOyqsItAQoisMJJAyX5oUzeGuinlXE63/DU3z87poiWb077w8ry8PN/P8z7PI5DR4OBgUtO0bfaQwWAQI5HIl7a2tmvAYl6CxWJpVVVV3+8kEgk9EAjoPT09n4CiHHgm6ntVztbGxgbt7e31XV1drwHHbsB/JUkSqqoSjUbxeDyNHR0d/cBBACHTQks8Hu/7ZxgemWBiehOzRUGQRJLrK5AKUneymnQ6jd1up7m5+W44HO6Wsivpus7zF0OUuU9w++YBossJ1hMqir2S+R/V+LxjXLl8BpPJhCAIIkAOwOebIRIv4bQi09s/jUEAo2igqjyFrVhmIVZCMBimttadN0QAup+O4J/bYuBjiNGxCP3vZvEGlnG7itjcTCLLRfT2fcuZTw5gaibOyzcTjE8tcelcBbLJSHJL5fETL7Pz68wtrPF1MrI/QC4Q2E5peH2/0NLQcqEau01m4EOISX+MtbUkBca/G9c0LR/QUKcgigI/F1eRTRL+mRXeDoWQJAPvR+bwBZdoqLPv/4MbVxtxlSxT4TpEfDWFKAhUlhVjsxWSRGTrt5/rrU35gHQ6DYDVaqXzfhPOwhCj3yOUH1U4f7aKU8dLcRhDPLpXj9VqRdf1HU/OGjVNo6bmGJ0PD/NqYJjJz+OgQ2lpIZ0PLmI2m9F1faf/PIDD4UDTNBRFwXPrSA44W6Io7tyFTHQ5nc47WlbmblPWuwAQi8WeAb4/5F0JMc+AnhQAAAAASUVORK5CYII=


Код "ссылка"

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3Eabout%3Aconfig%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAlZJREFUeJx9kd9LU2EYxz9n50zc2abbcbl+6XTahRYhlKFC2EVEFIFSUEIgRKt/oMsu6qIrvepGEOyqsItAQoisMJJAyX5oUzeGuinlXE63/DU3z87poiWb077w8ry8PN/P8z7PI5DR4OBgUtO0bfaQwWAQI5HIl7a2tmvAYl6CxWJpVVVV3+8kEgk9EAjoPT09n4CiHHgm6ntVztbGxgbt7e31XV1drwHHbsB/JUkSqqoSjUbxeDyNHR0d/cBBACHTQks8Hu/7ZxgemWBiehOzRUGQRJLrK5AKUneymnQ6jd1up7m5+W44HO6Wsivpus7zF0OUuU9w++YBossJ1hMqir2S+R/V+LxjXLl8BpPJhCAIIkAOwOebIRIv4bQi09s/jUEAo2igqjyFrVhmIVZCMBimttadN0QAup+O4J/bYuBjiNGxCP3vZvEGlnG7itjcTCLLRfT2fcuZTw5gaibOyzcTjE8tcelcBbLJSHJL5fETL7Pz68wtrPF1MrI/QC4Q2E5peH2/0NLQcqEau01m4EOISX+MtbUkBca/G9c0LR/QUKcgigI/F1eRTRL+mRXeDoWQJAPvR+bwBZdoqLPv/4MbVxtxlSxT4TpEfDWFKAhUlhVjsxWSRGTrt5/rrU35gHQ6DYDVaqXzfhPOwhCj3yOUH1U4f7aKU8dLcRhDPLpXj9VqRdf1HU/OGjVNo6bmGJ0PD/NqYJjJz+OgQ2lpIZ0PLmI2m9F1faf/PIDD4UDTNBRFwXPrSA44W6Io7tyFTHQ5nc47WlbmblPWuwAQi8WeAb4/5F0JMc+AnhQAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aconfig%22%29%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

getBrowser (). selectedTab = getBrowser (). addTab ("about:config")


-------------------------------------------------------------------------------------------------------------------------
Block Site Button
Кнопка для дополнения BlockSite. Данная кнопка выводит запрос на добавление текущей страницы в список блокировки и вносит её туда в случае подтверждения.
Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuMzap5+IlAAACu0lEQVQ4T21Ta0hTYRg+23GbOm+TdFZejrk5L6hked3QJkIr9YdYQRA2QrcpZqbRn6SICEN/RBT9EIJWoNSPLiKUIizDa1OPHqeZIGhBRqKzpsVZ1tPZEYdzO/D+ON/3Ps/zPe9FQOz5egOj9U7h1vl/gj/HAsESTuFfYklMEKxw6x13br76DY/3Yvj/YUkC1e8fR9vOVmGj8xl+FxbBLpRgjZTgl4DEF7EAHeEE7kQRNBeUB8m4KJEaizxsX3/+Gmut9zEWfQQjKjXGj5+BVXcKlpRsDAbIsEKKwATwJHYPElqkoje7e7FyrQW0shA3CAKcgkdY8ovQJ5WBO9whoflX2MgU/deaZqzfbAOjPOYFdBFNGi9hOK8Qm0ISPUEhnC1yx46emCFTLM5HZtjkWT6VGWMDRnO1YA1G9EXsx1tNAfqlUnCFdVmxEPMx3GVdA2yKIi91m+EyxnKKeHC/Kg1WUx2f8zQslLdyV87ZXDyQCwensFBR60EwW92IidxiOGtqMZCYjnHTRfd9T2kJlv22bRCLwalwhB/EfPE5d8JcdRMm83RgG5swnJQJ2ljvQd5TdhKrpHCb4COpAisQYVqh5ZPmq65gOr8EbPN1DMWmYoor4N6OPJGF8Ba4GoBgyGSLQyjFnCQOTFYpZtRlYG/dxgiVgWlDgxfY1eJBWSiWAsjtIk75Jek/SSj8lMdhVqUBq78Aa0w6ZgyNPlv66lA8HFx0yEUuAj0/C1axkv4emwxotZjYlwRrjs6ncleCEguZmWCSKX6k3eM8KlZQA/7x9uWjGjjKT4NJU4NbKozqKjB0ohwvgyPwIU+DjcpKMAVZ3qPsYnrvT1F9gdH0iCIdKwYT0N6O1ZY2/HjwEDCb8bnehI6MGN/LtHuzuoOi9C9CIiydYTK8UeegqyAb9yJFaI0SWNyedwH+A+D1pJXWZfRiAAAAAElFTkSuQmCC


Код "ссылка"

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EBlockSite%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuMzap5+IlAAACu0lEQVQ4T21Ta0hTYRg+23GbOm+TdFZejrk5L6hked3QJkIr9YdYQRA2QrcpZqbRn6SICEN/RBT9EIJWoNSPLiKUIizDa1OPHqeZIGhBRqKzpsVZ1tPZEYdzO/D+ON/3Ps/zPe9FQOz5egOj9U7h1vl/gj/HAsESTuFfYklMEKxw6x13br76DY/3Yvj/YUkC1e8fR9vOVmGj8xl+FxbBLpRgjZTgl4DEF7EAHeEE7kQRNBeUB8m4KJEaizxsX3/+Gmut9zEWfQQjKjXGj5+BVXcKlpRsDAbIsEKKwATwJHYPElqkoje7e7FyrQW0shA3CAKcgkdY8ovQJ5WBO9whoflX2MgU/deaZqzfbAOjPOYFdBFNGi9hOK8Qm0ISPUEhnC1yx46emCFTLM5HZtjkWT6VGWMDRnO1YA1G9EXsx1tNAfqlUnCFdVmxEPMx3GVdA2yKIi91m+EyxnKKeHC/Kg1WUx2f8zQslLdyV87ZXDyQCwensFBR60EwW92IidxiOGtqMZCYjnHTRfd9T2kJlv22bRCLwalwhB/EfPE5d8JcdRMm83RgG5swnJQJ2ljvQd5TdhKrpHCb4COpAisQYVqh5ZPmq65gOr8EbPN1DMWmYoor4N6OPJGF8Ba4GoBgyGSLQyjFnCQOTFYpZtRlYG/dxgiVgWlDgxfY1eJBWSiWAsjtIk75Jek/SSj8lMdhVqUBq78Aa0w6ZgyNPlv66lA8HFx0yEUuAj0/C1axkv4emwxotZjYlwRrjs6ncleCEguZmWCSKX6k3eM8KlZQA/7x9uWjGjjKT4NJU4NbKozqKjB0ohwvgyPwIU+DjcpKMAVZ3qPsYnrvT1F9gdH0iCIdKwYT0N6O1ZY2/HjwEDCb8bnehI6MGN/LtHuzuoOi9C9CIiydYTK8UeegqyAb9yJFaI0SWNyedwH+A+D1pJXWZfRiAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20Cc%20%3D%20Components.%20classes%3B%0Avar%20Ci%20%3D%20Components.%20interfaces%3B%0Avar%20NSISSI%20%3D%20Ci.%20nsISupportsString%3B%0Avar%20newLocation%20%3D%20prompt%20%28%22%u0414%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0430%u0439%u0442%u0430%20%u0432%20%u0447%u0451%u0440%u043D%u044B%u0439%20%u043B%u0438%u0441%u0442%22%2C%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%3B%0Aif%20%28%21newLocation%29%20return%3B%0Avar%20blockedWebsitesArray%3B%0Avar%20BlockSitePrefBranch%20%3D%20Cc%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%20getService%20%28Ci.%20nsIPrefService%29.%20getBranch%28%22BlockSite.%22%29%3B%0Aif%20%28BlockSitePrefBranch.%20prefHasUserValue%20%28%22locations%22%29%29%0A%7B%0A%20%20%20%20blockedWebsitesString%20%3D%20BlockSitePrefBranch.%20getComplexValue%20%28%22locations%22%2C%20NSISSI%29.%20data%3B%0A%20%20%20%20blockedWebsitesArray%20%3D%20blockedWebsitesString.%20split%20%28%22%7C%7C%7C%22%29%3B%0A%7D%0Aelse%0A%7B%0A%20%20%20%20blockedWebsitesArray%20%3D%20new%20Array%28%29%3B%0A%7D%0AblockedWebsitesArray.%20push%20%28newLocation%29%3B%0Avar%20locationNsIString%20%3D%20Cc%20%5B%22@mozilla.org/supports-string%3B1%22%5D.%20createInstance%20%28NSISSI%29%3B%0AlocationNsIString.%20data%20%3D%20blockedWebsitesArray.%20join%20%28%22%7C%7C%7C%22%29%3B%0ABlockSitePrefBranch.%20setComplexValue%20%28%22locations%22%2C%20NSISSI%2C%20locationNsIString%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041A%u043D%u043E%u043F%u043A%u0430%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0441%u0430%u0439%u0442%20%u0432%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20BlockSite%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

var Cc = Components. classes;
var Ci = Components. interfaces;
var NSISSI = Ci. nsISupportsString;
var newLocation = prompt ("Добавление сайта в чёрный лист", getBrowser (). contentDocument. location. href);
if (!newLocation) return;
var blockedWebsitesArray;
var BlockSitePrefBranch = Cc ["@mozilla.org/preferences-service;1"]. getService (Ci. nsIPrefService). getBranch("BlockSite.");
if (BlockSitePrefBranch. prefHasUserValue ("locations"))
{
    blockedWebsitesString = BlockSitePrefBranch. getComplexValue ("locations", NSISSI). data;
    blockedWebsitesArray = blockedWebsitesString. split ("|||");
}
else
{
    blockedWebsitesArray = new Array();
}
blockedWebsitesArray. push (newLocation);
var locationNsIString = Cc ["@mozilla.org/supports-string;1"]. createInstance (NSISSI);
locationNsIString. data = blockedWebsitesArray. join ("|||");
BlockSitePrefBranch. setComplexValue ("locations", NSISSI, locationNsIString);


-------------------------------------------------------------------------------------------------------------------------
DownloadFolder
С помощью данной кнопки открывается папка, куда сохраняются загрузки.
Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAACBjSFJNAACHCAAAjBsAAPxxAACE0wAAeY0AAO8KAAA8/QAAIDcIc+hqAAABu2lDQ1BJQ0MgUHJvZmlsZQAAOMuVks8rRFEUx7/viSkhycxCqZckC6aXsbBisPAji2lSfmQz8+YZamZc973xY8fGkrJgQxEb5Q+QlLEkOyWyHbKSUiKm59x3MaWGnHq9z/l2z733fM8FirQIYwkVQDJl83BPlzY8Mqp5rlCKGnhRj8qIYbHOUGgABeP5Eor4XzSLve5KVk6zr5nc0ol/yzdwcIvfo5zTgYCiEVfHJbcKjkruFTxrM5t4TLAxEYkRM+ImPhjuJt4grohL3hcclXwkeMaIi9pzYj0Vm0wRvxO3xUzLAFRx1qLBOK1RD4iDyeQU7a++EDcKL+Q15x6Ajm3S1/Pa0Bqw3w549/JaQ5iuSNphNq89+Vx/FN+ZNR5ocSWljAPFL47zVAt4DoEcd5y3TcfJ7QJF10Bm2kjzmU+PFDUA/JXLPmUu5+ESCrH0wg0d2MlQP4T9QWBzgfqgpOoGCJE2GIQaCHx90jc5O0s8mGgibTKufw8UFsLoQRc0RJFAGiYYOPSCFf8P25xze+2eYvN8Mj5ha5308kytL2X4m7QWXW/7vV7OWERJJbBapy6ULR+n7x9/rvsAMCGEevwX0AsAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn4iUAAAJKSURBVDhPrZPtS1NhGMbnQMTo5Wuf+mYf+hCtKVYQqymZ86WVklGtgTJFG9KWmyT0ZpiZzDWrOZ3bmqAxQ526OXtZFEhZrG26qWtlIsFDLehfuLrPqYWHxCA6cPFc58D9u1/O/YhE/+kR52rdM7lNI2yPfpTt1o+wHO0j/hR4HX1v8LBdGucM5RWvzZ1VcmOSqVxRlNuiUFijkFvC/Cnw9yM4bHqLfOMYo+CstYDssjYfq3BEUGSbQwEFSk0h/hR4AkjaZ5Hf7OUA2QLAsZt+Vj0Uh9IRQ2l/DIU9c/y51pf0zfOVrQs43u5ntZ4FVDjj/wao7Jhi6sEYlM4YiilTnvkdXwUnaddPz7Wz99ab9Ss41RlgF70JqAeXcNK9CIU9hnKHsJoNWzhjmmYtviRqPe+hIoiSWjnhivOQ9Dw2BKjvPGHNE0nUDXOABI72zvMQrpI8c/jvLdR0P2WdwRU0Ty5DO/oBqqEEzlElVQOL/ExK7fNQ2MKQm2kGxtE/f2PdvWes++UqrgZW0DSxDA21UkM6S5AyCi66/RgHDC5ILzghaej/Qnu0SbAH561BZnmxiuvTKzCMf+SzVz9cwumBBcjvhiC75EZv6DuujcdRbOx5RcGZAkCj7Tl78PozuoKraJ36BP1IEo00Dw2BKvtoQy8PoXWCgg3WWVFm5jYKzkgDOLO1yOgOqU2Br1Ud/pSyzZcquOJNFZJkLWMpiW44Jam3fzuis0REYvGOX2v8+zJxZgsph7SPdJAkIx0SKmM/ve8kbSdtTt/GH8YgtdZVWZNAAAAAAElFTkSuQmCC


Код "ссылка"

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EDownloadFolder%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAACBjSFJNAACHCAAAjBsAAPxxAACE0wAAeY0AAO8KAAA8/QAAIDcIc+hqAAABu2lDQ1BJQ0MgUHJvZmlsZQAAOMuVks8rRFEUx7/viSkhycxCqZckC6aXsbBisPAji2lSfmQz8+YZamZc973xY8fGkrJgQxEb5Q+QlLEkOyWyHbKSUiKm59x3MaWGnHq9z/l2z733fM8FirQIYwkVQDJl83BPlzY8Mqp5rlCKGnhRj8qIYbHOUGgABeP5Eor4XzSLve5KVk6zr5nc0ol/yzdwcIvfo5zTgYCiEVfHJbcKjkruFTxrM5t4TLAxEYkRM+ImPhjuJt4grohL3hcclXwkeMaIi9pzYj0Vm0wRvxO3xUzLAFRx1qLBOK1RD4iDyeQU7a++EDcKL+Q15x6Ajm3S1/Pa0Bqw3w549/JaQ5iuSNphNq89+Vx/FN+ZNR5ocSWljAPFL47zVAt4DoEcd5y3TcfJ7QJF10Bm2kjzmU+PFDUA/JXLPmUu5+ESCrH0wg0d2MlQP4T9QWBzgfqgpOoGCJE2GIQaCHx90jc5O0s8mGgibTKufw8UFsLoQRc0RJFAGiYYOPSCFf8P25xze+2eYvN8Mj5ha5308kytL2X4m7QWXW/7vV7OWERJJbBapy6ULR+n7x9/rvsAMCGEevwX0AsAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn4iUAAAJKSURBVDhPrZPtS1NhGMbnQMTo5Wuf+mYf+hCtKVYQqymZ86WVklGtgTJFG9KWmyT0ZpiZzDWrOZ3bmqAxQ526OXtZFEhZrG26qWtlIsFDLehfuLrPqYWHxCA6cPFc58D9u1/O/YhE/+kR52rdM7lNI2yPfpTt1o+wHO0j/hR4HX1v8LBdGucM5RWvzZ1VcmOSqVxRlNuiUFijkFvC/Cnw9yM4bHqLfOMYo+CstYDssjYfq3BEUGSbQwEFSk0h/hR4AkjaZ5Hf7OUA2QLAsZt+Vj0Uh9IRQ2l/DIU9c/y51pf0zfOVrQs43u5ntZ4FVDjj/wao7Jhi6sEYlM4YiilTnvkdXwUnaddPz7Wz99ab9Ss41RlgF70JqAeXcNK9CIU9hnKHsJoNWzhjmmYtviRqPe+hIoiSWjnhivOQ9Dw2BKjvPGHNE0nUDXOABI72zvMQrpI8c/jvLdR0P2WdwRU0Ty5DO/oBqqEEzlElVQOL/ExK7fNQ2MKQm2kGxtE/f2PdvWes++UqrgZW0DSxDA21UkM6S5AyCi66/RgHDC5ILzghaej/Qnu0SbAH561BZnmxiuvTKzCMf+SzVz9cwumBBcjvhiC75EZv6DuujcdRbOx5RcGZAkCj7Tl78PozuoKraJ36BP1IEo00Dw2BKvtoQy8PoXWCgg3WWVFm5jYKzkgDOLO1yOgOqU2Br1Ud/pSyzZcquOJNFZJkLWMpiW44Jam3fzuis0REYvGOX2v8+zJxZgsph7SPdJAkIx0SKmM/ve8kbSdtTt/GH8YgtdZVWZNAAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Afunction%20startProcess%20%28path%2C%20args%29%0A%7B%0Avar%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20if%20%28args%20%3D%3D%20%22%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20%5Bargs%5D%2C%201%29%29%3B%20%0A%7D%0Afunction%20getPref%20%28pName%29%0A%7B%0A%20%20%20%20var%20prefs%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIPrefBranch%29%3B%0A%20%20%20%20var%20res%20%3D%20%22%22%3B%0A%20%20%20%20try%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20res%20%3D%20prefs.%20getComplexValue%20%28%22browser.download.%22%20+%20pName%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%3B%0A%20%20%20%20return%20res%3B%0A%7D%0Avar%20folderList%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.folderList%22%29%3B%0Avar%20fileLoc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIProperties%29%3B%0Avar%20desk%20%3D%20fileLoc.%20get%20%28%22Desk%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0Avar%20dnldMgr%20%3D%20Components.%20classes%5B%22@mozilla.org/download-manager%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%28Components.interfaces.nsIDownloadManager%29%3B%0Avar%20ddd%20%3D%20dnldMgr.%20defaultDownloadsDirectory%3B%0Avar%20dir%20%3D%20%22%22%3B%0Aif%20%28folderList%20%3D%3D%200%29%20//%20desktop%0A%20%20%20%20dir%20%3D%20desk.%20path%3B%0Aelse%20if%20%28folderList%20%3D%3D%201%29%20//%20default%20downloads%20directory%0A%20%20%20%20dir%20%3D%20ddd.%20path%3B%0Aelse%0A%7B%0A%20%20%20%20dir%20%3D%20getPref%20%28%22dir%22%29%20%7C%7C%20getPref%20%28%22downloadDir%22%29%20%7C%7C%20getPref%20%28%22lastDir%22%29%20%7C%7C%20getPref%20%28%22defaultFolder%22%29%20%7C%7C%20%22%22%3B%0A%20%20%20%20if%20%28%21dir%29%0A%20%20%20%20%20%20%20%20dir%20%3D%20fileLoc.%20get%20%28%22DfltDwnld%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20dir%20%3D%20dir.%20path%3B%0A%7D%0AstartProcess%20%28dir%2C%20%22%22%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

function startProcess (path, args)
{
var file = Components. classes["@mozilla.org/file/local;1"].
               createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
                  createInstance (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    if (args == "")
    {
        file. launch ();
        return;
    }
    process. init (file);
    if (!this. pid)
        this. pid = [];
    this. pid. push (process. run (false, [args], 1));
}
function getPref (pName)
{
    var prefs = Components. classes ["@mozilla.org/preferences-service;1"].
            getService (Components. interfaces. nsIPrefBranch);
    var res = "";
    try
    {
        res = prefs. getComplexValue ("browser.download." + pName, Components. interfaces. nsILocalFile);
    } catch (e) {};
    return res;
}
var folderList = custombuttonsUtils. getPrefs ("browser.download.folderList");
var fileLoc = Components. classes ["@mozilla.org/file/directory_service;1"].
          getService (Components. interfaces. nsIProperties);
var desk = fileLoc. get ("Desk", Components. interfaces. nsILocalFile);
var dnldMgr = Components. classes["@mozilla.org/download-manager;1"].
          getService(Components.interfaces.nsIDownloadManager);
var ddd = dnldMgr. defaultDownloadsDirectory;
var dir = "";
if (folderList == 0) // desktop
    dir = desk. path;
else if (folderList == 1) // default downloads directory
    dir = ddd. path;
else
{
    dir = getPref ("dir") || getPref ("downloadDir") || getPref ("lastDir") || getPref ("defaultFolder") || "";
    if (!dir)
        dir = fileLoc. get ("DfltDwnld", Components. interfaces. nsILocalFile);
    dir = dir. path;
}
startProcess (dir, "");


--------------------------------------------------------------------------------------------------------
Qick Bookmarks
Кнопка для "одноразового" хранения закладок. Для того чтобы сохранить закладку: достаточно перетащить вкладку на кнопку. При этом вкладка закроется а закладка на неё появится в списке кнопки. При открытии закладки она убирается из списка. Открытые страницы проматываются к тому месту, где они были сохранены. Удалить закладку можно щёлкнув на неё правой кнопкой мыши. Для того чтобы открыть все закладки из кнопки нужно нажать на кнопку средней кнопкой мыши.
Иконка
Тёмный вариант

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA7dJREFUOE+tlF1Im3cUxpOgOBE/5khxGPCzZiaamaiJXzFq/DbqmyCa4CdoNEr8SFBnTRs76CZ2sq5IhxM1Y5OpMMQLdzE2GELvdreb7WIvnevawZBmbBc2lvns/P+gtOzN3QKHvLwJP55znnMeueylj8PhsB0fH7/WU61W+O262MjjnxQ4+0t+++E/zx/9HXOhUChk5+fnskgkgouLC1lMTAxiY2NlhYWFP+zs7Pz8Mos/19XViWazGaEPFnD27fs4/XwM4S99eC/gg9/vx8jICKxWK2pra9HY2Ii2tjZ0dnaChKz8B8ZeNDQ0iOXl5fj4phunn7kR3p/Ei4f3sDTvRVdXF0wmE6qqqjiwqakJvb29mJ+fx/DwsDSQ/iQajUbc87sQ/sKD8++W8eJ4BcPODhQVFYH9VllZyVW63W4EAgEEg0H2LA1sbm4W9Xo97k478fzrJUS+eRfhkAstRjUHlpaWcuDQ0BB8Ph9Xt7i4GB3IFBYUFOCOtxtnX91A+NNenLyTic2VG9ja2sL29jb29/dxdHTE6xI6OjoqrZBaEdVqNW6NtCO87cRvt3V4cisPn9wNYmNjg0MPDg5weHjIa3Jykps1NjYmDSSHxaysLPjsJjxdLsfTJQ3+fFCP+3cWsLa2hs3NTezu7vLa29uDx+PhUPqWBpKLYlJSEjxNWvy+bMSzj8x4dt+ClcA0VldXsb6+zttmFQqFmLsYHx+PDiRDRFpeOMtUOP2wCqerpDKoxpBgxcDAAFfEWpydncXc3BwGBwe521EVajQakW2/w3ANfywb+PweTSth1mXxHbRYLGhtbYXdbkd3dzffQ+Y4qZRuOScnR6RTgkOvxJOb1/GLPw2/zqlQUZhztTJsqS+hPT096Ovrw8TEhDQwPT1djIuLg/3tVJzMpuOEYEylUZMJUn+13Oxa6ExBe4v29vboLSuVSjE+Ph4OAjJljxcyeTEgBQAMBsMr53d5z1FbTk5OFhMSEkjhG/h+PA0+yzX86FXCpM28upSKigo+y/r6erS0tKCjowNer1e6ZVInJiYmwpT9Okqup4FmClvRm9C/lY3i4mKUlZWBpRFrl4WDzWbjBk1NTUkDyRCRVEKlUoEteF5eHrRa7SvBUFNTA0olbgyLLpZCdILSQLlcLqakpCAjIwO5ubnIz8+HTqdDSUkJWKxVV1fzpLk0g3IQTqcTMzMz0kCKRGtqamonqRNInUBBIRDMTnNz0NzsBLOTOoHUCaROIHWCy+US+vv7syUD9v94+S8Q4DBE9A8P2gAAAABJRU5ErkJggg==

Светлый вариант

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAABJ0QAASdEBBfyrlQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA6xJREFUOE+llHtMW2UYxl0hzZjxNl22JZt/q/9o3JwUilVijE7HyOyMEJlOZC1YIolpFuKMW+aSaaKyjRDYcGioYYNlJUxIh6w3DmVt6WXtWUsZdEgLpZfTewuFo4/nFDBZNsDML3mSNyfv98vzfO+bk/PIQ5z6dx8reSKPk7jjpxMPcf3eK88+w93oaNs/3ntid+P/hm3kcnJbpS99+fdoM0Kao5mSwq3PMVDOfwGzTSuNnO8P7Th96+I71rHuT6mE5du/4LkETMng00gzjiuHJvVNAuVHgs377gNzntyybdsnx+T8b1q8rx1v8Ww//LWc8/jT29/etXmrqb3UgImfgJl2wN8JzF4GvL8gQ55E58nCM089mpv7L/Dg+wfeGrje52hsanLzmgcg7SdxlFFBixINZ8+4BxS9jr6eq3dvq44DnkYGehGYbmXqc2j/8cBpBrThHnc1oiphOhmHyXoLvOYb+EJBoo4R77wKhE6HVCKKZCwM51ADELgKRNRAWMm4vISu81XS+6KywFQ8ihGzBfmMK1GvHeI+EvkXNMvAGAI+L/40n8PoyGXoNL2Q/fzd735XZ3qw55jsgcBEjILBZEJhqxofX7Oj9IoFuy6oQQwNIRYOwOWwYlgth8/jxvTUBHj5r768983dO7+q2yd6IDAeCcIwYsR7HVoIOvR4sW0Ihb+qoFT+AcrvBRWYRjirGfi8k1ngqutSI64SRik/9EY9Dso1KOkxYD+jD68RUKtvIBL0IRKaRTTkB9vn93lQwMtfC3hkCWi4iTqVDhK1EdXXByEl9BjUqrKRY+Eg4pFQVkH/DAPkrQ78vFokjDIO9Pph/GA14JSsHWc7ZGiwGUEQGsSjFBLMlNlJJ+MRUEE/+AXrANlIw8METvzWhqnJcQRnp3GKqXW6wSyEXZ10MsYojggVAp9fsLpDSY1YyAJJmxlWs3EpXjQEp8OOUSeZBc2lEphLJzGfTiEWDaOIz18bGF55eCqQfSc2IrubrCMWNj+XQmZ+DguZeSTiMRQVFa0FrBaGgzPMFGeX3VHLMZecrcAWFzKgFxeQSibWBn5WefgDm8W4aLeaaNJmoW/brbSDtNFOB0m7nA56zDVKj98Zoycmxum7bjftcrkWi4uLX1l1DysrK/MqKip21tbWviASifeUl5e/sZc5AoGglBVbM99eF4vFeyQSyfNlZWU76uvruev+B81m8waCIHIUCgVXLpfndXV1bWLV3d2d19/fz9VqtTnrQf4BL3nIboFXhZoAAAAASUVORK5CYII=


Код "ссылка" (тёмный вариант)

Код "ссылка" (светлый вариант)

Код кнопки - Инициализация!!!

/*Initialization Code*/
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProfD", Components.interfaces.nsILocalFile)
    .path;
var path = profileDir + "/tabbookmarks.xml";
this. loadInBackground = true;
this. reload = true;

this. handleDragOver = function (event)
{
    var dt = event. dataTransfer;
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    if (!tab)
        return;
    event. preventDefault ();
    event. stopPropagation ();
    return dt. effectAllowed = dt. dropEffect = "link";
}

this. handleDrop = function (event)
{
    var dt = event. dataTransfer;
    var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    this. addMenuitem (tab, url);
};

this. __defineGetter__
(
    "ss",
    function ()
    {
        delete this.ss;
        return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
            .getService(Components.interfaces.nsISessionStore);
    }
);

this. __defineGetter__
(
    "ios",
    function ()
    {
        delete this.ios;
        return this.ios = Components.classes["@mozilla.org/network/io-service;1"]
            .getService(Components.interfaces.nsIIOService);
    }
);

this. addMenuitem = function (tab, url)
{
    var label = tab. label;
    var image = tab. image;

    var menu = this. menu;
    var mi = document. createElement ("menuitem");
    mi. setAttribute ("label", label);
    mi. setAttribute ("tab_data", this.ss.getTabState(tab));
    mi. setAttribute ("tooltiptext", url);
    mi. className = "menuitem-iconic bookmark-item";
    image && mi. setAttribute ("image", "moz-anno:favicon:" + image.replace(/#-moz-resolution=16,16$/, ""));
    menu. appendChild (mi);
    this. type = "menu";
    this. flushMenu (menu);

    var br = gBrowser;
    //if (br. tabContainer. childNodes. length > 1)
        //br. removeTab (tab);
        setTimeout(function() {
            br. removeTab (tab);
        }, 0);
};

this. deleteMenuitem = function (menuitem, dontFlush)
{
    var menu = this. menu;
    menu. removeChild (menuitem);
    this. checkEmpty (menu);
    !dontFlush && this. flushMenu (menu);
};

this. checkEmpty = function (menu)
{
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        return;
    menu. hidePopup ();
    this. type = "";
};

this. flushMenu = function (menu)
{
    menu = menu || this. menu;
    var xs = new XMLSerializer ();
    var xmenu = xs. serializeToString (menu);
    var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
              createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    xmenu = suc. ConvertFromUnicode (xmenu);
    custombuttons. writeFile (path, xmenu);
};

this. getMenu = function (event)
{
    var menu = this. menu;
    if (menu)
        this. removeChild (menu);
    menu = "";
    try
    {
        file = Components. classes ["@mozilla.org/file/local;1"].
               createInstance (Components. interfaces. nsILocalFile);
        file. initWithPath (path);
        var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
                  createInstance (Components. interfaces. nsIFileInputStream);
        fis.init (file, 0x01, 00004, null);
        var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
                  createInstance (Components. interfaces. nsIScriptableInputStream);
        sis. init (fis);
        menu = sis. read (sis. available ());
        sis. close ();
        var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
                  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
        suc. charset = "UTF-8";
        menu = suc. ConvertToUnicode (menu);
        //menu = new XML (menu) || "";
        menu = new DOMParser (). parseFromString (menu, "application/xml"). documentElement;
    }
    catch (e)
    {
        menu = "";
    }
    if (!menu)
    {
        //menu =
        //<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        //       onclick="this. parentNode. openTab (event);"/>
        menu = document.createElement("menupopup");
        menu.setAttribute("onclick", "this. parentNode. openTab (event);");
    }
    //menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
    this. appendChild (menu);
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        this. type = "menu";
    this. orient = "horizontal";
    return menu;
};

this. __defineGetter__
(
    "menu",
    function ()
    {
        return this. getElementsByTagName("menupopup") [0] || null;
    }
);

this. openTab = function (event, mi)
{
    mi = mi || event. target;
    var bg = event ? this. loadInBackground : true;
    var menu = mi. parentNode;
    if (!event || event. button < 2)
    {
        var tab;
        if (event && event. button == 0)
            tab = gBrowser. mCurrentTab;
        else
            tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
        menu. hidePopup ();
        var tabData = mi. getAttribute ("tab_data");
        if(this.reload && !this.ios.offline) {
            //var wn = Components.interfaces.nsIWebNavigation;
            //gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE);
            tab.linkedBrowser.addProgressListener(this.progressListener);
        }
        this.ss.setTabState(tab, tabData);

        // Following is part of Session Bookmarks 0.2.1pre - 2013-04-01
        // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks
        if(
            tab != gBrowser.selectedTab // Should be loaded automatically in this case
            && (
                tab.getAttribute("pending") == "true" // Gecko >= 9.0
                || tab.linkedBrowser.contentDocument.readyState == "uninitialized"
                // || tab.linkedBrowser.__SS_restoreState == 1
            )
        ) {
            tab.linkedBrowser.reload();
            // Show "Connecting…" instead of "New Tab"
            // (disable browser.sessionstore.restore_on_demand to see this bug)
            gBrowser.setTabTitleLoading && gBrowser.setTabTitleLoading(tab);
        }
    }
    else
        event. stopPropagation ();
    //this. deleteMenuitem (mi, !event);
    setTimeout(function() {
        this. deleteMenuitem (mi, !event);
    }.bind(this), 0);
};

this.progressListener = {
    // Part of Session Bookmarks 0.2.1pre - 2013-04-01
    // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks
    // Based on code of Session Manager 0.7.5
    QueryInterface: function(aIID) {
        if(
            aIID.equals(Components.interfaces.nsIWebProgressListener)
            || aIID.equals(Components.interfaces.nsISupportsWeakReference)
            || aIID.equals(Components.interfaces.nsISupports)
        )
            return this;
        throw Components.results.NS_NOINTERFACE;
    },
    onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {
        try {
            if(aRequest.name == "about:blank")
                return;
        }
        catch(e) { // view-source: protocol
            if(e.name != "NS_ERROR_NOT_IMPLEMENTED")
                Components.utils.reportError(e);
        }
        var wpl = Components.interfaces.nsIWebProgressListener;
        if(aFlag & wpl.STATE_START) // Force load to bypass cache
            aRequest.loadFlags |= aRequest.LOAD_BYPASS_CACHE;
        else if(aFlag & wpl.STATE_STOP && aFlag & wpl.STATE_IS_NETWORK)
            aWebProgress.chromeEventHandler.removeProgressListener(this);
    },
    onLocationChange: function(aProgress, aRequest, aURI) {},
    onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) {},
    onStatusChange:   function(aWebProgress, aRequest, aStatus, aMessage) {},
    onSecurityChange: function(aWebProgress, aRequest, aState) {}
};

this. onclick = function (event)
{
    if (event. button != 1 || event. target != this)
        return;
    var menu = this. menu;
    var mis = menu. getElementsByTagName ("menuitem");
    while (mis. length)
        this. openTab (null, mis[0]);
    this. flushMenu (menu);
};
this.oncontextmenu = function(e) {
    if(
        !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey
        && e.target.localName == "menuitem"
    )
        e.preventDefault();
};

this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();

Bookmarks Menu (Firefox)
Немного более функциональная кнопка для доступа к закладкам.
По левому клику мышкой - открывается меню закладок.
По среднему клику мышкой - открытие диалога добавления в закладки.
По правому клику мышкой - открывается слева боковая панель закладок.
Shift+правый клик - меню кнопки.

Bookmarks Menu
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EBookmarks%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20document.%20getElementById%20%28%22bookmarksMenuPopup%22%29.%20cloneNode%20%28true%29%3B%0Afunction%20delId%28node%29%20%7B%0A%20%20%20%20node.removeAttribute%28%22id%22%29%3B%0A%20%20%20%20Array.forEach%28node.childNodes%2C%20delId%29%3B%0A%7D%0AdelId%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0A//this.%20type%20%3D%20%22menu-button%22%3B%0A//this.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20menu.%20id%20%3D%20%22cbBookmarks-%22%20+%20this.%20id%29%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%7B%0A%20%20%20%20%09if%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%0A%20%20%20%20%09%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.%20shiftKey%20%7C%7C%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
    node.removeAttribute("id");
    Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu-button";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbBookmarks-" + this. id);

this. onclick = function (event)
{
    if (event. button == 1)
    {
        if (event. originalTarget. nodeName != "toolbarbutton")
            return;
        PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
    }
    else if (event. button == 2)
    {
        if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
            return;
        toggleSidebar('viewBookmarksSidebar');
        event. preventDefault ();
        event. stopPropagation ();
    }
};

Иконка (взята из расширения Personal Menu)

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgZJREFUeNqMkztoVEEUhv+7m2sgChJsFLXIFpqAUUyRRsS10UIhTToLAzaWWrvg2tnZCCJYBGwUJCgSbSMqoo2yplgbH0ExnSDmzsydl/+cfUjCLmbg3JnDzPnOf87MzWKMaDQapwDUrbVzeZ4f54zvu6ZgSgdNU6XlbGVtrENJcz7g84NmNoLOqNOa5xau4ujEXmxnzCw0Ze4BxFtevIW728i8eP1yHySAarWKGAMqWYba5DRK5xnguxAnQMOyjLFor76XwFR6H2DLUhzvPaohIjCLJ8TRD95xzczOir91VNKnJMDaZJYyPSwDLAFHDu5hYPItvO1Aepk3AbRR0FpToqZ8KyUk2PyJSYxkkQqt+CnJQAVGaWhFiCpQsk5DRWdnahgbzXHh9DR2sNCSAE/Q1iE9UAzMuj2oT+3H+dlD/QOzhw+IPXrRwtM3q/j5YwCgKP4QUJH6lt+28erjV9y8dKZ/6Nq9Z3jX/iYNHViCLgqRr4oNKG2weyyXzaWXLZkn9o3DpSY7N6QENjCVEEKAI2B85yiu3H6MT2vrWFr5gJPHarwBJ/sDAUmB9IBvwCqDJ69b7Djvn5LXqOr+83UJHgowWnVfF+B4lV4eTwrwHfPddRwCcLyiJEH2eVUhuH9BzBpT9ug5dx7RxeadzQAeXCGgDu5v/P713z/xy8MbWW/9V4ABABX3fg9RweLRAAAAAElFTkSuQmCC


Кнопка истории (Firefox)
Кнопка служит для быстрого доступа к истории посещения (не путать с закрытыми вкладами - здесь выводятся посещенные адреса)
Левый клик мышью - выводит список последних 37-и последних адресов
Средний клик мышью - Открывается весь журнал посещений в отдельном окне.
Правый клик мышью - Открывается история посещений слева в боковой панели.
Shift+правый клик - меню кнопки.
[spoiler=Кнопка истории]Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EHistory%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20document.%20getElementById%20%28%22goPopup%22%29.%20cloneNode%20%28true%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20menu.%20childNodes.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20if%20%28menu.%20childNodes%20%5Bi%5D.%20hasAttribute%20%28%22id%22%29%29%0A%20%20%20%20%20%20%20%20menu.%20childNodes%20%5Bi%5D.%20setAttribute%20%28%22hidden%22%2C%20%22true%22%29%3B%0A%7D%0Amenu.%20setAttribute%20%28%22place%22%2C%20%22type%3D0%26sort%3D4%26maxResults%3D37%22%29%3B%0Afunction%20delId%28node%29%20%7B%0A%20%20%20%20node.removeAttribute%28%22id%22%29%3B%0A%20%20%20%20Array.forEach%28node.childNodes%2C%20delId%29%3B%0A%7D%0AdelId%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0A//this.%20type%20%3D%20%22menu%22%3B%0A//this.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20menu.%20id%20%3D%20%22cbHistory-%22%20+%20this.%20id%29%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20node%20%3D%20event.%20originalTarget.%20node%3B%0A%20%20%20%20if%20%28%28event.%20button%20%3C%202%29%20%26%26%20node%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20PlacesUIUtils.%20markPageAsTyped%20%28node.%20uri%29%3B%0A%20%20%20%20%20%20%20%20openUILink%20%28node.%20uri%2C%20event%2C%20false%2C%20true%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%20%20%20%20PlacesCommandHook.showPlacesOrganizer%28%27History%27%29%3B%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.%20shiftKey%20%7C%7C%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20toggleSidebar%20%28%22viewHistorySidebar%22%29%3B%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация
(количество выводимых последних адресов посещений настраивается путем редактирования строки - menu. setAttribute ("place", "type=0&sort=4&maxResults=37");)

Выделить код

Код:

var menu = document. getElementById ("goPopup"). cloneNode (true);
for (var i = 0; i < menu. childNodes. length; i++)
{
    if (menu. childNodes [i]. hasAttribute ("id"))
        menu. childNodes [i]. setAttribute ("hidden", "true");
}
menu. setAttribute ("place", "type=0&sort=4&maxResults=37");
function delId(node) {
    node.removeAttribute("id");
    Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbHistory-" + this. id);

this. onclick = function (event)
{
    var node = event. originalTarget. node;
    if ((event. button < 2) && node)
    {
        PlacesUIUtils. markPageAsTyped (node. uri);
        openUILink (node. uri, event, false, true);
    }
    else if (event. button == 1)
        PlacesCommandHook.showPlacesOrganizer('History');
    else if (event. button == 2)
    {
        if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
            return;
        toggleSidebar ("viewHistorySidebar");
        event. preventDefault ();
        event. stopPropagation ();
    }
};

Иконка (также позаимствована из расширения Personal Menu)

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwlJREFUeNpUk99LFFEUx79zZ2dnRncdd13dpEJtWX/3UKBFPx6Cgt6i8KGXoKKHLIKK8r0XISN705fAf0ACI3qIXiKJskj6QRIlmVhCurq/dGfmzp3p3EkXugwz3Ln3fM85n3OOEgQBtte9B+Oq7wdHa2rMM/FYbb9h6Bl5btvOfKm8MWPb9iNFUV7evjEotm2UbYG798eao1FtqK1194W6eMzinEP4W+J0hzEVpVK5sPR7eYLORoZuXlmuCkjjeLx2vCO755QQApwMrYYE4rqGTYfDFQHWV9fAfCmk4MfPxalKpTIoRdRaK61qmnanpyt73nE5ahIWevftxY4daQwPj+LA8ZNoaW1GKp0GpYFysYSEZXUWikV1+tXMc0Y5H2lr2XVJCB+xZD26e7ugqmqVy9zsO3Duww8UdHR3Ip5sAPcEmhqbLlH0RxgBG7Csupjr+8h2ZuliAI/EBO3l8oUHKe64Hhn6aO9sh1AYTMOMRaPRAUa0+ziFnkglwcizoHwpKogtuCyihf8k0I0Kh2lqxIeiIMiGbvQxQ9czHnnTAgmPPCtB1UCuF8+eQlGVUJQHPgwtAlVGRXtil2HhtSCsVLj+hU9pULiplIXFhQW8fzNL9VLoUcI78lxWT9pEqDnmCUHKDhgCOvD5vwgcV+Di1WvYf/Ajnj15jM2Kg8OHDoQCHCz0yD0+z6g0b2WTrK/k4DkiVJWUZSSViof2nm4cPnYCG8U80vU1yBds5HO5kBc5f8voNVkql8tUT3z/+g2ayqBTnpRuyERWRXo+d/Y0HC7w4dMXMGLguk7Z8/gko7yml34tP5T55VdWMfd5TrYnGhMmMmkLbY11aKw3sVrYxPTrWRRXV8CojGtrOWkzHbbyyOhYs2ma47t37jzFyYugdq1LJom2IPo+XKgorOWgeB5USncl92fKceywlavDJEUikcgQddgF0zAsl3rDD6sTQLJnjMF2nML6em5C+GKEJnL5v2ncHmfaH9V1/Ywe1fsjES0TUifajm3P0Dcc51vXL1fH+a8AAwBdk7sH+MV5ZQAAAABJRU5ErkJggg==

Add-on's (Firefox)
для быстрого доступа к пункту меню Инструменты - дополнения (Расширенный вариант) (работает только в Firefox 3.*)
Левый клик мышью - открывает окно дополнений.
Средний клик мышью - открывает дополнения слева в боковой панели.
Crtl+Средний клик мышью - открывает дополнения в новой вкладке.
Правый клик мышью - отображается меню в виде списка всех дополнений и быстрым доступом к настройкам выбранного дополнения.

Add-on's
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.url2xul%20%3D%20%27chrome%3A//mozapps/content/extensions/extensions.xul%27%3B%0Athis.onClick%20%3D%20function%20%28e%29%20%7B%0A%20%20%20%20switch%20%28e.button%29%20%7B%0A%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenAddonsMgr%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenExtensions%28%27extensions%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.ctrlKey%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20t%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20current%20%3D%20content.document.location.href%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20i%20%3D%20t.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20this.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20while%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28--i%20%3C%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20loadURI%28this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20//%20add%20new%20tab%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%20%3D%3D%20this.url2xul%29%20//%20popup%20loaded%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27this.onClick%28event%29%3B%27%29%3B%0A%0Aconst%20Cb%20%3D%20custombuttons%3B%0Aconst%20EXTENSION%20%3D%20Ci.nsIUpdateItem.TYPE_EXTENSION%3B%0A%0A%0A%0Afunction%20prop%28aElement%2C%20aString%29%20%7B%0A%20%20%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF%20+%20aString%29%3B%0A%20%20%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20%20%20return%20null%3B%0A%7D%0A%0Avar%20cloneCBcontext%20%3D%20%7B%0A%20%20%20%20cloneItems%3A%20function%20%28aNode%2C%20aID%2C%20aSeparate%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menupopup%20%3D%20document.getElementById%28aID%29.cloneNode%28true%29%3B%0A%20%20%20%20%20%20%20%20var%20menuitems%20%3D%20menupopup.childNodes.length%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20menuitems%3B%20i++%29%0A%20%20%20%20%20%20%20%20aNode.appendChild%28menupopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20if%20%28aSeparate%29%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20makeMenu%3A%20function%20%28aNode%29%20%7B%0A%20%20%20%20%20%20%20%20var%20m%20%3D%20aNode.appendChild%28document.createElement%28%22menu%22%29%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%20%20%20%20%20var%20mp%20%3D%20m.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20%20%20%20%20cloneCBcontext.cloneItems%28mp%2C%20%22custombuttons-contextpopup%22%29%3B%0A%20%20%20%20%20%20%20%20aNode.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20m%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aconst%20popupID%20%3D%20%22cbContext-extensionsButton%22%3B%0A%0Avar%20test%20%3D%20document.getElementById%28popupID%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20main%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Avar%20cPopup%20%3D%20main.appendChild%28document.createElement%28%22popup%22%29%29%3B%0AcPopup.id%20%3D%20popupID%3B%0AcPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20document.popupNode.openPrefs%28event%29%3B%22%29%0A%0Avar%20RDFService%20%3D%20Cc%5B%22@mozilla.org/rdf/rdf-service%3B1%22%5D.getService%28Ci.nsIRDFService%29%3B%0Avar%20Container%20%3D%20Cc%5B%22@mozilla.org/rdf/container%3B1%22%5D.getService%28Ci.nsIRDFContainer%29%3B%0Avar%20extensionDS%20%3D%20Cc%5B%22@mozilla.org/extensions/manager%3B1%22%5D.getService%28Ci.nsIExtensionManager%29.datasource%3B%0A%0Avar%20root%3B%0Atry%20%7B%0A%20%20%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aitem%3Aroot%22%29%3B%0A%7D%20catch%28err%29%20%7B%0A%20%20%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aextension%3Aroot%22%29%3B%0A%7D%0A%0AContainer.Init%28extensionDS%2C%20root%29%3B%0A%0Avar%20elements%20%3D%20Container.GetElements%28%29%3B%0Avar%20extensionArray%20%3D%20%5B%5D%3B%0Avar%20i%20%3D%20-1%3B%0Awhile%20%28elements.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20i++%3B%0A%20%20%20%20var%20element%20%3D%20elements.getNext%28%29%3B%0A%20%20%20%20element.QueryInterface%28Components.interfaces.nsIRDFResource%29%3B%0A%20%20%20%20var%20prop_OptionsURL%20%3D%20prop%28element%2C%20%22optionsURL%22%29%3B%0A%20%20%20%20if%20%28prop%28element%2C%20%22type%22%29%20%3D%3D%20EXTENSION%20%26%26%20prop_OptionsURL%29%20%7B%0A%20%20%20%20%20%20%20%20var%20prop_name%20%3D%20prop%28element%2C%20%22name%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B0%5D%20%3D%20prop_name.charAt%280%29.toUpperCase%28%29%20+%20prop_name.substr%281%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B1%5D%20%3D%20prop_OptionsURL%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B2%5D%20%3D%20prop%28element%2C%20%22userDisabled%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B3%5D%20%3D%20prop%28element%2C%20%22version%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B4%5D%20%3D%20prop%28element%2C%20%22iconURL%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21extensionArray%5Bi%5D%5B4%5D%29%20extensionArray%5Bi%5D%5B4%5D%20%3D%20%22chrome%3A//mozapps/skin/xpinstall/xpinstallItemGeneric.png%22%3B%0A%20%20%20%20%7D%0A%7D%0A%0AextensionArray.sort%28%29%3B%0A%0Avar%20features%20%3D%20%22chrome%2C%20dialog%20%3D%200%2C%20resizable%2C%20titlebar%2C%20toolbar%2C%20centerscreen%22%3B%0A%0Avar%20extCommand%20%3D%20%22window.openDialog%28%27ZZZ%27%2C%20%27%27%2C%20%27%22%20+%20features%20+%20%22%27%29%3B%22%3B%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20extensionArray.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20extArray%20%3D%20extensionArray%5Bi%5D%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20extArray%5B0%5D%20+%20%22%20%22%20+%20extArray%5B3%5D%29%3B%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B4%5D%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20extArray%5B4%5D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B1%5D%29%20mItem.setAttribute%28%22oncommand%22%2C%20extCommand.replace%28%22ZZZ%22%2C%20extArray%5B1%5D%29%29%3B%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B2%5D%29%20mItem.setAttribute%28%22disabled%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cPopup.appendChild%28mItem%29%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%7D%0A%0AcloneCBcontext.makeMenu%28cPopup%29%3B%0Athis.setAttribute%28%22context%22%2C%20popupID%29%3B%0A%0Aif%20%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup-subCall%22%29.cloneNode%28true%29%3B%20//%20Cb%20context%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0AsubMenu.appendChild%28cbPopup.lastChild%29%3B%0A%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%0Athis.setAttribute%28%22context%22%2C%20popup.id%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

this.url2xul = 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick = function (e) {
    switch (e.button) {
    case 0:
        try {
            BrowserOpenAddonsMgr();
        }
        catch(e) {
            BrowserOpenExtensions('extensions');
        }
        break;
    case 1:
        {
            if (e.ctrlKey) {
                var t = gBrowser.mTabs;
                var current = content.document.location.href;
                var i = t.length;
                if (current == this.url2xul) gBrowser.removeCurrentTab();
                else while (true) {
                    if (--i < 0) {
                        if (current == 'about:blank') // replace blank tab
                        loadURI(this.url2xul);
                        else // add new tab 
                        gBrowser.selectedTab = gBrowser.addTab(this.url2xul);
                        break;
                    };
                    if (t[i].linkedBrowser.currentURI.spec == this.url2xul) // popup loaded
                    {
                        gBrowser.selectedTab = gBrowser.tabContainer.childNodes[i];
                        break;
                    };
                };
            } else openWebPanel(this.tooltipText, this.url2xul);
        };
        break;
    };
};
this.setAttribute('onclick', 'this.onClick(event);');

const Cb = custombuttons;
const EXTENSION = Ci.nsIUpdateItem.TYPE_EXTENSION;



function prop(aElement, aString) {
    var emRDF = "http://www.mozilla.org/2004/em-rdf#";
    var arc = RDFService.GetResource(emRDF + aString);
    var target = extensionDS.GetTarget(aElement, arc, true);
    if (target instanceof Ci.nsIRDFLiteral) return target.Value;
    if (target instanceof Ci.nsIRDFInt) return target.Value;
    return null;
}

var cloneCBcontext = {
    cloneItems: function (aNode, aID, aSeparate) {
        var menupopup = document.getElementById(aID).cloneNode(true);
        var menuitems = menupopup.childNodes.length;
        for (var i = 0; i < menuitems; i++)
        aNode.appendChild(menupopup.firstChild);
        if (aSeparate) aNode.appendChild(document.createElement("menuseparator"));
    },
    makeMenu: function (aNode) {
        var m = aNode.appendChild(document.createElement("menu"));
        m.setAttribute("label", "Custom Button");
        m.setAttribute("oncommand", "event.stopPropagation()");
        var mp = m.appendChild(document.createElement("menupopup"));
        cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
        aNode.insertBefore(document.createElement("menuseparator"), m);
    }
}

const popupID = "cbContext-extensionsButton";

var test = document.getElementById(popupID);
if (test) test.parentNode.removeChild(test);

var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("popup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand", "event.stopPropagation(); document.popupNode.openPrefs(event);")

var RDFService = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
var Container = Cc["@mozilla.org/rdf/container;1"].getService(Ci.nsIRDFContainer);
var extensionDS = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).datasource;

var root;
try {
    root = RDFService.GetResource("urn:mozilla:item:root");
} catch(err) {
    root = RDFService.GetResource("urn:mozilla:extension:root");
}

Container.Init(extensionDS, root);

var elements = Container.GetElements();
var extensionArray = [];
var i = -1;
while (elements.hasMoreElements()) {
    i++;
    var element = elements.getNext();
    element.QueryInterface(Components.interfaces.nsIRDFResource);
    var prop_OptionsURL = prop(element, "optionsURL");
    if (prop(element, "type") == EXTENSION && prop_OptionsURL) {
        var prop_name = prop(element, "name");
        extensionArray[i] = [];
        extensionArray[i][0] = prop_name.charAt(0).toUpperCase() + prop_name.substr(1);
        extensionArray[i][1] = prop_OptionsURL;
        extensionArray[i][2] = prop(element, "userDisabled");
        extensionArray[i][3] = prop(element, "version");
        extensionArray[i][4] = prop(element, "iconURL");
        if (!extensionArray[i][4]) extensionArray[i][4] = "chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png";
    }
}

extensionArray.sort();

var features = "chrome, dialog = 0, resizable, titlebar, toolbar, centerscreen";

var extCommand = "window.openDialog('ZZZ', '', '" + features + "');";

for (var i = 0; i < extensionArray.length; i++) {
    var extArray = extensionArray[i];
    try {
        var mItem = document.createElement("menuitem");
        mItem.setAttribute("label", extArray[0] + " " + extArray[3]);
        if (extArray[4]) {
            mItem.setAttribute("class", "menuitem-iconic bookmark-item");
            mItem.setAttribute("image", extArray[4]);
        }
        if (extArray[1]) mItem.setAttribute("oncommand", extCommand.replace("ZZZ", extArray[1]));
        if (extArray[2]) mItem.setAttribute("disabled", true);
        cPopup.appendChild(mItem);
    } catch(e) {}
}

cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);

if (typeof Local_Install != "object") return;

var test = document.getElementById("cbContext-extensions");
if (test) test.parentNode.removeChild(test);

var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context
var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.appendChild(cbPopup.lastChild);

var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
extensionsPopup.parentNode.appendChild(popup);

this.setAttribute("context", popup.id);

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAFfKj/FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURf///wIBAQAAAAECB21yoAAAAAAAAG1yoFVloQAAAwAAAAEBAwAAAFJkoWV1rQAAAAAAAEthonN4pHJ5pmtzoxUMBwAAAEUmEyQVDF9vphAVIZObvxAUIJWewZxaMKWv0AhVAHF+sBcdKDwjE5NXNI2Tt2F1rl52sCQuSFp1tmZ5sYaMspdaOzghE5edwAxdAYKazi84T1BnmWF8t7S50omdzG6CsJpkPm+JwHSNwniOwH+YzHiQw5pkT5FYL49tcHaUyY6KoLO30HtIKKq63n2Yyrm81AhVAApYABdrARtxAR10AUiWMFifQbe60YGe0GB4oJer0qZfJ5Wz3qi52pCz5b/Dz9LW54ir3ZljPrWckcnQ45Z7mqFlMIyp0pzD9L7Z+d/k9wAAABBlARt5Ax58Bh5/AyKGBCOIBCiBDyiSBC2VCi6cBTKKGDOlBjSoBjqrDT6oFUCrFkGOKkGWJkKuF0yF00yyI06WN1e3MF2vQF6hSGCkSmOV12O8P2SpTWWX12/BT3S3WnW6W3bBWXiza3mo6XzAYn3HX3+eyYWy54nGcou26YvNcIy26JG57JKy2ZfPiZnTgp1+lJ7G9p7MmqO/56PWjqaNnKqbuqrS+7LW2bLa/7Te/7Xe/7aGcbbZ/bdLJLjX+Lje/7rX97rb6LrewLrf/7zb/7zg/72Ve73a0L58PsA+BcDf/MLe58O6vMPi/8WLU8WSaMXp0Mbk/8e9v8fe+Mji88jk/8nl/8qLVcqmSsrl/8vY5Mvl/8yDQcyZZ8yolMzn/83p/86CN87q/8+bONFfKNOIa9TRz9WHOtaZWNePSNzS0t3u9d30/9/y/+L08+PDs+Po8Obz/+fQyefv/em/rer1/+zArOzaifLo6fP2+vX2+fbXMvbyxvf///jrovv///z///36+P/0mP//8v///+np6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///y0MWcAAAAABdFJOUwBA5thmAAABFUlEQVR42mJgYGBgqAQAAAD//2JgYGBufgcAAAD//2Jk8LZ4xcSgtIYJAAAA//9iYGBgYGBkqPl3jqmC9fcNRobSXeYAAAAA//9iZmBgYKgwP87AyMBQI/jlx5+PjAzF7P///DrwkZnhODfb5pv2LAAxoIBuBgYGRgaGahbWD1+nMzEwiHP+YmZnYPFi/vbt55epDEz//3/7+fM/AwPT9i0/v0xgyGdgYWB494/h5y8GAJljbIMwDEXBw3akUEQUtJkoLUNkgRRILBKE2IwtUID4+X+liSteedKdXqyJ4dK9AEIF8RT3c8Ctl7SaXO9HAkgfrSbPuTgHrudiZnLXb67K1HjOFoJbeSaA5ejfO4xtMv62DQBrzlvofJ5duQAAAABJRU5ErkJggg==



Поиск по текущему сайту (Firefox)
Позволяет произвести поиск по текущему сайту в Google или Яндексе.
Ctrl+Левый клик мышью - поиск произвольной фразы в Google на текущем сайте.
Ctrl+Правый клик мышью - поиск произвольной фразы в Яндексе на текущем сайте.
Если на странице есть выделенный текст, то:
- Левый клик мышью - поиск выделенного фрагмента по текущему сайту в Google, результаты в фоновой вкладке.
- Правый клик мышью - поиск выделенного фрагмента по текущему сайту в Яндексе, результаты в фоновой вкладке.
При отсутствии выделения - правый клик мышью вызывает меню кнопки.
Поиск по текущему сайту
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3Ethis.%20searchGoogle%20%3D%20function%20%28text%2C%20url%2C%20encode%29%0D%0A%7B%0D%0A%20%20%20%20if%20%28encode%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com/search%3Fas_q%3D%22%20+%20text%20+%20%22%26amp%3Bas_sitesearch%3D%22%20+%20url%3B%0D%0A%20%20%20%20getBrowser%20%28%29.%20addTab%20%28searchUrl%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20searchYandex%20%3D%20function%20%28text%2C%20url%2C%20encode%29%0D%0A%7B%0D%0A%20%20%20%20if%20%28encode%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//yandex.ru/yandsearch%3Frpt%3Drad%26amp%3Btext%3D%22%20+%20text%20+%20%22%26amp%3Bserverurl%3D%22%20+%20url%3B%0D%0A%20%20%20%20getBrowser%20%28%29.%20addTab%20%28searchUrl%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20showSearchDialog%20%3D%20function%20%28callback%2C%20url%29%0D%0A%7B%0D%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20false%3B%0D%0A%20%20%20%20var%20dialog%20%3D%20%26lt%3B%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22dlg02%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Custom%20Buttons%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onload%3D%22windowController.init%28%29%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ondialogaccept%3D%22return%20windowController.accept%28%29%3B%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%21%5BCDATA%5B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20windowController%20%3D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20init%3A%20function%20%28%29%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20stb%20%3D%20document.%20getElementById%20%28%22sitetb%22%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stb.%20value%20%3D%20window.%20arguments%20%5B1%5D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20sizeToContent%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accept%3A%20function%20%28%29%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20document.%20getElementById%20%28%22texttb%22%29.%20value%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20document.%20getElementById%20%28%22sitetb%22%29.%20value%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20arguments%20%5B0%5D%20%28text%2C%20url%2C%20true%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%5D%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/script%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bvbox%20flex%3D%221%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bgrid%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumns%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumn/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumn%20flex%3D%221%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/columns%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brows%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brow%20align%3D%22center%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Blabel%20value%3D%22%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Btextbox%20id%3D%22texttb%22%20flex%3D%221%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/row%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brow%20align%3D%22center%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Blabel%20value%3D%22%u0421%u0430%u0439%u0442%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Btextbox%20id%3D%22sitetb%22%20flex%3D%221%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/row%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/rows%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/grid%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B/dialog%26gt%3B%0D%0A%20%20%20%20%26lt%3B/%26gt%3B%3B%0D%0A%20%20%20%20window.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cminimizable%2Cresizable%3Dyes%2Ccenterscreen%2Cdialog%3Dyes%22%2C%20callback%2C%20url%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20onclick%20%3D%20function%20%28event%29%0D%0A%7B%0D%0A%20%20%20%20var%20focusedWindow%20%3D%20document.%20commandDispatcher.%20focusedWindow%3B%0D%0A%20%20%20%20var%20text%20%3D%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0D%0A%20%20%20%20var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0D%0A%20%20%20%20try%20%7B%20var%20url%20%3D%20doc.%20location.%20hostname%3B%20%7D%0D%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20url%20%3D%20%22%22%3B%20%7D%0D%0A%20%20%20%20if%20%28event.%20ctrlKey%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20showSearchDialog%20%28this.%20searchGoogle%2C%20url%29%3B%0D%0A%20%20%20%20%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0D%0A%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20showSearchDialog%20%28this.%20searchYandex%2C%20url%29%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20return%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20if%20%28%21text%20%7C%7C%20event.%20shiftKey%29%0D%0A%20%20%20%20%20%20%20%20return%3B%0D%0A%20%20%20%20var%20charset%20%3D%20doc.%20characterSet%3B%0D%0A%20%20%20%20try%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20charset%20%3D%20PlacesUtils.%20history.%20getCharsetForURI%20%28makeURI%20%28doc.%20location.%20href%29%29%3B%0D%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0D%0A%20%20%20%20if%20%28charset%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28charset%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20escape%20%28convertFromUnicode%20%28charset%2C%20url%29%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20else%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20encodeURIComponent%20%28text%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchURL%20%3D%20%22%22%3B%0D%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%202%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20this.%20searchYandex%20%28text%2C%20url%2C%20false%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%200%29%0D%0A%20%20%20%20%20%20%20%20this.%20searchGoogle%20%28text%2C%20url%2C%20false%29%3B%0D%0A%7D%3B%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

this. searchGoogle = function (text, url, encode)
{
    if (encode)
    {
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
    }
    var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
    getBrowser (). addTab (searchUrl);
};

this. searchYandex = function (text, url, encode)
{
    if (encode)
    {
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
    }
    var searchUrl = "http://yandex.ru/yandsearch?rpt=rad&text=" + text + "&serverurl=" + url;
    getBrowser (). addTab (searchUrl);
};

this. showSearchDialog = function (callback, url)
{
    XML. ignoreProcessingInstructions = false;
    var dialog = <>
        <?xml-stylesheet href="chrome://global/skin/"?>
        <?xml-stylesheet href="resource://gre/res/html.css"?>
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
                id="dlg02"
                title="Custom Buttons"
                onload="windowController.init()"
                ondialogaccept="return windowController.accept();">
            <script type="application/x-javascript">
                <![CDATA[
                    var windowController =
                    {
                        init: function ()
                        {
                            var stb = document. getElementById ("sitetb");
                            stb. value = window. arguments [1];
                            window. sizeToContent ();
                        },
                        
                        accept: function ()
                        {
                            var text = document. getElementById ("texttb"). value;
                            var url = document. getElementById ("sitetb"). value;
                            window. arguments [0] (text, url, true);
                        }
                    };
                ]]>
            </script>
            <vbox flex="1">
                <grid>
                    <columns>
                        <column/>
                        <column flex="1"/>
                    </columns>
                    <rows>
                        <row align="center">
                            <label value="Искать текст"/>
                            <textbox id="texttb" flex="1"/>
                        </row>
                        <row align="center">
                            <label value="Сайт"/>
                            <textbox id="sitetb" flex="1"/>
                        </row>
                    </rows>
                </grid>
            </vbox>
        </dialog>
    </>;
    window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog. toXMLString (), "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback, url);
};

this. onclick = function (event)
{
    var focusedWindow = document. commandDispatcher. focusedWindow;
    var text = focusedWindow. getSelection (). toString ();
    var doc = getBrowser (). contentDocument;
    try { var url = doc. location. hostname; }
      catch(e) { var url = ""; }
    if (event. ctrlKey)
    {
        if (event. button == 0)
            this. showSearchDialog (this. searchGoogle, url);
        else if (event. button == 2)
        {
            event. preventDefault ();
            event. stopPropagation ();
            this. showSearchDialog (this. searchYandex, url);
        }
        return;
    }
    if (!text || event. shiftKey)
        return;
    var charset = doc. characterSet;
    try
    {
        charset = PlacesUtils. history. getCharsetForURI (makeURI (doc. location. href));
    } catch (e) {}
    if (charset)
    {
        text = escape (convertFromUnicode (charset, text));
        url = escape (convertFromUnicode (charset, url));
    }
    else
    {
        text = encodeURIComponent (text);
        url = encodeURIComponent (url);
    }
    var searchURL = "";
    if (event. button == 2)
    {
        event. preventDefault ();
        event. stopPropagation ();
        this. searchYandex (text, url, false);
    }
    else if (event. button == 0)
        this. searchGoogle (text, url, false);
};

Иконка

Выделить код

Код:

data:image/png;base64,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

Преобразование из латиницы в кириллицу и наоборот
Кнопка служит для преобразования набранного текста в другой раскладке клавиатуры. Например, набранное "ащкгьюьщяшддф-кгыышфющкп" преобразуется "forum.mozilla-russia.org".
Для преобразования необходимо поставить курсор в нужное поле ввода. При наличии выделения - преобразовывается только выделенная часть.

Преобразование из латиницы в кириллицу
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EURLCorrector%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.noSelUseFullText%20%3D%20true%3B%0Athis.convTableForward%20%3D%20%7B%0A%20%20%20%20%22%5C%22%22%3A%20%22@%22%2C%0A%20%20%20%20%22%3A%22%3A%20%22%5E%22%2C%0A%20%20%20%20%22%3B%22%3A%20%22%24%22%2C%0A%20%20%20%20%22%3F%22%3A%20%22%26%22%2C%0A%20%20%20%20%22%2C%22%3A%20%22%3F%22%2C%0A%20%20%20%20%22/%22%3A%20%22%7C%22%2C%0A%20%20%20%20%22.%22%3A%20%22/%22%2C%0A%20%20%20%20%22%u044D%22%3A%20%22%27%22%2C%0A%20%20%20%20%22%u0431%22%3A%20%22%2C%22%2C%0A%20%20%20%20%22%u044E%22%3A%20%22.%22%2C%0A%20%20%20%20%22%u0416%22%3A%20%22%3A%22%2C%0A%20%20%20%20%22%u0436%22%3A%20%22%3B%22%2C%0A%20%20%20%20%22%u0411%22%3A%20%22%3C%22%2C%0A%20%20%20%20%22%u042E%22%3A%20%22%3E%22%2C%0A%20%20%20%20%22%u042D%22%3A%20%22%5C%22%22%2C%0A%20%20%20%20%22%u0445%22%3A%20%22%5B%22%2C%0A%20%20%20%20%22%u044A%22%3A%20%22%5D%22%2C%0A%20%20%20%20%22%u0451%22%3A%20%22%60%22%2C%0A%20%20%20%20%22%u0425%22%3A%20%22%7B%22%2C%0A%20%20%20%20%22%u042A%22%3A%20%22%7D%22%2C%0A%20%20%20%20%22%u0401%22%3A%20%22%7E%22%2C%0A%20%20%20%20%22%u2116%22%3A%20%22%23%22%2C%0A%20%20%20%20%22%u0424%22%3A%20%22A%22%2C%0A%20%20%20%20%22%u0444%22%3A%20%22a%22%2C%0A%20%20%20%20%22%u0418%22%3A%20%22B%22%2C%0A%20%20%20%20%22%u0438%22%3A%20%22b%22%2C%0A%20%20%20%20%22%u0421%22%3A%20%22C%22%2C%0A%20%20%20%20%22%u0441%22%3A%20%22c%22%2C%0A%20%20%20%20%22%u0412%22%3A%20%22D%22%2C%0A%20%20%20%20%22%u0432%22%3A%20%22d%22%2C%0A%20%20%20%20%22%u0423%22%3A%20%22E%22%2C%0A%20%20%20%20%22%u0443%22%3A%20%22e%22%2C%0A%20%20%20%20%22%u0410%22%3A%20%22F%22%2C%0A%20%20%20%20%22%u0430%22%3A%20%22f%22%2C%0A%20%20%20%20%22%u041F%22%3A%20%22G%22%2C%0A%20%20%20%20%22%u043F%22%3A%20%22g%22%2C%0A%20%20%20%20%22%u0420%22%3A%20%22H%22%2C%0A%20%20%20%20%22%u0440%22%3A%20%22h%22%2C%0A%20%20%20%20%22%u0428%22%3A%20%22I%22%2C%0A%20%20%20%20%22%u0448%22%3A%20%22i%22%2C%0A%20%20%20%20%22%u041E%22%3A%20%22J%22%2C%0A%20%20%20%20%22%u043E%22%3A%20%22j%22%2C%0A%20%20%20%20%22%u041B%22%3A%20%22K%22%2C%0A%20%20%20%20%22%u043B%22%3A%20%22k%22%2C%0A%20%20%20%20%22%u0414%22%3A%20%22L%22%2C%0A%20%20%20%20%22%u0434%22%3A%20%22l%22%2C%0A%20%20%20%20%22%u042C%22%3A%20%22M%22%2C%0A%20%20%20%20%22%u044C%22%3A%20%22m%22%2C%0A%20%20%20%20%22%u0422%22%3A%20%22N%22%2C%0A%20%20%20%20%22%u0442%22%3A%20%22n%22%2C%0A%20%20%20%20%22%u0429%22%3A%20%22O%22%2C%0A%20%20%20%20%22%u0449%22%3A%20%22o%22%2C%0A%20%20%20%20%22%u0417%22%3A%20%22P%22%2C%0A%20%20%20%20%22%u0437%22%3A%20%22p%22%2C%0A%20%20%20%20%22%u0419%22%3A%20%22Q%22%2C%0A%20%20%20%20%22%u0439%22%3A%20%22q%22%2C%0A%20%20%20%20%22%u041A%22%3A%20%22R%22%2C%0A%20%20%20%20%22%u043A%22%3A%20%22r%22%2C%0A%20%20%20%20%22%u042B%22%3A%20%22S%22%2C%0A%20%20%20%20%22%u044B%22%3A%20%22s%22%2C%0A%20%20%20%20%22%u0415%22%3A%20%22T%22%2C%0A%20%20%20%20%22%u0435%22%3A%20%22t%22%2C%0A%20%20%20%20%22%u0413%22%3A%20%22U%22%2C%0A%20%20%20%20%22%u0433%22%3A%20%22u%22%2C%0A%20%20%20%20%22%u041C%22%3A%20%22V%22%2C%0A%20%20%20%20%22%u043C%22%3A%20%22v%22%2C%0A%20%20%20%20%22%u0426%22%3A%20%22W%22%2C%0A%20%20%20%20%22%u0446%22%3A%20%22w%22%2C%0A%20%20%20%20%22%u0427%22%3A%20%22X%22%2C%0A%20%20%20%20%22%u0447%22%3A%20%22x%22%2C%0A%20%20%20%20%22%u041D%22%3A%20%22Y%22%2C%0A%20%20%20%20%22%u043D%22%3A%20%22y%22%2C%0A%20%20%20%20%22%u042F%22%3A%20%22Z%22%2C%0A%20%20%20%20%22%u044F%22%3A%20%22z%22%2C%0A%20%20%20%20__proto__%3A%20null%0A%7D%3B%0A%0Athis.convTableBackward%20%3D%20%7B%20__proto__%3A%20null%20%7D%3B%0Afor%28var%20c%20in%20this.convTableForward%29%0A%20%20%20%20this.convTableBackward%5Bthis.convTableForward%5Bc%5D%5D%20%3D%20c%3B%0A%0Athis.insertText%20%3D%20function%28ta%2C%20text%2C%20noFocus%29%20%7B%0A%20%20%20%20var%20editor%20%3D%20ta.QueryInterface%28Components.interfaces.nsIDOMNSEditableElement%29%0A%20%20%20%20%20%20%20%20.editor%0A%20%20%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsIPlaintextEditor%29%3B%0A%20%20%20%20if%28editor.flags%20%26%20editor.eEditorReadonlyMask%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20var%20sTop%20%3D%20ta.scrollTop%3B%0A%20%20%20%20var%20sHeight%20%3D%20ta.scrollHeight%3B%0A%20%20%20%20var%20sLeft%20%3D%20ta.scrollLeft%3B%0A%20%20%20%20//%20var%20sWidth%20%3D%20ta.scrollWidth%3B%0A%0A%20%20%20%20if%28noFocus%29%20%7B%0A%20%20%20%20%20%20%20%20var%20val%20%3D%20ta.value%3B%0A%20%20%20%20%20%20%20%20var%20ss%20%3D%20ta.selectionStart%3B%0A%20%20%20%20%20%20%20%20ta.value%20%3D%20val.substring%280%2C%20ss%29%20+%20text%20+%20val.substring%28ta.selectionEnd%29%3B%0A%20%20%20%20%20%20%20%20var%20se%20%3D%20ss%20+%20text.length%3B%0A%20%20%20%20%20%20%20%20ta.selectionStart%20%3D%20se%3B%0A%20%20%20%20%20%20%20%20ta.selectionEnd%20%3D%20se%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20if%28text%29%0A%20%20%20%20%20%20%20%20%20%20%20%20editor.insertText%28text%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20editor.deleteSelection%280%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20ta.scrollTop%20%3D%20sTop%20+%20%28ta.scrollHeight%20-%20sHeight%29%3B%0A%20%20%20%20ta.scrollLeft%20%3D%20sLeft%3B%20//%20+%20%28ta.scrollWidth%20-%20sWidth%29%3B%0A%7D%3B%0Athis.inPrimaryLayout%20%3D%20function%28s%29%20%7B%0A%20%20%20%20var%20c%3B%0A%20%20%20%20for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20c%20%3D%20s.charAt%28i%29%3B%0A%20%20%20%20%20%20%20%20if%28c%20in%20this.convTableForward%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20if%28c%20in%20this.convTableBackward%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%7D%3B%0Athis.switchKeybLayout%20%3D%20function%28convTable%2C%20s%29%20%7B%0A%20%20%20%20var%20r%20%3D%20%22%22%2C%20c%3B%0A%20%20%20%20for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20c%20%3D%20s.charAt%28i%29%3B%0A%20%20%20%20%20%20%20%20r%20+%3D%20c%20in%20convTable%20%3F%20convTable%5Bc%5D%20%3A%20c%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20r%3B%0A%7D%3B%0Athis.switchSelKeybLayout%20%3D%20function%28s%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20ta%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20var%20val%20%3D%20ta.value%3B%0A%20%20%20%20%20%20%20%20var%20sel%20%3D%20val.substring%28ta.selectionStart%2C%20ta.selectionEnd%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28this.noSelUseFullText%20%26%26%20%21sel%29%20%7B%0A%20%20%20%20%20%20%20%20ta.selectionStart%20%3D%200%3B%0A%20%20%20%20%20%20%20%20ta.selectionEnd%20%3D%20val.length%3B%0A%20%20%20%20%20%20%20%20sel%20%3D%20val%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28%21sel%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20sel%20%3D%20this.switchKeybLayout%28%0A%20%20%20%20%20%20%20%20this.inPrimaryLayout%28sel%29%20%3F%20this.convTableForward%20%3A%20this.convTableBackward%2C%0A%20%20%20%20%20%20%20%20sel%0A%20%20%20%20%29%3B%0A%20%20%20%20this.insertText%28ta%2C%20sel%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.switchSelKeybLayout%28%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5BAlt+z%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Код

Выделить код

Код:

this.switchSelKeybLayout();

Инициализация

Выделить код

Код:

this.noSelUseFullText = true;
this.convTableForward = {
    "\"": "@",
    ":": "^",
    ";": "$",
    "?": "&",
    ",": "?",
    "/": "|",
    ".": "/",
    "э": "'",
    "б": ",",
    "ю": ".",
    "Ж": ":",
    "ж": ";",
    "Б": "<",
    "Ю": ">",
    "Э": "\"",
    "х": "[",
    "ъ": "]",
    "ё": "`",
    "Х": "{",
    "Ъ": "}",
    "Ё": "~",
    "№": "#",
    "Ф": "A",
    "ф": "a",
    "И": "B",
    "и": "b",
    "С": "C",
    "с": "c",
    "В": "D",
    "в": "d",
    "У": "E",
    "у": "e",
    "А": "F",
    "а": "f",
    "П": "G",
    "п": "g",
    "Р": "H",
    "р": "h",
    "Ш": "I",
    "ш": "i",
    "О": "J",
    "о": "j",
    "Л": "K",
    "л": "k",
    "Д": "L",
    "д": "l",
    "Ь": "M",
    "ь": "m",
    "Т": "N",
    "т": "n",
    "Щ": "O",
    "щ": "o",
    "З": "P",
    "з": "p",
    "Й": "Q",
    "й": "q",
    "К": "R",
    "к": "r",
    "Ы": "S",
    "ы": "s",
    "Е": "T",
    "е": "t",
    "Г": "U",
    "г": "u",
    "М": "V",
    "м": "v",
    "Ц": "W",
    "ц": "w",
    "Ч": "X",
    "ч": "x",
    "Н": "Y",
    "н": "y",
    "Я": "Z",
    "я": "z",
    __proto__: null
};

this.convTableBackward = { __proto__: null };
for(var c in this.convTableForward)
    this.convTableBackward[this.convTableForward[c]] = c;

this.insertText = function(ta, text, noFocus) {
    var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement)
        .editor
        .QueryInterface(Components.interfaces.nsIPlaintextEditor);
    if(editor.flags & editor.eEditorReadonlyMask)
        return;

    var sTop = ta.scrollTop;
    var sHeight = ta.scrollHeight;
    var sLeft = ta.scrollLeft;
    // var sWidth = ta.scrollWidth;

    if(noFocus) {
        var val = ta.value;
        var ss = ta.selectionStart;
        ta.value = val.substring(0, ss) + text + val.substring(ta.selectionEnd);
        var se = ss + text.length;
        ta.selectionStart = se;
        ta.selectionEnd = se;
    }
    else {

        if(text)
            editor.insertText(text);
        else
            editor.deleteSelection(0);
    }

    ta.scrollTop = sTop + (ta.scrollHeight - sHeight);
    ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth);
};
this.inPrimaryLayout = function(s) {
    var c;
    for(var i = 0, l = s.length; i < l; i++) {
        c = s.charAt(i);
        if(c in this.convTableForward)
            return true;
        if(c in this.convTableBackward)
            return false;
    }
    return false;
};
this.switchKeybLayout = function(convTable, s) {
    var r = "", c;
    for(var i = 0, l = s.length; i < l; i++) {
        c = s.charAt(i);
        r += c in convTable ? convTable[c] : c;
    }
    return r;
};
this.switchSelKeybLayout = function(s) {
    try {
        var ta = document.commandDispatcher.focusedElement;
        var val = ta.value;
        var sel = val.substring(ta.selectionStart, ta.selectionEnd);
    }
    catch(e) {
        return;
    }
    if(this.noSelUseFullText && !sel) {
        ta.selectionStart = 0;
        ta.selectionEnd = val.length;
        sel = val;
    }
    if(!sel)
        return;

    sel = this.switchKeybLayout(
        this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward,
        sel
    );
    this.insertText(ta, sel);
};

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADaSURBVHja7FXRDYIwEL1nGEBdBTaQDQyMQEcARymughOAIzDL+VEu9CoYE2Pxw/fzcrTkvbteryCylpmZNkKiQyCuPPOONkby7KmqYggDbUtEtHkFPAPGAEQAMPPQO2Z2XJR6fY3TTP8XsrULBnykmeauc1yc38vrsNexMbrJJV41IEIi3F6n7+UkcPzCEfiQRuxu2ki4Po7SujoOISWXfXWjFudBJBlKvMZD/zqvPNf7l26W0w0qkJ8c3wd9ZsLNZblHPriOugJA3DnwA5PwbyAJXwKZ0bHwGAAE21lZASOQtgAAAABJRU5ErkJggg==




Рестарт (Firefox, TB)
Левый клик - рестарт с окном подтвеждения
Alt+левый клик - рестарт без подтверждения
Рестарт
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3ERestart%20%28with%20confirmation%29%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20*****%20VARS%20*****%20//%0A%0Avar%20prompts%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPromptService%29%3B%0A%0A%0A%0A%0A//%20*****%20FUNCTIONS%20*****%20//%0A%0Afunction%20createBrandingBundle%28%29%20%7B%0A%20%20%20%20var%20myBrandingPath%20%3D%20null%3B%0A%20%20%20%20var%20myStringBundleService%20%3D%20Components.classes%5B%22@mozilla.org/intl/stringbundle%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIStringBundleService%29%3B%0A%20%20%20%20%0A%20%20%20%20myBrandingPath%20%3D%20%22chrome%3A//branding/locale/brand.properties%22%0A%20%20%20%20return%20myStringBundleService.createBundle%28myBrandingPath%29%3B%0A%7D%0A%0A%0Afunction%20getWindowType%28%29%20%7B%0A%20%20%20%20//%20Relies%20on%20Branding%20Code%20so%20can%20not%20be%20run%20on%20startup%0A%20%20%20%20var%20myBrandStrings%20%3D%20createBrandingBundle%28%29%3B%0A%20%20%20%20var%20thisBrandShortName%20%3D%20myBrandStrings.GetStringFromName%28%22brandShortName%22%29%0A%20%20%20%20switch%20%28thisBrandShortName%29%20%7B%0A%20%20%20%20%20%20case%20%22Mozilla%20Thunderbird%22%3A%0A%20%20%20%20%20%20case%20%22Shredder%22%3A%0A%20%20%20%20%20%20case%20%22Thunderbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22mail%3A3pane%22%3B%0A%20%20%20%20%20%20case%20%22Nvu%22%3A%0A%20%20%20%20%20%20%20%20return%20%22composer%3Ahtml%22%3B%0A%20%20%20%20%20%20case%20%22Calendar%22%3A%0A%20%20%20%20%20%20case%20%22Sunbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22calendarMainWindow%22%3B%0A%20%20%20%20%20%20case%20%22eMusic%20Download%20Manager%22%3A%0A%20%20%20%20%20%20case%20%22eMusic%20Remote%22%3A%0A%20%20%20%20%20%20%20%20return%20%22emusic%3Awindow%22%3B%0A%20%20%20%20%20%20case%20%22Songbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22Songbird%3AMain%22%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20return%20%22navigator%3Abrowser%22%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%0Afunction%20Restart%28%29%0A%7B%0A%20%20%20%20//%20Notify%20all%20windows%20that%20an%20application%20quit%20has%20been%20requested.%0A%20%20%20%20var%20os%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%20%20%20%20var%20cancelQuit%20%3D%20Components.classes%5B%22@mozilla.org/supports-PRBool%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsISupportsPRBool%29%3B%0A%20%20%20%20os.notifyObservers%28cancelQuit%2C%20%22quit-application-requested%22%2C%20%22restart%22%29%3B%0A%0A%20%20%20%20//%20Something%20aborted%20the%20quit%20process.%0A%20%20%20%20if%20%28cancelQuit.data%29%0A%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20%20%20var%20windows%20%3D%20wm.getEnumerator%28%22%22%29%3B%0A%0A%20%20%20%20var%20windowType%20%3D%20getWindowType%28%29%3B%0A%0A%20%20%20%20while%20%28windows.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20%20%20var%20myConfigWindow%20%3D%20windows.getNext%28%29.QueryInterface%28Components.interfaces.nsIDOMWindowInternal%29%3B%0A%20%20%20%20%20%20if%20%28myConfigWindow.document.documentElement.getAttribute%28%22windowtype%22%29%20%21%3D%20windowType%29%20%7B%0A%20%20%20%20%20%20%20%20%20myConfigWindow.close%28%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28%22@zeniko/crashrecoveryservice%3B1%22%20in%20Components.classes%29%20%7B%0A%20%20%20%20%20%20nsPreferences.setBoolPref%28%22extensions.crashrecovery.resume_session_once%22%2C%20true%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20appStartup%20%3D%20Components.interfaces.nsIAppStartup%3B%0A%20%20%20%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%20%20%20%20%20%20.getService%28appStartup%29.quit%28appStartup.eRestart%20%7C%20appStartup.eAttemptQuit%29%3B%0A%0A%20%20%20%20return%20true%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20MOUSE%20HANDLING%20*****%20//%0A%0Athis.leftclick%20%3D%20function%28evt%29%20%7B%0A%20%20var%20RestartProceed%20%3D%20prompts.confirm%28null%2C%20%22Restart%20Firefox%22%2C%20%22%u041F%u0435%u0440%u0435%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u043F%u0440%u0438%u043B%u043E%u0436%u0435%u043D%u0438%u0435%3F%22%29%3B%0A%20%20if%20%28RestartProceed%29%20%7B%0A%20%20%20%20Restart%28%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.aleftclick%20%3D%20function%28evt%29%20%7B%0A%20%20Restart%28%29%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20INITIALISATION%20*****%20//%0A%0Athis.tooltipText%20%3D%20%22Restart%22%3B%0Athis.style.opacity%20%3D%20%27.85%27%3B%0A%0Athis.setAttribute%28%22onclick%22%2C%22custombuttons.gQuot.mHandler%28event%2C%20this%29%22%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0A%0A%0A%0A%0A//%20*****%20ATTRIBUTES%20*****%20//%0A%0Athis.setAttribute%28%27author%27%2C%27Rawny%2C%20zooot%27%29%3B%0Athis.setAttribute%28%27version%27%2C%274%27%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/restart-session-restore.html%27%29%3B%0Athis.setAttribute%28%27dependency%27%2C%27FF2.0*%2C%20FL1.0*%2C%20TB2.0*%2C%20CB2%202.0.5*%27%29%3B%0Athis.setAttribute%28%27status%27%2C%27Complete%27%29%3B%0Athis.setAttribute%28%27public%27%2Ctrue%29%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BLeft%20%20%20%20%20%20%20%20%3D%20Restart%20application%20with%20confirmation%20dialogue%0AAlt+Left%20%3D%20Restart%20application%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

// ***** VARS ***** //

var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                        .getService(Components.interfaces.nsIPromptService);




// ***** FUNCTIONS ***** //

function createBrandingBundle() {
    var myBrandingPath = null;
    var myStringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"]
                        .getService(Components.interfaces.nsIStringBundleService);
    
    myBrandingPath = "chrome://branding/locale/brand.properties"
    return myStringBundleService.createBundle(myBrandingPath);
}


function getWindowType() {
    // Relies on Branding Code so can not be run on startup
    var myBrandStrings = createBrandingBundle();
    var thisBrandShortName = myBrandStrings.GetStringFromName("brandShortName")
    switch (thisBrandShortName) {
      case "Mozilla Thunderbird":
      case "Shredder":
      case "Thunderbird":
        return "mail:3pane";
      case "Nvu":
        return "composer:html";
      case "Calendar":
      case "Sunbird":
        return "calendarMainWindow";
      case "eMusic Download Manager":
      case "eMusic Remote":
        return "emusic:window";
      case "Songbird":
        return "Songbird:Main";
      default:
        return "navigator:browser";
    }
}


function Restart()
{
    // Notify all windows that an application quit has been requested.
    var os = Components.classes["@mozilla.org/observer-service;1"]
                     .getService(Components.interfaces.nsIObserverService);
    var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                              .createInstance(Components.interfaces.nsISupportsPRBool);
    os.notifyObservers(cancelQuit, "quit-application-requested", "restart");

    // Something aborted the quit process.
    if (cancelQuit.data)
     return false;

    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
    var windows = wm.getEnumerator("");

    var windowType = getWindowType();

    while (windows.hasMoreElements()) {
      var myConfigWindow = windows.getNext().QueryInterface(Components.interfaces.nsIDOMWindowInternal);
      if (myConfigWindow.document.documentElement.getAttribute("windowtype") != windowType) {
         myConfigWindow.close();
      }
    }

    if ("@zeniko/crashrecoveryservice;1" in Components.classes) {
      nsPreferences.setBoolPref("extensions.crashrecovery.resume_session_once", true);
    }

    var appStartup = Components.interfaces.nsIAppStartup;
    Components.classes["@mozilla.org/toolkit/app-startup;1"]
      .getService(appStartup).quit(appStartup.eRestart | appStartup.eAttemptQuit);

    return true;
}




// ***** MOUSE HANDLING ***** //

this.leftclick = function(evt) {
  var RestartProceed = prompts.confirm(null, "Restart Firefox", "Перезапустить приложение?");
  if (RestartProceed) {
    Restart();
  }
}

this.aleftclick = function(evt) {
  Restart();
}




// ***** INITIALISATION ***** //

this.tooltipText = "Restart";
this.style.opacity = '.85';

this.setAttribute("onclick","custombuttons.gQuot.mHandler(event, this)");
this.setAttribute('ondblclick', 'gQuot(event, this)');




// ***** ATTRIBUTES ***** //

this.setAttribute('author','Rawny, zooot');
this.setAttribute('version','4');
this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/restart-session-restore.html');
this.setAttribute('dependency','FF2.0*, FL1.0*, TB2.0*, CB2 2.0.5*');
this.setAttribute('status','Complete');
this.setAttribute('public',true)

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA6hJREFUOE9VkwtMU1cYx/+9tYAKWAYixWXjIQpYBGEF3AZoNKEyLeCiDQ+dBidjQHj4qHEoyLYw0KCTQUarqLQisGRmG+CCo0zEGljXAI0dr0InJpDNER/Lqin026GajJ3kl3Puyf1+93+/nMPD4pGpFYLHSbxErnJ3Hr3HA3lbbXa71U6WpzbSzv9tU8NORvB5TzFPfmyu/688XStakae7LFWO/pXcYqF930/RwbYpkn8zSYnqMYqq+438ywzTyOr5Ghndb7nk3/uO/2Gv7aUgXesrKuzvKPrpj7lDHQ9pd+sEpTSbKXURu1rMlNJkpo01921LP+p9kHx9cm79CT0BaV2eHvn3mg53/Wk/1P6QZOylheL3WyZIdt3sYGG9sOfYZ/JtjWN0Vj9LkScNTHDgduKOhvEn+bdmSKoepyTNOIs8Tn4Vg+Sr6HewpmqIpEycxARJTLaT/VZ53yxFnPyV4F3Y25bWNk2bNWaKaRijmEujtLyw5wmSGlQIzZQiJEPKkzXdWHpYZxOrRknSOEFvt/xOBXdnab2ij+D/cdczWdsM+dWN0Ju1I+R2VEdI+KqGdcaLwWHLpQDsbG1Dds8cFCxy2RCtrB0n2a1HFJj/M0F05A6FaaZI8IWJBBX3iZP/YEVQntjR3PgrTth6rRMZP9pQzL52jDXtExb71AAFXZ4k770dBHn7MqqyeFDeIOhgH2iTGtaQGvg6BJLzexBZ1YzwzzXYwAj9VIOQ8pesO61BRGUL4tUuzz+zuFG2ASS/DYprBvlXI+fVAVnGZk/Gax6pEItzESnJhTh8H4LWJsN/hQRvIKx6SX+JyYmy9Bzt6gbtYYTW4YFPBT7wLIe3sBRebB0XW++cd84YvP+CMSJZadoUd6QzKNzvBEvqnoucvTfdX5QYRQ5BRi8oS4f5ba14HK3CgETFv7P7hmsnK26sN8VUKI1xRXWGd9KTVT5bndNYOucdCAwo57ouDL9rLzAIKVMHytFjvsiAZ0cNmC4bdB86P7xGqxyOblaZ4quVxoTjxe1r93vlI5ZLgDMgAMelYsu6SlfjGVO4/ZRxFRUYOLvCiOenTdyjs8O+IxfNUXevmjd/ywS1xzqDS18vdpIjAsLF91DAbUdiYKlz94H2gBcKvZAqx1bO1Vh8HistoWaVOeaXMl3IzZQrqy+uLuZnIwyrWDHvfzeZPQgEsdiwPA3Hgytd9NEqNyvjH0m928zGL90HAkqWnHPaDik/CiLHAXs1/gU8lc1wSyvYVQAAAABJRU5ErkJggg==

Stop All Tabs (Firefox)
Автор: Yan.
Останавливает загрузку текущей вкладки + дополнительно позволяет останавливать фоновую загрузку всех вкладок.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EStop%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.StopAll%3Dfunction%28%29%7B%0A%20try%7B%0A%20%20for%20%28var%20i%3D0%3Bi%3CgBrowser.browsers.length%3Bi++%29%7B%0A%20%20%20%20gBrowser.browsers%5Bi%5D.stop%28%29%3B%0A%20%20%7D%0A%20%7Dcatch%28ex%29%20%7B%7D%0A%7D%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.StopAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Stop%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BBrowserStop%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII=

Инициализация:

Выделить код

Код:

this.StopAll=function(){
 try{
  for (var i=0;i<gBrowser.browsers.length;i++){
    gBrowser.browsers[i].stop();
  }
 }catch(ex) {}
}
 var nMItem=function(label,img,obj){
   var m=document.createElement('menuitem');
   m.setAttribute('label',label);
   m.f=obj.StopAll.bind(obj);
   m.setAttribute('oncommand','this.f()');
   m.setAttribute('image',img);
   m.setAttribute('class','menuitem-iconic');
   return m;
 }

 var mP=document.createElement('menupopup');
 mP.appendChild(nMItem('Stop All Tabs',this.image,this));

 this.appendChild(mP);
 this.type="menu-button";

Код:

Выделить код

Код:

BrowserStop();


27-03-2010 23:32:57
Инвертировать выделение (Firefox)
Автор: Anton.
Позволяет инвертировать выделение (менять местами выделенные области). Незаменимая вещь для пользователей расширений типа Scrapbook (обсуждение функционала, обсуждение кнопки).
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0418%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%0Afunction%20notNull%20%28x%29%20x%20%21%3D%20null%3B%0Afunction%20compareRanges%20%28r1%2C%20r2%29%0A%7B%0A%20%20%20%20return%20r1.%20compareBoundaryPoints%20%28Range.%20START_TO_START%2C%20r2%29%3B%0A%7D%0Avar%20doc%20%3D%20gBrowser.%20contentDocument%3B%0Avar%20win%20%3D%20document.%20commandDispatcher.%20focusedWindow%3B%0Avar%20sel%20%3D%20win.%20getSelection%20%28%29.%20QueryInterface%20%28Components.%20interfaces.%20nsISelectionPrivate%29%3B%0Avar%20ranges%20%3D%20%5B%5D%3B%0Avar%20i%2C%20j%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20sel.%20rangeCount%3B%20i++%29%0A%20%20%20%20ranges.%20push%20%28sel.%20getRangeAt%20%28i%29.%20cloneRange%20%28%29%29%3B%0Aranges.%20sort%20%28compareRanges%29%3B%0Avar%20range1%2C%20range2%3B%0Avar%20css%2C%20cse%2C%20ces%2C%20cee%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20ranges.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20range1%20%3D%20ranges%20%5Bi%5D%3B%0A%20%20%20%20if%20%28%21range1%29%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20if%20%28range1.%20collapsed%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ranges%20%5Bi%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%7D%0A%20%20%20%20for%20%28j%20%3D%20i%20+%201%3B%20j%20%3C%20ranges.%20length%3B%20j++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20range2%20%3D%20ranges%20%5Bj%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28%21range2%29%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20css%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20START_TO_START%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20cse%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20START_TO_END%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20ces%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20END_TO_START%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20cee%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20END_TO_END%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%28css%20%3C%3D%200%29%20%26%26%20%28cee%20%3E%3D%200%29%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ranges%20%5Bj%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%28css%20%3C%3D%200%29%20%26%26%20%28cse%20%3E%3D%200%29%20%26%26%20%28cee%20%3C%3D%200%29%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20range1.%20setEnd%20%28range2.%20endContainer%2C%20range2.%20endOffset%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ranges%20%5Bj%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28range1.%20collapsed%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ranges%20%5Bi%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%7D%0A%7D%0Aranges%20%3D%20ranges.%20filter%20%28notNull%29%3B%0Asel.%20startBatchChanges%20%28%29%3B%0Asel.%20removeAllRanges%20%28%29%3B%0Avar%20range%20%3D%20doc.%20createRange%20%28%29%3B%0Asel.%20addRange%20%28range%29%3B%0Arange.%20setStartBefore%20%28doc.%20body.%20firstChild%29%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20ranges.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20range.%20setEnd%20%28ranges%20%5Bi%5D.%20startContainer%2C%20ranges%20%5Bi%5D.%20startOffset%29%3B%0A%20%20%20%20if%20%28range.%20collapsed%29%0A%20%20%20%20%20%20%20%20sel.%20removeRange%20%28range%29%3B%0A%20%20%20%20range%20%3D%20doc.%20createRange%20%28%29%3B%0A%20%20%20%20sel.%20addRange%20%28range%29%3B%0A%20%20%20%20range.%20setStart%20%28ranges%20%5Bi%5D.%20endContainer%2C%20ranges%20%5Bi%5D.%20endOffset%29%3B%0A%7D%0Arange.%20setEndAfter%20%28doc.%20body.%20lastChild%29%3B%0Aif%20%28range.%20collapsed%29%0A%20%20%20%20sel.%20removeRange%20%28range%29%3B%0Aif%20%28sel.%20rangeCount%20%3D%3D%200%29%0A%20%20%20%20sel.%20addRange%20%28doc.%20createRange%20%28%29%29%3B%0Asel.%20endBatchChanges%20%28%29%3B%0Awin.%20blur%20%28%29%3B%0Awin.%20focus%20%28%29%3B%0A//sel.%20deleteFromDocument%20%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

Код:

Выделить код

Код:

function notNull (x) x != null;
function compareRanges (r1, r2)
{
    return r1. compareBoundaryPoints (Range. START_TO_START, r2);
}
var doc = gBrowser. contentDocument;
var win = document. commandDispatcher. focusedWindow;
var sel = win. getSelection (). QueryInterface (Components. interfaces. nsISelectionPrivate);
var ranges = [];
var i, j;
for (i = 0; i < sel. rangeCount; i++)
    ranges. push (sel. getRangeAt (i). cloneRange ());
ranges. sort (compareRanges);
var range1, range2;
var css, cse, ces, cee;
for (i = 0; i < ranges. length; i++)
{
    range1 = ranges [i];
    if (!range1)
        continue;
    if (range1. collapsed)
    {
        ranges [i] = null;
        continue;
    }
    for (j = i + 1; j < ranges. length; j++)
    {
        range2 = ranges [j];
        if (!range2)
            continue;
        css = range1. compareBoundaryPoints (Range. START_TO_START, range2);
        cse = range1. compareBoundaryPoints (Range. START_TO_END, range2);
        ces = range1. compareBoundaryPoints (Range. END_TO_START, range2);
        cee = range1. compareBoundaryPoints (Range. END_TO_END, range2);
        if ((css <= 0) && (cee >= 0))
        {
            ranges [j] = null;
            continue;
        }
        if ((css <= 0) && (cse >= 0) && (cee <= 0))
        {
            range1. setEnd (range2. endContainer, range2. endOffset);
            ranges [j] = null;
            continue;
        }
    }
    if (range1. collapsed)
    {
        ranges [i] = null;
        continue;
    }
}
ranges = ranges. filter (notNull);
sel. startBatchChanges ();
sel. removeAllRanges ();
var range = doc. createRange ();
sel. addRange (range);
range. setStartBefore (doc. body. firstChild);
for (i = 0; i < ranges. length; i++)
{
    range. setEnd (ranges [i]. startContainer, ranges [i]. startOffset);
    if (range. collapsed)
        sel. removeRange (range);
    range = doc. createRange ();
    sel. addRange (range);
    range. setStart (ranges [i]. endContainer, ranges [i]. endOffset);
}
range. setEndAfter (doc. body. lastChild);
if (range. collapsed)
    sel. removeRange (range);
if (sel. rangeCount == 0)
    sel. addRange (doc. createRange ());
sel. endBatchChanges ();
win. blur ();
win. focus ();
//sel. deleteFromDocument ();

Disable/enable windows titlebar with drag ability (кроме панели вкладок) (Firefox)
При добавлении кнопки окно Firefox потеряет виндовый тайтлбар и рамки (все, даже общая вокруг окна, что я думаю мог бы кто-нибудь исправить) по бокам и снизу, но его станет можно перетаскивать за любую панель кроме таббара и персональных панелей (это можно исправить добавив id нужных тулбаров в строку, где они все перечислены).

скрытый текст
Установка кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u043E%u0441%u0442%u043E%u044F%u043D%u043D%u043E%20%u0432%u044B%u043A%u043B%u044E%u0447%u0435%u043D%u043D%u044B%u0439%20Chrome-%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%20-%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%20%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0A%20%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%0Athis.drag%3D%20function%28%29%20%7B%0A%20%20if%28window%5B%22bDragW%22%5D%20%29%0A%20%20%20%20return%3B%0Avar%20Ctrls%20%3D%20%5B%27PersonalToolbar%27%2C%20%27toolbar-menubar%27%2C%27nav-bar%27%2C%20%27status-bar%27%2C%20%27FindToolbar%27%5D%3B%0A%20%20try%20%7B%0A%20%20%20%20%20Components.utils.import%28%27resource%3A//gre/modules/WindowDraggingUtils.jsm%27%29%3B%0A%0A%20%20%20%20%20for%28i%3D0%3B%20i%3CCtrls.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20ctrlW%20%3D%20document.getElementById%28Ctrls%5Bi%5D%29%3B%0A%20%20%20%20%20%20%20if%20%28%21ctrlW%29%20continue%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20bDragW%20%3D%20new%20WindowDraggingElement%28ctrlW%2C%20window%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20DragW.mouseDownCheck%3Dfunction%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%20WinState%3D%3D0%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%7Dcatch%28e%29%7B%7D%0Awindow%5B%22bDragW%22%5D%3Dtrue%0A%7D%0Athis.drag%28%29%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20mainWindow%20%3D%20document.getElementById%28%22main-window%22%29%3B%0Avar%20chromeattrib%3DmainWindow.getAttribute%28%27hidechrome%27%29%0A%0A%0Athis.togglechrome%20%3D%20function%28%29%20%7B%0A%20%20if%28chromeattrib%3D%3D%27true%27%29%20%7B%0A%20%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27false%27%29%3B%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%20%20%20%20%20%20this.checked%3Dtrue%3B%0A%20this.image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII%3D%22%3B%20%0A%20%20%7D%0A%20%20else%20%7B%20%20%0A%20%20%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0A%20%20%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%20%20%20%20%20this.image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR5JREFUeNpi/P//PwMlgImBQsCyc+/eGiDdTIbes0C8mYWDg6PZztqafBeAiDffsUuGxkeBaWnvcAy5CWH+EAM+fvpE0BYpfWMU/rOLZzED8dyxvWCMDYA0dBvIgDGyZrALPgFd8P/fPwZ3Z2ewwMuv/xkYgfR/BvzR++8fRJ7l569fDH///mPYuXc/WEDP1B6ighFVQ0xVI4ShbgCm/v/9iwjEf38QLnj67hfYdjT9DP+hGmHgD8iA/4wQA/4COcD0AJbQ0LdiYCQicf7985eBkRHqApBpVmZGYIk3X//CFcmoqEMYNy9ghoG7MyigIAaA/PPqEyxC/oI9wAgkG7ILoAHKiBYs/xn+AcMNJqY0Z9Giu+QmZcYBz40AAQYAXyBzO2qih9QAAAAASUVORK5CYII%3D%22%3B%0A%20%20%20%20this.checked%3Dfalse%3B%0A%20%20%7D%0A%7D%0Athis.togglechrome%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B********************************************************************%20%20%20%20%20%20%20%20%0A%0A%20Toggles%20window%20chrome%20for%20your%20browser.%20%20%20%20%20%20%20%20%20%0A%20Makes%20the%20window%20almost%20chromeless%20meaning%20no%20titlebar%20%20%20%20%20%20%20%20%20%0A%20but%20taskbar%20should%20still%20be%20accessible.%20%20%20%20%20%20%20%20%20%0A%0A%20Convenient%20for%20going%20fullscreen%20without%20losing%20all%20%20%20%20%20%20%20%20%20%0A%20those%20useful%20toolbars%20and%20the%20windows%20taskbar.%20%20%20%20%20%20%20%20%0A%0A%20By%20default%20this%20button%20makes%20the%20browser%20startup%20chromeless%20%20%20%20%20%20%20%20%20%0A%20you%20can%20change%20this%20by%20commenting%20out%20the%20appropriately%20marked%20%20%20%20%20%20%20%20%20%0A%20line%20of%20code%20in%20the%20button%27s%20initialization%20tab.%20%20%20%20%20%20%20%20%20%0A%0A********************************************************************%20%20%20%20%20%20%20%20%0A%0A%20Directly%20Clicking%20on%20the%20Button%20does%20the%20following%3A%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20L%20%3D%20Toggles%20Chrome%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20Any%20Other%20Click%20%3D%20Custom%20Buttons%20Context%20Menu%20%20%20%20%20%20%20%20%0A%0A********************************************************************%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var mainWindow = document.getElementById("main-window");
var chromeattrib=mainWindow.getAttribute('hidechrome')


this.togglechrome = function() {
  if(chromeattrib=='true') {
  document.getElementById("main-window").setAttribute('hidechrome','false');
window.restore();
window.maximize();
window.restore();
      this.checked=true;
 this.image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII="; 
  }
  else {  
   document.getElementById("main-window").setAttribute('hidechrome','true');
  
window.restore();
window.maximize();
window.restore();
     this.image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR5JREFUeNpi/P//PwMlgImBQsCyc+/eGiDdTIbes0C8mYWDg6PZztqafBeAiDffsUuGxkeBaWnvcAy5CWH+EAM+fvpE0BYpfWMU/rOLZzED8dyxvWCMDYA0dBvIgDGyZrALPgFd8P/fPwZ3Z2ewwMuv/xkYgfR/BvzR++8fRJ7l569fDH///mPYuXc/WEDP1B6ighFVQ0xVI4ShbgCm/v/9iwjEf38QLnj67hfYdjT9DP+hGmHgD8iA/4wQA/4COcD0AJbQ0LdiYCQicf7985eBkRHqApBpVmZGYIk3X//CFcmoqEMYNy9ghoG7MyigIAaA/PPqEyxC/oI9wAgkG7ILoAHKiBYs/xn+AcMNJqY0Z9Giu+QmZcYBz40AAQYAXyBzO2qih9QAAAAASUVORK5CYII=";
    this.checked=false;
  }
}
this.togglechrome();

Код "инициализации"

Выделить код

Код:


  document.getElementById("main-window").setAttribute('hidechrome','true');
 
window.restore();
window.maximize();
window.restore();

this.drag= function() {
  if(window["bDragW"] )
    return;
var Ctrls = ['PersonalToolbar', 'toolbar-menubar','nav-bar', 'status-bar', 'FindToolbar'];
  try {
     Components.utils.import('resource://gre/modules/WindowDraggingUtils.jsm');

     for(i=0; i<Ctrls.length; i++) {
       ctrlW = document.getElementById(Ctrls[i]);
       if (!ctrlW) continue;
       try {
           var bDragW = new WindowDraggingElement(ctrlW, window);
           DragW.mouseDownCheck=function(e) {
             return  WinState==0
           }
      }catch(e){}
      }
   }catch(e){}
window["bDragW"]=true
}
this.drag()


p.s.: код кнопки основан на коде 4-ой кнопки из этого поста + доработан автором foxiFrame basic'а (добавленный код - одна из функций которое выполняет это же дополнение, возможно вам стоит посмотреть и его (там больше функций))
p.p.s.: если использовать эту кнопку в сочетании с
1. 4-ой кнопкой этого поста (Меню делает иконкой)
+ 2. кнопку из этого поста (титульник страницы на панель)
+ 3. первые 3 кнопки из этого поста (скрыть, развернуть и закрыть окно) (их ещё бы можно переделать сделав их похожими на дефолтные виндовые (как в вин висте и вин 7)
= то можно разместить все эти кнопки на 1 панели меню: лого кнопку - слева (клик по ней - вызывает меню), потом титульник страницы, потом изменяемый интервал, потом кнопки "свернуть", "развернуть" и "закрыть" (они будут справа) - то получится хорошо сэкономить место на экране, за счёт убирания виндовой рамки и тайтлбара + функциональность вся остаётся, и можно ещё на свободное место перетащить другие КБ кнопки (между тайтлбаром и кнопками свернуть-развернуть-закрыть).

Minimize/Maximize/Close window (win7 aero style) (Firefox)
Тут уже эти кнопки были выложены (на 1-ой странице), но мне захотелось прикрутить к ним другие иконки, стилизованные под win7 aero, разница только в этом.

Свернуть окно (Firefox)

скрытый текст
Установка

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0421%u0432%u0435%u0440%u043D%u0443%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Evar%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A%09%09%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB0AAAATCAYAAABsmQZ/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAESUlEQVRIS42VWU9bVxDH7zcCRYqagmNsyEPf2+apjRS1SgMGQonAJixp8G5sMAQCMSGRmtKGhMV4t8GkEomxDV4wUOOVpdBHvsK/c861ARM/cKWfZs42/zn3nntGODw6QmPTHZye/oed3T3s7l2wR/7e3j+XKI2V5zFbBRangp1Sm+zR0TGEsujJ6akoWuaS+Hkil8a/CFxNiIldgYseHLKdNoGLVpnE+yhgqjRWtuLcXeqv5HIMNvfquCh6cAh5YxPfdiyeQJxgtkw8nqxox2KV45fb8QStTySrQ3HYWKF4AKFQPIRM1oh8oYhQKHLBRjU/jM8hkVCZjTA2GOEIwoxIFBGC2TKRyCb1MaLI5fIQ8vkipFI5HZZ9+P1BkUA1u0pjlQQCqwisrGKFsRrEanANQcbaR6yd8zf5F7AzI2QyBdTXNyCZ3MHysreE58J3sD7WZrgJF8fhIJxuOF0euAiPxwuv1wefzw+fP0AJlgis0CYYlDCxvZ2CkE7nceuWFJubSczN2b/g/Xs7RJY4c3OLZBfw4cMi5ueXML+whMVFO+z2ZSw7nJSEi5Jww+X2wM3xilBSbo+PnxlhdzeHmzclFMSJzs4BPH78FF1dIt3dvxHMH8CP99rw7d0H1+L+Tx0wGEwwmoZg4phLWCg5B4Tt7Qxu3KjD7OwSWlpUUBCtCrIKJVpblWhrUxFKLnbdh81Vq7XQaHTQaHXQ6vTQcQxYoDcjJBP7qK39Gm/fLuCXB11obu4muigBEYWimxLp4qJnZ2fXoiyqZqIaPUerNXC4aCKeRk3NLRJdwsOHSrQ0K0mktEu2U6K1tZuLnpycXAsuqmEiRtqlkXZogl7PGMICfX8hkUijtuYrvHvnpNfYj/ZHfXjE6OjDr50X/HBPca3vyQTv/9wBrcECvXEYBuMIYeUYTVYs2V30epNpfpAW5t3o6dFDqdRAqWKooSLb06NGzxMNVGRVqkHqf0b+IJ70qtHbr0XfgA5PnxkxqB6CVs9ERmEyj2OIMFsmYBl+QUye43D6IaRS+5DLv6H/zg+zeYoOwAh9fEIjWi3ztcPUFhlUmzkarQUa3TB0erYLUYgFt47aMPZ8BmPjM3g+8RrjL95wJkp4fWsQ1tejdHA60N7eQf9WELbpWb7IOjqNEcI6RjDf+hKWkSke2Mwhn7WtUzTPhtHxVxiffINJ2++Ymv4DL1/NwjbzJ6Zf/wUbwSwj+PETBPasr4cgl92hk9rOr7NYLEX3ZOyccDhGd+sWQhtRunej+PQ5Ugn1hTY26a6lNdEEoltJbDJi20QKW0TZMp+LsodVk/7eAXz/3V00yhspCYJbORUEORqkMty+LYVEIqFrU4K6uvoK6qlfQuNSmtfQIONrWCGRUYyrnIsyJ53O4Pj4XxEqdQxW8o6o5rISWCwWkc8XeKXIZnOcTCaLTDaLbC6HHI2xalUoHPASVqQKVmTrrvA/8KJW0ZMmlNcAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-moz-box-shadow%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB0AAAATCAYAAABsmQZ/AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAB90RVh0U29mdHdhcmUAUGFpbnQuTkVUID8/Pz8/PyAzLjUuNefKA2EAAASTSURBVEhLjZV5UxNZFMX7E47LUDJWqSMuKMqIUzpCICFrJ+mkO+l0d/aQhcgeCGZYZFVAdGY+h3/7Fc6c+xLQ8i+66lf3Lfe9c959L6AdHBxiZOQh1jrryDnegDwjyeXhDKJte8hmXeIo7KyNnO0wx4GTc5nnwnUL8PIl5AtlFIoVFEs1lMpzKFXqKFcbirX1TWg7u+9x5+49LCwuI21mFKaZhWkRxnSaYxekLKQEw2RMI50yYaYtWFxjWRlkLBu2MkLzNOB6RWXCowmvWKWRKpZX16H1elsYHr6NZmseup6EHjcQj6eQSBqKuPT1FPRYkpHzjHosoZB+Ii4YSDJXzKRpQsxaVg4ZqQwrZEu13CJyXgkLS2vQ1je6GBq6hVqtjmAoQqIIhWIIh/UBbLMvYyHOhUkkHOFchJHtSBTRiI5oVFemxWQimaIJE0mpSpoVyziwaCCT9dB+uwRN7vL69ZusfxXTM7OKGX8Q/kCoj7T9gzgTQoBjfcIIzIYxq4jQkEBTykACURqIqYqlYaQySjzF8jfnF6GtrHbwy7Ub6vInp/yY8s0QiX74pmcZA31kjvimA5ieDtJcH3+gb1AZoQGpVijEKkXiiESTSlxPiLhF8SwazTa05RURvUnRCt5M+vGGApMCBd6QyamAihcoAyLMUytYBWGGJ/fL6YMRzPIqghQO8dR9YQM6y50wLMw1KLra2cC1G0PqeU/yBBdM+dgWZMw3+32cfZ8IUWCGZRX8FPIHoxQkFAwMBEMsczhmUDSFOE+aMDKYk5N2uj3cHBpGpdbkBlESo+MoN/2Oj+1791/g11ujV+L3BxOXYrGEyVNaiLO0RtpGQ+50s7eDW7/dQb21gFA0pQhGjJ9IKrGrfpKr81RxI8sXbMMwHT4iF6mMh1Z7GdrW7j5u37mP1sIq3eQUOpP1pK2IJTMK2ejbt29XQnJT2bzCzBZg5YrIOCVknTLaix1o7w8+4O7IYyytbsLkpGmX+LsqcEEB6cFCcSgbff369UpIbtatwPZIvoJcvgYnPwe3WMcidbTDj2cYeTyGTncbTqEOuzCnkmyvhqxXHVDBo6evrnSfIjg69hfcUh1eqXFJvtxEodzCSqcH7ePZFzwd/xMb73ZQmmsjX2mRJvKlJlwmuuUGHG4gmwiqzbFLmOtJfrWFwgW1ebbbiqJivh9rbaxtbEE7/fIfXr72ocsH1WivotxYoDhhQoEU1QY0UqVTFX+G8yr3LdcRiUL9BzheFji2xoqyvOdIWg6K/PfT/fs9WrzoanMJlcYiF4qBtyiyAkqc5OlaomoPojInOSIqa0h5wEVfTIhohxXV5NvdP8b4xGveYxGdzW1s7R2jt3OAd9v76G7tKTMbPWGX7KiF6xLJOsf69HO6gqz5iU32hXfbe31R+Q6OT9Xv6BX/FD55PoEnzybweOwF+YOPaBwPnzzHg1HhGR+eMPYD/bH+/HOV+0gxrtbKHheMsn0pqoQ/nOHk/F98/PQP5IF9OP2C45PPODo5h7xymRdz+0cn2Dv8AekfcZxzB8dnOGSe5B+dfFIcC6fnAz7jf77nyyVS9zSnAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%0A%09.toString%28%29%0A%09.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%09%22data%3Atext/css%2C%22%0A%09+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%09var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%09if%28sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%09%09sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09if%28addFlag%29%0A%09%09sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.setSheet%28this._cssURI%2C%20false%29%3B%0A%7D%3B%20%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bwindow.minimize%28%29%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код

Выделить код

Код:

window.minimize()

Инициализация

Выделить код

Код:

var cssStr = <![CDATA[
        %button% {
            list-style-image: url("1pic") !important;
                        -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;
        }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;
        }
        %button%:active {
            list-style-image: url("3pic") !important;
        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;
                }
    ]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.USER_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.USER_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);
}
this.setSheet(cssURI, true);
this.onDestroy = function() {
    this.setSheet(this._cssURI, false);
}; 



Развернуть/восстановить окно (Firefox)
скрытый текст
Установка

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0420%u0430%u0437%u0432%u0435%u0440%u043D%u0443%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Evar%20sId%20%3D%20%22__customButtonsStyle__%22%20+%20this.id%3B%20//%20Unique%20style%20%22id%22%0Avar%20cssStr%20%3D%20%26lt%3B%26gt%3B%26lt%3B%21%5BCDATA%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAADeElEQVQ4T43U/1PaZhwH8Pxd3beiod2Prnrurnfbfpp33bqz7qQKCCEQQgJJgCRY+aKzTrer3e1LLVrYJu02IgExAsGVL4Far3abv+w/2D4JGpzecXvudbmH557PO58nR4LgXu/JyUm1qhpqF9XUmlo3qWpdrZsO1PqBvnIGth2+PEI8Hvws8VIc3OMssV+pJxpZPUaceUs90eVy/6X3eDmupseZif3WzMTT7vqHqNUPD48Qh8N5/Pr13p7SUzbAhKQio+MTA5B0VNmvKErfnrKvdbrIzMzsq1fHBblYKABZnxgg65+BAzYUiyW5R9avBbnUbLWRO1NT3e6L7e3cBf8nMZd7tq17asj9vJ2rqSoyOTmpaZ1s9scMyPSZiZcP3msd1rPZn/SqbPaJYSuTUSr7yO3bn7Va7XR66wIo+NsYMNl6kjGdX09vbj5Ob26k0xvpx4/SGz+kN0rlXWR0dGxnpxAMMueEYA6VfxgDJgzDmc6vB2iapCmCIr0U4Q34wPq3D5GRkffyecnvD5BkAK5+goQrQZBQeWSMy6c213Ev7sY9LtzlxJ123D6L21fXVyHxRi+RIP4DgjoDB2xwezAnNmfHHDPYzF3MZsOmVx7cR0ZujOWlAkkGDTTpp/0GKGgOHLDB5XFD4qzbftdts7mnp7HPlx8sw3MclySZoiMUHdZR4QDFgVuf2gb/wyduTWE4Poe7HJgTerTpPdpW1u8jY+M3ZbnMcvdYbp7h5kNsjAGMGAKsyLAiywGeYaMMGwkxXDDEUEEmQNF+MgDPHPf73D5szutyep0On2PtmzXk/ZsflcvV2PwXQIwtCeISLywK4iKvSwliUhATQizBiwu8EOMFMcoL4WiEC4cZlgsxDBWiA0GSoAiC8vpo78Pv15EPPvxYqRwkF78GidRXidRaHCTBaiL1pWElnlqOp5biyeRCMr6QWIjdi4nzohATeDEaFcJhnuWiISYSZKL0o83vkImJT46P/yztVs7ZL5aAUtxVSrq94m65WCrBuyvDu1uUCnJ+p5CXdn7VSb/kpWf5/NPfeqQcYr32ruG61dqHWq+j6DWDFbUCFEWHhlHLMPrO8PDbQ0NvAYvlTd1V8MYpy5WrlitIp/ui0wFdAN8iTQOdM1pbA+221mprjVb791b7oNlSm80aaDSqjeenms+rTfjZqIB/AUBg8dI6uaMqAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%09%09%09-moz-box-shadow%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%20%21important%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEV0lEQVQ4T61Sa0xadxy9n/Zhn7ZlbmnX2laxDgVBrTNK26Vdui9LmiVLmmVJF5M+nMV1VSuiDGNx6BSk+ACFaFVUVBAQlJdQUJha54OHl6eCFkTro6XOR0H3+k8716SJ2YeenPxz7vmf37n3l1woo0ZgD/zWORHonlwUmpZEphUJvCqF16T2Z3JnUOkCfK5yv6Tcvb6vgalwBvvtwT74aS+8CqYE5qXuqUWDdw26Wit+w43fsCRvuPHr2l6rP/jg0XzLmI83vtA+udhpWhJYV4iVjV9duXkIC2lNInhNYF3tMj3pmFxsH/eDBr17GbpSLTH5njUMergGT5NxrnnkceuYv208ALr+OhQg0GVa7pgI8MYWmkcfNw7PgYYBeBn6kiEc8axUKu10lZ2hcTG1s3WDs2zD3P9p5A776o3zdUOe6oezTK2brnZIJhegy3ShcWaZKp0uk9kqFPZKpZsx4GbqPAeNry++/+nAZw15a3RehmaWpnZXKhxl/baecR/0BU2gdy6RhFNkkblEar0ns5fJHT+r3WDg+R6AqDHO7bN6aP5Vv0o7U6meKVM4KX12itRKFls6RuagpAJutWr66C3e8e87TuZ0xhAEcSQJliwDk0/2AMR5un6f5+iDr/opVFVSiRxFksQWiKJy+JG3O65xdRD2bkOV3PLu9ab3M1s+xPOO3eFHEYQfE8Vg0r+H17c+8NEl8jiSNJogjMzpPoLnRWS2XmVrIGw+BzS+d+MBeD6a3XY8ryuK2IMgS0GR91CAAJqijCPLogk9J3K7P8K3RWTyvmVroUQCl6GcjviuGbwkMod/giSOKpdHMdVgwH0oQCCOoYkrV8QWyU7lCU/9wD+Cb8to0EHJBE6tGj6e3X4S7FsojqYqYmrUiEb9pwX0w//wi3er0PWGhCoN6p4CWSiNAaV3Oq83GqAzBE79gA2R232aKI6nKpD3tSiuIZ4/huw1xSrNCK0VoYMRetsBYx7CyAErWmZGC6eS28aS2cZEmhZLUaKJUmS+GN86CqUUcLg6F6aoN7FUlczUJXN+SeJPJsksWI09YdCFGpmNG3cjJ2f2CTRwsEPuMzpHigJO7bGkt07gWMZ0mi6Nokwi9+d2/ArhyC2Nxvm0Ug2ONojjjpzlT6X1wWm6mdRhb8qUDwv7MY4AxvkvHQHgpJp86Y/mcQbvBbXrosj2WavpAmv0fIX+HFVLFE1Dl1tGBd6tetsyx7PK9gfpKxv5wS3c1ouYUOjY7k7E7zvv/LH79p8v+daeAM4HuzuR4fDp7dDZ9W3i6gYzsM6ef8pyrlAtQehSdd/nbE0KgRV/rRidRcHklGMK6Jii+5hiJqakJqG0DvVTHYr6H4EDfHCL/ZGZSKxKzKvA4KkJN0pQGaRP8usu1aogrnOjxrFJs29RbS+Kp0OF06E8a+i2OZxtCePN4VumMN60k2XZASfQWeZ/TuCDW5ABSZAvhkNglm7frnVscl2bfwMRUdfJvwX5CQAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%0A%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEaklEQVQ4T2PIn7vl1I2H/WsOTlh3cPKGQ9M2HZ2x+eisbSfm7jg1b+fphbvPANGi3WehaM/ZRUC0+yxQcP6u0/N2npqz/QRQPVDX5I2HgSZsPnGVIWvuViqbmDqb2iYmzNx88PLdhkU7mpbsbF22q2P5nq6V+3rXHsip7g4OS8OD8qp7Jq473Lf2YNeqfR0r9rYu2w00YeWB8wxRUzfuPHszf9r6wukbSmZuKp+zuXLe1tqF24Fm/ccLgAoal+ysW7ijav7WijlbSmdtBpoADH2G0InrNh2/Ete5NLFreUrvyvT+VVmT1uRNW0eMicUzNgGdkj15TfqE1UC9iV0rJq0/xBAyYe3Go5dj2hbFty9J7FqW0rMifcKqrKlr4SZiehzidKB43rQN2ZPXZkxYldK7Aqg3vn3pxLUHGPy7Vq7eeyawdEpQ2dSQymlh9XPDWxdE9C4FavgABkBG5NItkUu3Qkhk8eiepZFtCyPq54bVzAqpnB5cPrVr4TYG/YzWzunLuDXceDQ9+QwDBKwjBd2ShIOygTpfgAGQIVzSAkfI4uK+WWKO8SIWYUKGgXy6vrxaXpF5TQw6KQ1tUxazKNqzKTlxaHlxmQZzO8Tw+oBi+TEYYPoaLi7ongJ0AdAdPFpeHGpu7MrOoZm1DDqpTW1Tl7AqObKruHDq+XJZhXO7JfEE5wANuocXABUI+GQIOMTxmQbz6PhwqrtzqLiEZtUx6KY2t09bxq7qzqnjw20RzuOWwhOSz5tcDdRwCy8AmRhVKuCbyQ801DiYR9uHU8MzPKeZQTeluWvmSh4tX16TMD7HJH7/PP64Kv7iNvPscvwp3CK1RDi1Xji0RNg9Tcgqht8giFfHPyq/DWRiz+y1AkZhgraJwl7ZwpGVwrltws2ThabOE1y0hH/jar5dG/j2bISiXRv4N60WWrJUeOYCkfbpYsXdYvH1Yv6Fok5pwuYxwkZhscU9DHrJzf3zN4paJYi6ZokHl4knt4pXTRKfsEBs8UrRDRuE9+8QOrFL6NReCBI+sRsoIrpxg/iy1RJTFkk1zJDO7pKOqJHyLpCwTxO3TEismMRgmNnZt2SHpGOmlE+xdGSjTH6/TNsc6TkrpdZtlNyzU+LMQfFLR8SuHYUgIBsoIrl3l/T6TbIL1sh3L5Qvnyof3y4fUCnrlidtn5HSMIfBbfLOpdde9+w803vkUtfF2y13H+c9f2Xy/r3C18+SP78J//7B//cn199fEMT27zeQ5P/zU/jXd6lvXxQ/fDR9+Tr//tPWK/e6Tl3rPnip7sAdhogVp+0612omNsn55yrF12oU9mo1ztLpW6ozY63WvI3qi7eqLN+usGqnwsqd8it3Kq7cqbx8u9qirZrzNmnNWK81YbVW21L1qgUqeTNlkyZrFi+PXH+dYeaNz5Oufem+9rXl6ve6yz8qLv8ouvQj78LPnIs/sy/8zDoPRL8yL/4CkkB25gUQCRQHygLVAFUC1ddd+QHU233t26TrX2be/AIAOtNJcCPMEfcAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAB90RVh0U29mdHdhcmUAUGFpbnQuTkVUID8/Pz8/PyAzLjUuNefKA2EAAAOASURBVDhPjZTbbts2GID1jgV2U2RZ29WZk9pODKfJ2qBDgcSWZUnUgaIo6uT4JCd14vrsxG6dQ5EUe4Rd7GY3u9wbbD8lI8tQwBjxgSB/kZ/In5SEvf2D8XRO3XCJlzQCm/m24xPmW9SzqG/ankFc3WIaZshwVN1WdaIgLCNTVg1AQZxavSUUdn8ejS8J9f8FRBREPqYetl2DMBBxl8lUw5F1W9ZIBVmSYkqKIcmaVEGSvKRaawj5wt5gNDWJ+0As4i6TMIMvykEmRaaj6BR0FUTKiiXKpijrYkUrSagkqWJMWVKDsCbkdgq9wVg3qY4djsVgUYblZrbfPPkutYL0q9elsloU5YRSjO8fC5lcvtsbIJ0gw4a1aCb3wrrA9ffKAgOORPVIlI9KQKVYkgDPD4WtzM55dwA5VnTC823QhP9nVA5L8mGpEiMdFSXX48bts25fhlPTuFQxaMKD8duNJ0tP1ngogjGBSxPjzll3wHWapei2YjgKHILBd/1XXKBR0aiE7DKyRBU/jhclrVhGRRGyqcTIHuTxVTZ//nG43LLpIOyomKnYhZl/xoUbdVpBXCoh8jhekg1+4gkVjl9tCJmd3W5/DJcDYbgoroY9jfjI8mHmH3H5dtcPcQluJbLgbgJyzHE9ErYL+/3RhUF8wwYCgwamA3UIot9XFhgAyYE7D8cIXxGgmbTR+iDkd98OxzPLCS1Wxew4pmaxGkz4bWWBAZrlA7rlGQD/Rlir3REK++9G08+2W+d4QCMhV3i3+oZn8wcmDTl2gG2fQ9z2SUd4/eaXyeXCCZqcEGgBNGjFEV5Tv8nf4daJ2wAst44ZUDOdKqYJsZF42GJR+4Ow9/b9dHbFwug/VKHbSnCCCNTJO2jQtP0m8ZpczWpcZ4fYDkzim5iZmLYgj/sH76fza/c4cqttxonVVehC3XKrrTjYdkLwRvEOIrDbXMqNBgkgiTp24c+g6aTRiLjx5u7X/niW0BvPe1CPoAFc9jkQnwP80Wj2ERjOuoOL8/6k0x2fng1OOr32abd9ch61O1F0KqQ2M6nNXEw2tZU0cql0dlmnsxub2Y2t3JLN3EaaP335U+ZFauvZj+n15xvf//Bybf3F2tqzp0/XAWFxe3d1e7+4vYc6aXx+1E2C11++JlwBt18XN/eL67v54svs083F7Gpy8WkyncFvezicDIaTfwBi5Z9t02GZKAAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAMAAABWWYYKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURTw/OTw/Oj0/PD4/PTxAOTxAOj1BOz5BPUBAPkBBP0FBQEFCQUNDQkNDQ0JCREJDRU5OT05PUE9QUlBRUlFRVFJUWFVXXVNWZlpbYGJiZmtrbG1tbmdrc2lsd29vcGtteXV2dnl5enx8fX+AgH+IhoGBgYKDhoCEhIGEhYKEhoOEh4CGhYGGhoKGh4SEhoSEh4SGh4OGjoSFiIWFiYWGiYWGioeHi4eHjICIhoGIh4GIiIOIioGLiIKLiYKLioOKi4eIioWJjIeIjoWLjYeLj4aPjIaOjYePjoiIiomJi4iKi4iJj4iKjImKjYqKjoyMjoyOj4eJkoiKkIiKk4qLlIiPkIuPk4uMlIyNlYSQi4aQjIeRjomTj4iVjomVj4qTkYuXko2RlY+Rl4yUlI+Vl5CRmpCSmJGTmpKTm5KTnJGVmZOUnJOUnZOWnJSXnJWYnpeZn5aXoZaYoZiaoZiaoqqsrautrqqur62wsa60tLOztbS0tbS1trS1t7W2uLO5t7e4ubi5urm5vLm6vLy8vby9vr2+v76+wL6+wb/FwL/GwMDFwcHFw8DHwcHHw8PExcLGxcTExcbGxsXGx8TFyMXGyMbGycfHy8bIycfIysjJy8jKysnKy8jJzcnKzMnKzczMzczNzs3Nz83Ozs3Oz8vL0M7P0M7P0c3O09TXz9TYz9DR0tHS0tHS09LS1NLT1dPU1dTW0NbX0dfX09TY0NXZ0dbZ09jY1NjY1dnZ1tra19nZ2dvb2Nvb2dvb2tra29rb3Nvc29zc3d3e3+Hh4eHh4uHi4+Tk5eTk5+bm5urq6urq6/Pz8////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDTYekAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAABsElEQVQoU2NQPb0aCNasWbN27dp169ZtQIBjDMpgudVQqXXrkeWUTkGlAsWhIHjDhvUgcJRB8eSCBQsXLlqyRPwsFIgvX7YMiJYdZlA4PnXq1BkzDGG6xM+Kz5kzCwQOMMgdbmlpbW1D6Dor3gEC7R0bGKQPNTQ0NDYiyzWDQFPTagap/VVV1TW14mfOgEwFkmfE6+rqaoFgMYPwJAcHD09f8VOnxAP8QeQpcT9fHx8fL58KBoF+NU09fRPx48fFPRxA5HFxAwMdTR1NzTIGwYlaWvpGJuJHjoDMBJJHxHV1NTXU1TVKGYSmGBubmpmLH4ICcXEZXR1tDW1toJzINCcnJ+8g8d1QIO5obaVraaGjYlnOIDo9JCQ8PEIe5ndZF2d7W1sbG1u7CgaxpampqZmZOTk52dkZ6WlJiWGh7m6uUZFR0ZUMEisKi4qKSkpKiouLC/LzcrNSkuNj4uJi4xLqGSRPzAWC+UAwb87smTOmTp7Q093Z2dXV2zeBgZ8PAnh5eXi4ubk4OZiZGBkZWFhY2dgZDoDB/v0H9+3ds2vXzh3bN2/auHHjylVbtm4DADma44ANPgZaAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3Ahover%2C%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEcElEQVQ4T62SWVCaVxiG/6te9KZpOjGZqok2Lrj+uMUlTpPptL3ptL3oTDrTTDKtrYlo61JxwV3BuOFOjGgVLW4sigrKoijGolbhBwREiKiIWAXFGOtS7XaENuNF6fSi77zzzTfPme8935k50Od19AXTi6659R6JiY5sMJGtPqW5X2npV+9wNNbhReBdrnaXo31uN+iBARzSWNlq66Bym6U0MxEzTbbRI92Y0Fuge/V9/3PiZ49ZjhKziS2f3Hnwj84htjjc8dN61rxxt2V6hTJjaJ81UiWmTmSDpthizFtA1h8OBI561TtMpYWmMHcjP3VITNTZNZAwpt2E7tSyEMNOw9hSo2ipeWK5RbxKmTakPmp0tJ39GlC75eYu6SZ1dr1t2tg6tdo0qSdPLPFVm9DHlYwp/VbZsKqcqyYKNFUjuvrxZ/++nT2xeXqN/MNqw8RK/fhS9aiuWrBYzlP3SY3QR0T6U90mvl9BGFCWDKlKhxcr+dr/ktgwuUIS6WuF+kqBroy7WDakJgwq6bMG6IMK2phmI4suzWbI8ljyggEVgaMGifs2nX/7S2LnVWNLxBFdGU9H4CwUDqoKWIpspqxDvAwFpZNruPNX4ijOCd9fTeq4jqWhcL1gwGwTaG6WjUaXC88TOw8v5gXjh+G8QR8c0yONfi2xAyR8QRZCMLaxgi1/Lab5YmzrJUzbm4kdblgaGDDZBJoQAj+0WHCe2DlcMOSby/bOZLml9jgndTnFUV6Pbb1L4kNobCORI7/w5XcXYymX49udU7rcMhhgwGDT+Ve/JHYeUMzzLeB4ZYFEmktS1xVMG0i4SxKAVzdVDs+/8aD1MqbdJbnTFcd0f8QBA3oHst9xG1uOejKOIvK9CWyPTNbVlG7Xr6lOmLb7DaNQcBq5jqd0SaBeS+p0y2S644c8anlgRutA4Oh6n8S7ewbVOun3WORXwfPJH/TK6HVP7nZNpMY0iaCQdHKDQP1Wco9nRq8PnoOqGvEli97JqHL0w28X1qH4Cv8BmR9dgm6fQpNEAWU8/3y2T1qvVyodQxFDoelksnAxEMeCi4aDqoTBjZNBnZKgATl6ZCFQpPUTP/Od0/lIz6rdgMAibYhwIWRoPowhC6f8GF4/fqNUEJo/GJjNSqbOQFE5lObJlfBCQWT5WBRZHNUhjWArI4S6cPFyqNSAVhlhjQleNJ1VmwG5gRgip1ciJ5be5i7cYihutc5F1z2NKuFHFHHTGXLow7Yp+vLBE/UWWW95vGYlmvfTdg9uHhx5Hh+7nJ5c+vXkwm+nr/5++srfBj0gTqcnrr8cex4eRe8dZFheVK8/J61YSJqtYrkVeq+W/X7DSFgayTcmNwBTBKeUwOkVcFY1nFcDF9QF4kn+BJJ/sa3aGkAAPzvNqUZnVMLflgTG4wO+yve9jwtLrX+3jgvVyLbKkW2CzJqH7OGQfazs5yTZQQJyGC87wiB/+aGtj5MePbTVOOkhBjnASPa/ke6lSK1pkm3c3GbunBE/u1o6u/wn4EzJPzPchgUAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3Aactive%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEa0lEQVQ4T2PIn7vl1I2H/WsOTlh3cPKGQ9M2HZ2x+eisbSfm7jg1b+fphbvPANGi3WehaM/ZRUC0+yxQcP6u0/N2npqz/QRQPVDX5I2HgSZsPnGVIWvuViqbmDobp4lF9f3BYWlYUXFDP043JszcfPDy3YZFO5qW7Gxdtqtj+Z6ulft61x7oX3cIaNZ/HAAoNXnDkYnrDvetPdi1al/Hir2ty3YDTVh54DxD1NSNO8/ezJ+2vnD6hpKZm8rnbK6ctzWltA2X6yDWAMmWZXsal+ysW7ijav7WijlbSmdtBpoADH2G0InrNh2/Ete5NLFreUrvyvT+VVmT1uB3HcTEktmbi2dsAjole/Ka9AmrgXoTu1ZMWn+IIWTC2o1HL8e0LYpvX5LYtSylZ0X6hFXEmJg/a1PetA3Zk9dmTFiV0rsCqDe+fenEtQcY/LtWrt57JrB0SlDZ1JDKaWH1c8NbFwBN/AwGyH6Hi0DEoyeujO5ZGtm2MKJ+bljNrJDK6cHlU7sWbmPQz2jtnL6MW8ONR9OTzzBAwDpS0C0JqOEVGAAZwsXNwiUtyCIQcbGwfHHfLDHHeBGLMCHDQD5dX14tr8i8JgadlIa2KYtZFO3ZlJw4tLy4TIO5HWKAGp6CAZDBm1fPm9+ALAIRFwjMEnRPAboA6A4eLS8ONTd2ZefQzFoGndSmtqlLWJUc2VVcOPV8uazCucFufAgGyL6Gi0DEBcILBHwyBBzi+EyDeXR8ONXdOVRcQrPqGHRTm9unLWNXdefU8eG2COdxS+EJyQdquIsDQOwwTy3mz6wXiCoV8M3kBxpqHMyj7cOp4Rme08ygm9LcNXMlj5Yvr0kYn2MSv38ef1wVUM9NHAAoxTd9tkDnFKHKbuHUeuHQEmH3NCGrGH6DIF4d/6j8NpCJPbPXChiFCdomCntlC0dWCue2WWZW4Erh5jWNQkuWCs9cINI+Xay4Wyy+Xsy/UNQpTdg8RtgoLLa4h0Evubl//kZRqwRR1yzx4DLx5FbxqkniExaILV4pumGD8P4dQid2CZ3aC0HCJ3YDRUQ3bhBftlpiyiKphhnS2V3SETVS3gUS9mnilgmJFZMYDDM7+5bskHTMlPIplo5slMnvl2mbIz1npdS6jZJ7dkqcOSh+6YjYtaMQBGQDRST37pJev0l2wRr57oXy5VPl49vlAypl3fKk7TNSGuYwuE3eufTa656dZ3qPXOq6eLvl7uO8569M3r9X+PpZ8uc34d8/+P/+5Pr7C4LY/v0Gkvx/fgr/+i717Yvih4+mL1/n33/aeuVe16lr3Qcv1R24wxC+/KRd51rNxCY5/1yl+FqNwl6txlk6fUt1ZqzVmrdRffFWleXbFVbtVFi5U37lTsWVO5WXb1dbtFVz3iatGeu1JqzWaluqXrVAJW+mbNJkzeLl4WuvMky98q7v8oeOy5+aLn2pufit/OK3wovfc8//yLnwI+v8TwjKuIDOyL7wA6gGqLL84negLqBeoAn9lz9Mu/IeAMWpR92z3Hb3AAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3A-moz-window-inactive%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAMAAABWWYYKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURVNWZmRlaGRlaWVmaWZnamdna2hoamhoa2lpbHN1f3t7f3R3gXV5gnd6hH19gH9/gX+Agn+Ag4CBg4CCg4CChIGChZeZnpiZnpianpqan5ucn5mboJqcoJucoZudopueopydoJycoZ2dop2eoZ6fop2eo52fpJ+gop6go5+gpJ6gpZ+hpqCgo6CgpKGhpaGipKKipaGipqGip6KkpqKkp6GjqKKkqKKkqaKlqqOmqKOmqaKmqqOmq6SlqKSlqaSmqKSmqaSmqqSnq6SnrKWoq6aorKWoraaprqeqrKeqraaqrqeqr6iprKiqramqrqiqr6qsr6ersKirsKmssKuusa6usq+ws66wtK+xtbCxs7CxtLGytLKytbKytrGzt7S0trS0t7K0uLS2ubS3ura4vLe5vbi6vbq6vri8vri8v7y8v729wL6/wb6/wr7Awr/Aw8DAw8DAxMHCxcTEx9nZ2d3d3eHh4eXl5erq6vPz8////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTgHqwAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAABj0lEQVQoU03Q+1vSUBzH8Y86M7WLmAoEGcQlm6FswhmYjJ25YYJCcVFDpxSlpWzgJW5/vWc8M3v/8N0Pr+d7dp6DxXY6IRIiKVTT94vFymN/sGClNxIkTTXtM6MvVZbDv0e2kVY0/RmcnjMrl7+WzvHKIonEpqrvYuiEERUKv+BiRqj2bwtDMCoUdnI/MWdliEz1x60hyiWb9CYzklG03P9Wyud3cttqEy4zm1X0IgYD+ypsDlBkS9vq1g/2P0WhzPp91Cr27COf09Wt1KfvmLcUqjLr9VCt2rMHXaOplCSNTKbaPrpd+0w2u6CbkpQUxVPMm7Isq3v46wTMkmRSWOX5I8y1iJiRKe6cIAoCz/Mr0eghXl7F19bEzOzDi03HPkRYb5ff1PDiMhpZicUFQYgL8fVYJBwKBP1+v8/nq2Dm4l0wGAp/tHsfDgZee70ej8ftXloqYebWME4M46zRaJwZhnFcr387qLEODut4OjXJcdyTKTuOm5gYe2h8HDc313ajT6fTsUyz1TJNi9W+B4ppe7qJG0ieAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%26lt%3B/%26gt%3B%0A%20%20%20%20.toString%28%29%0A%20%20%20%20.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0A%0Afunction%20sheet%28cssStr%2C%20removeFlag%29%20%7B%0A%20%20%20%20var%20cc%20%3D%20Components.classes%3B%0A%20%20%20%20var%20sss%20%3D%20cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%20%20%20%20var%20ios%20%3D%20cc%5B%22@mozilla.org/network/io-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIIOService%29%3B%0A%20%20%20%20var%20data%20%3D%20%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28cssStr%29%3B%0A%20%20%20%20var%20uri%20%3D%20ios.newURI%28data%2C%20null%2C%20null%29%3B%0A%20%20%20%20if%28sss.sheetRegistered%28uri%2C%20sss.USER_SHEET%29%29%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%20%20%20%20if%28removeFlag%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%20%20%20%20window%5BsId%5D%20%3D%20cssStr%3B%0A%7D%0Aif%28%21%28sId%20in%20window%29%29%0A%20%20%20%20sheet%28cssStr%29%3B%0Aelse%20if%28window%5BsId%5D%20%21%3D%20cssStr%29%20%7B%0A%20%20%20%20sheet%28window%5BsId%5D%2C%20true%29%3B%0A%20%20%20%20sheet%28cssStr%29%3B%0A%7D%20%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%28window.windowState%20%3D%3D%201%29%0Awindow.restore%28%29%3B%0Aelse%20if%28window.windowState%20%3D%3D%203%29%0Awindow.maximize%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код

Выделить код

Код:

if(window.windowState == 1)
window.restore();
else if(window.windowState == 3)
window.maximize();

Инициализация

Выделить код

Код:

var sId = "__customButtonsStyle__" + this.id; // Unique style "id"
var cssStr = <><![CDATA[
                %button% {
            list-style-image: url("1pic") !important;
            -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;

                }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;


        }
        %button%:active {
            list-style-image: url("3pic") !important;

        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;

                }
                :root[sizemode="maximized"] %button% {
                        list-style-image: url("5pic") !important;
                }
                :root[sizemode="maximized"] %button%:hover, :root[sizemode="maximized"] %button%:-moz-window-inactive:hover {
                        list-style-image: url("6pic) !important;
                }
                :root[sizemode="maximized"] %button%:active {
                        list-style-image: url("7pic") !important;
                }
                :root[sizemode="maximized"] %button%:-moz-window-inactive {
                        list-style-image: url("8pic") !important;
                }
    ]]></>
    .toString()
    .replace(/%button%/g, "#" + this.id);

function sheet(cssStr, removeFlag) {
    var cc = Components.classes;
    var sss = cc["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    var ios = cc["@mozilla.org/network/io-service;1"]
        .getService(Components.interfaces.nsIIOService);
    var data = "data:text/css," + encodeURIComponent(cssStr);
    var uri = ios.newURI(data, null, null);
    if(sss.sheetRegistered(uri, sss.USER_SHEET))
        sss.unregisterSheet(uri, sss.USER_SHEET);
    if(removeFlag)
        return;
    sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
    window[sId] = cssStr;
}
if(!(sId in window))
    sheet(cssStr);
else if(window[sId] != cssStr) {
    sheet(window[sId], true);
    sheet(cssStr);
} 




Закрыть Окно/Firefox (ЛКМ/СКМ) (Firefox)
ЛКМ Закрывает Окно
СКМ Закрывает Firefox полностью
скрытый текст
Установка

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u041E%u043A%u043D%u043E%5CFirefox%20%28%u041B%u041A%u041C%5C%u0421%u041A%u041C%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Ethis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20window.close%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20goQuitApplication%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26amp%3B%26amp%3B%20%21event.ctrlKey%20%26amp%3B%26amp%3B%20%21event.shiftKey%20%26amp%3B%26amp%3B%20%21event.altKey%20%26amp%3B%26amp%3B%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%7D%3B%0Avar%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A%09%09%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADEAAAATCAYAAAA5+OUhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAIQElEQVRIS43X6VNU6RUGcD9lmapMapJUZhITRVYF1ERFNpFFM6PSsssiitFRNiMOso0LUzZMVQYXxhUclX0TAUVAEUTa7oZuUNmhN5pGQJDJJ/+DJ8+9tyGMmlS66lfnvOe+933v6YZ7u5ddSzyAmZc90FeXQF9VAhPjeI3EQpOiYsxYzTK+Ed3Gj/SvRbeYv6OaY6sfl+RLa/Osz4mKMEuvaZqmyCIqhplMVsaqYugqi/FK1Yno7b6YsExi2dUjcZjp1UBfdnORkfl4ueAGLDRJUzRTIZmrKMQbRsH8okLmS5Qz/z/MlRdgjvMEszRNU/SqrBAWMpOJjKU/wEA6K0vnE+zx3yo1cflgDKa0XRi5dU2kIz0Zi67BRONFV2FhnCy+gimaoWmaLbmCOdFlzH9IMetLzDF/85PaJcwWCy7jtaDoMqZpqugK95NM3L4KExnJcPMqdDRGw2Rpb0WEr5fUxKV9YZhUP8PA9QsYohFBwQXoCs5DT8bC8xgnE1msphinC87hNc3SnNWl1HSER8YvEsbCsffraTwvD7PX8zBDU6JzmKQJzjeTiXsLDKS7fh6jNCy4dh6DZHrUjLAt7lIT30fuhkXRjr78b9FPA/m5opHvJTorI6OJdTOjJT8Hr2iKpvPli4QGlr6Ecf6xr8Sm3q1PXTyLBZPMJ8h8UQ7jxRyRnmvruN8oDdPQxVz0W/UxGpvuIcRjo9TEuaDtMLW1oFueBQ31UC+9yM1CX04m+nMzMcQ4kpuBUdKTITcd42QWpcFidSEp+YMX/G4DwryJnBMwy0/AJE+DkfRWY/J0jNCQPAOD1M+9X9KLs7w20pLmbCZG66oh2+CKiQk2kbfLF4bWB1CdThV1kYZ6slPxPPs4np85jn4aZD6cnYKRb1IwRgYyWo0zLriQkPheIwtNCJ/I+fhEjHMdU/YxGM4I/gE9jTIXDLI+dCYFA9R3OgW93LuHtKdS0U1qUtLQnQoErl8jNfHdF97QtTSgMyMZClJmHIWaurOOQpuVhB56QX1fJ2KAhk4mYOTrBOhIb2VgNAp4zHgyEeeOSP8Xb9++XSSMzx2O57xEaW4W18iKF41lxmOYcZi1fkFmAl5mJuIFaTOToKHudF4XKUlBg5Ul2OnqCPOEBctOrvgY2sJ8lHi5oJwqvF1Q4+2Ku1TPvNHHBU0+znjk44S2rU5o93XEU1KSeqsDugW+AkdoRE7I3R0oNjE/P79IGAt1DddY0O3jiC5SkoI6uUc7jwt7PdyyGk1bnHGf+wvXcYfXU02VVOHlCoX8FDw/+YXURNbyX6L72jnc3mSPEjd7lG52QAXVUO1mezR4OKDR3Q7N7qvQ6mGDVs+VeEIKUnqugIrUopWinF07xAZmZmbeI9Rzdu1EF9dZoHK3gYKestZBjz1WoYV7Nbnbcl/u787rcHNAlZsjKqiMSjfxjczOhPuvf7bQxEdiE0WcWCJM2szJ7o6o8XDEHaqnRg97NHvaotXLFo+9VuGJtw066RmpvNmI90qRPFBqwGKxLPrQWB64E2quJVCRgjqpw8uO69uhxdMeTdyzkW9gg4cTaqnaYzUq3VejnMrc1qDzG6GJn0tNZKz4FboKL6LYZw1KfJ1R7ss/Kbrj54o6f1fco0Zq9nNBq58zHlN7ABcJcIJimxOU2xzIESoSLthkMi0S3/lg2Qfraq4hUAU4QxHggqfcoyPAleuvxSNq9l+LB/7r0EB1VOu3DlW+61BJZfTs21Nw/81H1iZsP0H37Uso+2ITyne4oWrHZtTscMddqqNGagrcjGbZRjySbUCb7K/oCPoLnpIiaD2UVipGeXjwTx528vAQqIM2sh7yfn33RqhJRQrRJnTINqFd5oZWaqHmQA807vREA9Xt9EIt1VAVKfNy4Pm7j9kE704nHT6Ftvw6KiP8UB3hjzsRAaij+5HbcD9qG5qjtuNhdABao/3RFuWHjr2+eLp3K5R7vaGM9YY61gvdpGGuid0C7T6K9bHayijR8ByJz2LezbE61lek2BsARWwA19+O9ujteBzDfWP+hpboz/GAGqM+R/2ez1EniNkF9bUL8Pn9b6Vb7EmXlXhRU4T6g8FoOBSCe1+G4v6XYWg+HIqHh8PQSm3xoehICEFnQjCUCTIokwLRncw7TfIuaI7uQq8oUPT8qIx2L+pN3g1BjzUujKVaELRHKTkY6iRKDoEqMRzPqDMpHE8SItB2ZA8eWj04HAlBy7FDUBbdhMxuhfRJZG+wR39DOZqO7UdTShxaUvbj0fE4tNGT1Dh0ph6A4kQcVGlx6ErbB016LLQZe/E8K4ai0ZcVyXu7IEo0wNqC/sxo3vP/mxjO28tnkGA/erPi+Ew6AG3639ElyDjIZ8IhPEs7hKeph9AmSI9Hx+mv0HPjMoq+y8OpEJn0SfzT0xnmXiX6q29ikN/rh2iYvwsEo/ytMEa6WrpzC6a7N2C8W4hxmrhbgIm6AlisJusKIeHXd877XyZ5fLLuB7opqb8FS/1tmEVFGCdDXSmMtaUw0NiChmooq0pxI0cOmYsjtNpeLBNeB+w/RdCqBZ8h2Jbs/oBQuz8i1H45whyWI9zxTwhfvQIRtGcNOdsg0sUG0S6rEO1qa2WHGFc75kus/U8eyXqUcEys2YsirfawHuFih3BnW4StsUXoahuEULDTSgQ5roDM4c8I5LXI6NB6e+TtkaGvb0BqQHgZTIMwGIegFxiGoTOMYExvpRvFqGBshIaZD2FEN8g4yDmDnDvI86wMwvmkl+gEnD9GQtTrh2Hg+kbjCEzGUd6GdRgfN5ARZvM4mSW87y+YYC6ZfM9iA0z+DabzkVo1tCngAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-moz-box-shadow%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20none%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADEAAAATCAYAAAA5+OUhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAIeUlEQVRIS9WWaVRU9xnGZwYYljKBiIqForRWQSUq2AjuhihGRQj7NgPODNuwyoyyCgwCwyIIOEBQARURCy5YBAVBEELqVrM07ck59sS2xy4maoJW/fr0fWeAUuKnfMuc85z//b/3vs/ze+/MPXMFh+Uh+Or2MM5XZ+MCqbsmBz11eejT56O/oRBDTUUYPlaM0WYdxlvLcet0Je62VeEPZ2twn/T5b4/ii049/tilx5dd9dMrH8/cT52fXeNe9mAv9mRvzuAszuRsZmAWZmI2Zvx08BLeW/sOvhkfhKBGHvyTHWKLxzJ8OzYAQZ088Cc7xKaVi/F09BoE+r0B+NNYP9qLktFB6jyUigul6bhcloErFRpcPXwA/UeyMFSbgxH9QYw1FmC8SYtbxw/hzoli3GvR4X6rDp+eLIPugAZBofHT4v0b6/s1+OxUueEc97IHe7Ene3MGZ3EmZzNDD7EwE7Mx470rHVjn6oRnI30Q1Md8iM+HetCSGYNTpLZsOc7mKtCVH4eLBfG4XKTCleIkXNOl4np5Om5UqnGzSoOxmkyM12bhlj4Ht/W5uFOfZ4Cf+eF9yb60N9bvNhw09HAve7AXe7I3ZwxQFmdyNjMwCzMxGzN+cvEk1i62x7NhGkIv3YN7fZ2oj/NDQ7wfjiX6oyUpAKdTg9CeHoJzGeE4r4nApUwpenKi0Zcnx7V8JQa1cRgqisdIcSJulqgwWpqEoqSENwLPHkxL143pkg093Mse7MWe7M0ZnMWZnM0M7WkhBiZmY8aRMw1wd7DFd8O9EByN8sWdng7UxOxA3d4daJDvRFPsbrTE78FplT/akwNwjprP00DdmnD0HIhCb5YM/Tkx6M/di6F8BW4UKDFcGIsRgihMiP3BIFND8DejTYybvpZ7uJc92Is92ZszOKuLbyLfTGI4zTeXmJiNGW+cqsMqewm+G6EhasN34vfdZ1AR7o3DEd6oiXwfR2Xb0URDNSt24iQ1tcXtQUeCH7rI7GJqMC6nh+IK3Z1edTj6D0RiIDMK17OkGMyW0SpDQazcMMjExMS0eM914zVT10oNvezRq44weLI3Z3DWWcrkbGZo5ptLTMzGjAPNR/DOfGvjEAfWL8fZqjLsmCPGbjsxAu3MEUaSkRRzzZFASp0rRgatWaS8eeYotDfHIQdzlDiao9zJApULLXB4kQWqnI1K3rrZMMTjx4+nxXuu8/mpa3nlXvYodrQgTwvytqAMC2SRMkgpkwxyWqWTbMyoz0iCo5nQ+HPSeLqgraIE71kLsZ3kSwokhZNkEiEUpERrAVJIalKmRIA8GwEK5gigtROgZJ4AuvkClNkLUL5AANXGDYYBHj169ANxXbVpw/S13MO97FFoJyRPIXkLKUMINSmFlDDJIKU1jJgCJhlrUhPwc1MBPdg8hJcr2ipL4S0RwYfkSwoihZOi3xJBSUqcNFS/RQG2FERhBfOE0M4XotRBiDJHIcp/IYRqi3GAhw8fTutNe76uwsnYw70l5MFe7JlL3pm2IqhtREih7ASSgiQjMVPgJGNtWgIc6JswDKFe54r2Kh222ZriA9Ket00RRIokRc8xRSxJZWeCFHsTqB1MkOVkgtxFIhQsFkH7awJwoUFcCWa50DDAgwcPpmW489uMg82ul68QUY+IekXkwV4m5MnexgzO4sxEylYSA7NETLIxY92+RDiIRcYh9q2nIarL4EPPw07Sh6RgegYi7cWIcRAj1kkMlbMZ0habYb+rGbLdzJC70hQF7qYo8jBByVoRdJ4E5CWCatfG//uzU+3aRHW6CbTO/BPkffk6UzpnhlJPM/Iwg9bDjDzF5C1G1goxNC5iyuRsMZTEEE0szMRs/sSo1yTD0UKEpyNXIUilIc7VVGD3Aiv4OVghyMkKYc5WkC2xgtLVCgluVkhZbYmMNZbYv9YSuestkb/JAkVb6WH0NkfZdiuU+/wMFTusUfmBZHrl45n7qfOza9zLHsXeluRpiYMbjRmctY8ykymbGRTEwkxhi6wQ7GyDpjw1nK3N8GS0H4IkGqLzo0r4L5Mg0E2C0FUSyDwkUHhKEL9BguQtEqS/bw2NjzWyd1sj388a2oC3UBLyNnShc1AZMReHI+ehKmo+qqX20ysfz9xPnZ9d4172YC/2ZO98Pwmyd0koU4I0byND/HoJ5MQkJTbl5oVordbC02UBnnx8HYK0TSvQ3VKBYC8bhK23gXSzDeTeNojzsUXSLluk+9tCHWCDrFBbHIy0Q1H0PBTL7VEW54CKeEdUqRbiSPIi1KQ4ozb1l9MrH8/cT52fXeNe9mAv9mRvzuCszBBjdpqfLVQ7bZG4ay7Sg5egNl+GiiIN9sXFGIeoD9iAv3Y3o7s6DpeOxqK3KRaDLUqMtilwu0OB++f34otLMvy5JxIP+kLxdX8A/jboi3/c8MG/bm7BN2NeeDK+Bs9uueH720vx/O4ivLjnZFi/v+1iqD/9xAPffuxlOD9x51eTtTXUuw7/Ht2Kfw774O9Dvng4EIi/XA3DV1ei8OXlaHx2QY67nUqMt9NbwUl61WlVobsxDbqCdPhv8cLXvRcg4M+Z+GC0RPuiJmIbkn09ke67Fhr/d5Hp74HcQHccDHKHNng1ikNWQRe+EuURK+nrd6OfynLURi+jVxVXeg1wgV65FA1xS/FR/BKDGkm8r+e60gX1Chc0xi5F42StkWp6qtVGL0cNeVVJ3VAZtRK6iFUoDV8FbYg7CoNWIyfAHVnEovb7DdJ830W+1Bu1mcl4dO2icQD+TAxcwPO+c3j+uza8uNiC/3Qew8uOBrw8U4dXp6vx6mQFXjeX4fUJHV4fJ50opZVVQsfFP17Hqdcg8mE/9mVR1quWSbVW4mXbEbxoP4oX5xrxousYnl9qxUTPmf8NQDP8F0GYhkDc/8i7AAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%3D%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%0A%09.toString%28%29%0A%09.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%09%22data%3Atext/css%2C%22%0A%09+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%09var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%09if%28sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%09%09sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09if%28addFlag%29%0A%09%09sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.setSheet%28this._cssURI%2C%20false%29%3B%0A%7D%3B%20%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

this.onclick = function(event) {
    if(event.button == 0) {
        window.close();
    }
    else if(event.button == 1) {
        goQuitApplication();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        
    }
};
var cssStr = <![CDATA[
        %button% {
            list-style-image: url("1pic") !important;
                        -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;
                }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;
        }
        %button%:active {
            list-style-image: url("3pic") !important;
        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;
                }
    ]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.USER_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.USER_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);
}
this.setSheet(cssURI, true);
this.onDestroy = function() {
    this.setSheet(this._cssURI, false);
}; 


Код кнопок был взят с предыдущей страницы этого топика + часть кода была доработана Infocatcher-ом, а картинки были сделаны мной (украдены скриншотами из винды).

Кнопка сокрытия/показа нативного Windows тайтлаба находится тут.

Вставка символа (Firefox 1 — Firefox 19). Более новая версия кнопки — здесь.
Авторы: Anton, Infocatcher.
Позволяет выбирать различные специальные символы из выпадающего списка и вставлять их в любые поля ввода (обсуждение кнопки).

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABBklEQVRIie3TvyvFURzG8RfXpMggmZAyqTswGYWFbP4AkkEWkc2MktWsDCaDQRlMVovFIIuIgRSKQX4N389wh28393zHe586nfo8n/O8zzmdQ0N1qxZ0/aOvN3pr1i6u0F2lZwAP2E4BlPGMS4zjGO94xSEmcYcb9KQAYBgv+MU3znGBn6jdoz81HNrwiCcMVdRHZae5RqkIYE620/kcbz28sSKAnQjpy/FGwlsuAtiIkMEcbyK8xSKA6QjZzPH2wysXAZRwiy+soB2d2IrwsyLhsBRBHzFXjrcAz6SGz8re+x46sIYj2SdbkD3hU3zKrrJmreIAzVV6WnGCqRQANKUubKjO9AcmPDqZdHOMswAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.handleMenuCommand%28event%29%22%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A4%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A6%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A7%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A9%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AB%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%BB%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AC%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AE%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B0%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B1%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B5%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B6%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2014%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2018%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2019%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201C%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201D%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2022%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2030%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2039%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u203A%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2122%22/%3E%0A%3C/menupopup%3E%3B%0A%0Amenu%20%3D%20custombuttonsUtils.%20makeXML%20%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20value%20%3D%20menu.%20firstChild.%20getAttribute%20%28%22value%22%29%3B%0A%0Athis.%20makePNG%20%3D%20function%20%28text%2C%20height%29%0A%7B%0A%20%20%20%20var%20h%20%3D%20height%3B%0A%20%20%20%20var%20cw%20%3D%2024%2C%20ch%20%3D%2024%3B%0A%20%20%20%20var%20canvas%20%3D%20%3Ccanvas%20xmlns%3D%22http%3A//www.w3.org/1999/xhtml%22%20width%3D%7Bcw%7D%20height%3D%7Bch%7D%20style%3D%22display%3Anone%3B%22%3E%3C/canvas%3E%3B%0A%20%20%20%20cw%20-%3D%202%3B%0A%20%20%20%20ch%20-%3D%202%3B%0A%20%20%20%20canvas%20%3D%20custombuttonsUtils.%20makeXML%20%28canvas%29%3B%0A%20%20%20%20this.%20appendChild%20%28canvas%29%3B%0A%20%20%20%20var%20ctxt%20%3D%20canvas.%20getContext%20%28%222d%22%29%3B%0A%20%20%20%20ctxt.%20clearRect%20%280%2C%200%2C%20cw%2C%20ch%29%3B%0A%20%20%20%20ctxt.%20font%20%3D%20h%20+%20%22pt%20times%20bold%22%0A%20%20%20%20var%20m%20%3D%20ctxt.%20measureText%20%28text%29%3B%0A%20%20%20%20m%20%3D%20%28cw%20-%20m.%20width%29%20/%202.0%3B%0A%20%20%20%20h%20%3D%20ch%20-%20%28ch%20-%20h%29%20/%202.0%3B%0A%20%20%20%20ctxt.%20fillText%20%28text%2C%20m%2C%20h%29%3B%0A%20%20%20%20var%20uri%20%3D%20canvas.%20toDataURL%20%28%22image/png%22%2C%20%22%22%29%3B%0A%20%20%20%20this.%20removeChild%20%28canvas%29%3B%0A%20%20%20%20return%20uri%3B%0A%7D%3B%0A%0Athis.%20image%20%3D%20this.%20makePNG%20%28this.%20value%2C%2016%29%3B%0A%0Avar%20mi%2C%20val%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20menu.%20childNodes.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20mi%20%3D%20menu.%20childNodes%20%5Bi%5D%3B%0A%20%20%20%20val%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20val%20%3D%20this.%20makePNG%20%28val%2C%2012%29%3B%0A%20%20%20%20mi.%20setAttribute%20%28%22image%22%2C%20val%29%3B%0A%7D%0A%0Athis.%20insertText%20%3D%20function%20%28text%29%0A%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.%20commandDispatcher.%20getControllerForCommand%20%28command%29%3B%0A%20%20%20%20if%20%28controller%20%26%26%20controller.%20isCommandEnabled%20%28command%29%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20controller%20%3D%20controller.%20QueryInterface%20%28Components.%20interfaces.%20nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.%20classes%20%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.%20setStringValue%20%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20%20%20%20%20controller.%20doCommandWithParams%20%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Athis.%20handleMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20var%20mi%20%3D%20event.%20originalTarget%3B%0A%20%20%20%20var%20text%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20this.%20image%20%3D%20this.%20makePNG%20%28text%2C%2016%29%3B%0A%20%20%20%20this.%20value%20%3D%20text%3B%0A%20%20%20%20this.%20insertText%20%28text%29%3B%0A%7D%3B%0A%0Athis.%20type%20%3D%20%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.%20insertText%20%28this.%20value%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              oncommand="this.parentNode.handleMenuCommand(event)">
    <toolbarbutton value="¤"/>
    <toolbarbutton value="¦"/>
    <toolbarbutton value="§"/>
    <toolbarbutton value="©"/>
    <toolbarbutton value="«"/>
    <toolbarbutton value="»"/>
    <toolbarbutton value="¬"/>
    <toolbarbutton value="®"/>
    <toolbarbutton value="°"/>
    <toolbarbutton value="±"/>
    <toolbarbutton value="µ"/>
    <toolbarbutton value="¶"/>
    <toolbarbutton value="—"/>
    <toolbarbutton value="‘"/>
    <toolbarbutton value="’"/>
    <toolbarbutton value="“"/>
    <toolbarbutton value="”"/>
    <toolbarbutton value="•"/>
    <toolbarbutton value="‰"/>
    <toolbarbutton value="‹"/>
    <toolbarbutton value="›"/>
    <toolbarbutton value="™"/>
</menupopup>;

menu = custombuttonsUtils. makeXML (menu);
this. appendChild (menu);
this. value = menu. firstChild. getAttribute ("value");

this. makePNG = function (text, height)
{
    var h = height;
    var cw = 24, ch = 24;
    var canvas = <canvas xmlns="http://www.w3.org/1999/xhtml" width={cw} height={ch} style="display:none;"></canvas>;
    cw -= 2;
    ch -= 2;
    canvas = custombuttonsUtils. makeXML (canvas);
    this. appendChild (canvas);
    var ctxt = canvas. getContext ("2d");
    ctxt. clearRect (0, 0, cw, ch);
    ctxt. font = h + "pt times bold"
    var m = ctxt. measureText (text);
    m = (cw - m. width) / 2.0;
    h = ch - (ch - h) / 2.0;
    ctxt. fillText (text, m, h);
    var uri = canvas. toDataURL ("image/png", "");
    this. removeChild (canvas);
    return uri;
};

this. image = this. makePNG (this. value, 16);

var mi, val;
for (var i = 0; i < menu. childNodes. length; i++)
{
    mi = menu. childNodes [i];
    val = mi. getAttribute ("value");
    val = this. makePNG (val, 12);
    mi. setAttribute ("image", val);
}

this. insertText = function (text)
{
    var command = "cmd_insertText";
    var controller = document. commandDispatcher. getControllerForCommand (command);
    if (controller && controller. isCommandEnabled (command))
    {
            controller = controller. QueryInterface (Components. interfaces. nsICommandController);
        var params = Components. classes ["@mozilla.org/embedcomp/command-params;1"].
                 createInstance (Components. interfaces. nsICommandParams);
        params. setStringValue ("state_data", text);
        controller. doCommandWithParams (command, params);
    }
};

this. handleMenuCommand = function (event)
{
    event. stopPropagation ();
    var mi = event. originalTarget;
    var text = mi. getAttribute ("value");
    this. image = this. makePNG (text, 16);
    this. value = text;
    this. insertText (text);
};

this. type = "menu-button";

Код:

Выделить код

Код:

this. insertText (this. value);

GetChkView Addons(Firefox)
ЛКМ => Открыть базу дополнений в интернете (те https://addons.mozilla.org/ru/firefox/)
СКМ => Проверить обновление дополнений
(не работает в FF 7 )
ПКМ => Открыть установленные дополнения
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGetChkView%20Addons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhJQAaAPcAAAAAAAA7KAA/ND0+ACM5LAA5UjFSBztEJwpXQwxVWwVJZBRTfiFPXzdLVj5+W38dEnooB3oxAE5aBlpmFEdkKmhWAmdAI2Z2N3h4MkNCSEFbQkRXaExhdlptZ1N/cnNYR3FdXHlqSXB/VmZiYWZ2dnRyYypugTh7pUFvkVh1iFR8lmF7kj+1K1WTM06oMWmCGnqbJmy3NVKWR12Dbk6kQGSDRX+XQWyBcG+edGSxWH6nb367bXu7dUnKNmPENlnORWrRUnbDZ3TkXXrmZUmKl1aHi1yImk+Ot0uTokiQtleMoVyOs1WWrFictmODgmeOnXeHgnCLlH2RiGWVpGKas3iXpWq/hG2yn3Osg3OivVuaw12oymaqxmy41XapyHmxy3iz0XDBh3jDmH/K6pUWCoooE4A3AIk1GpYlAIQxLqkVAaktBJBTJ5ZQNpt7FoV2NZF2J71MHKZSLrNXJrhXNq5rFLRiKLloML13Ibt2PZNbUoxpSY1uXJ50W4l0YZ1qZ6l2SaJ+Xrt2RbN6cMQ6FstHCM1XFttXDNdaG99dI9xpFsllI8dmO8hxK8lyNddpJNVyJONZKOFlGOFmIOJ9Ncx6QNV/QoOcCouUJ5aNKJmKNauCKLykILGqNru6Lo+GQ42SXJqMTYWDboKDfpWNZp6PcpS6S4mvdqaMRKqTTaqVVrabS6GNdbqMar6TcbS0VLupebSwaY7fX4nJc47vdarKTaHkfdCpKNSsM+G7Ks2DS8mPX9CAQcyefdWyTtG0VsmuZ8ygfeGffOnGPOXSLv7XMd7KacPueubPRe3EW/bXRvvSU+7Ua+jwd4KYm5iKgYSds421iI2npo6zuaGhlaGxvre7xJDEhY3ri5LjhpronJv8i5jzlLb+mq7ioo7CzY7M24TG4I7W7o/U85jM4pDR5Zvf9KTY7dubgMCwjMS3lNa0m8yzqOqyieizo9LDnN3MrtfFtd3RuOjGvcXO08ndwdXOxN3cytvb29Tj0OXHxeHYyeXZ1fLMwwAAAAAAACH5BAEAAP8ALAAAAAAlABoAAAj/AP8JHEiwoMGDCBMehJZiRYoq1egpnHgQxRIv5M6ByZKiwSh7FBPGi2eNgwovX76UMzduY5QSIdSFPNirT4YNzpxJqwJO3BguVJyQAvZr1UyC8QQJ4vOMVSlRUr412dIlXJEDb5gxU5Xu6L91dihZquQozx5q0750WcuFAQEMxnytkkcRn8BgjRTpVbSIjR8oU7hsGaxlighNuJK9qytwF6S9eu+4gmKkSZITC44oufHp1jJY/Gbqerz3ka5AJKYQUaCggIkiGmINW6ZqX8h2vCA/ctSqxBMmSBIICIDAAYVXypShinfbkV5JhtBA+EDCiBIiV8SEscLDRidlw1DB/wspbNFeNGjOgEjB3gMWbdyw2cLEqViuVHQpopvzSBGiNWvQoccIHcyAgwxAbLONC7V4QgwyodwTkjtyLCKJJIUUYggjgFywQxBB0CIiLUDEcEkzoEhIUT9txHGhJIccsoYZEnTTzTYiDiEEELTEcEwN9cw0yBqJvOhfBAPM0kI2tAwxBBA/COFDDEFcM9M8Z8SByIWKPNIIHBMY0EKTQED5Q5lAzHLUIGWsEQkiiEyiCB6bZPICiVD2oCcLaXqlRxlkELKGhnW4kQkMspT5g54/nKmmnw+QoYYaaFRgSgtoxhBDo0DkkIOVXv0zSBpkkAGBBLOU6YILLbTgAhBBeDATTagC8cPOH2lYYICZrJ5yzas80FoQP/qwU4MMNNAggw75RCODDLMKG1I+0labUEAAOw%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u0430%u0437%u0443%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%0Afunction%20lbMouse%28%29%7B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22https%3A//addons.mozilla.org/ru/firefox/%22%29%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Afunction%20rbMouse%28%29%7B%0Atry%7B%20BrowserOpenAddonsMgr%28%29%3B%20%7D%20catch%28e%29%20%7B%20BrowserOpenExtensions%28%27extensions%27%29%3B%20%7D%0A%7D%3B%0A%0A//%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%0Afunction%20mbMouse%28%29%7B%0AcheckForUpdates%28%29%3B%0Avar%20win%20%3D%20BrowserOpenAddonsMgr%20%28%29%3B%0A%0Avar%20doc%20%3D%20win.%20document%3B%0Acmd%20%3D%20doc.%20getElementById%20%28%22extensions-view%22%29%3B%0Aif%20%28%21cmd%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22extensions-view%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20200%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd.%20doCommand%20%28%29%3B%0A%09cmd2%20%3D%20doc.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29%3B%0Aif%20%28%21cmd2%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20500%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd2.%20doCommand%20%28%29%3B%0A%7D%3B%0A%0Afunction%20BrowserOpenAddonsMgr%28aPane%29%0A%7B%0A%20%20const%20EMTYPE%20%3D%20%22Extension%3AManager%22%3B%0A%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20var%20theEM%20%3D%20wm.getMostRecentWindow%28EMTYPE%29%3B%0A%20%20if%20%28theEM%29%20%7B%0A%20%20%20%20theEM.focus%28%29%3B%0A%20%20%20%20return%20theEM%3B%0A%20%20%7D%0A%0A%20%20const%20EMURL%20%3D%20%22chrome%3A//mozapps/content/extensions/extensions.xul%22%3B%0A%20%20const%20EMFEATURES%20%3D%20%22chrome%2Cmenubar%2Cextra-chrome%2Ctoolbar%2Cdialog%3Dno%2Cresizable%22%3B%0A%20%20return%20window.openDialog%28EMURL%2C%20%22%22%2C%20EMFEATURES%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%20%5CnMiddle%20%3D%3E%20%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043D%u0430%u043B%u0438%u0447%u0438%u0435%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0439%20%5CnRight%20%20%20%3D%3E%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A/*%0Athis.setFlLDC%20%3D%20false%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0Athis.pause%20%3D%20function%20%28ms%29%7B%0Avar%20date%20%3D%20new%20Date%28%29%3B%0Avar%20curDate%20%3D%20null%3B%0Ado%20%7B%20curDate%20%3D%20new%20Date%28%29%3B%20%7D%0Awhile%28curDate-date%20%3C%20ms%29%3B%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0Athis.setFlLDC%20%3D%20true%3B%0Atry%7B%20BrowserOpenAddonsMgr%28%29%3B%20%7D%20catch%28e%29%20%7B%20BrowserOpenExtensions%28%27extensions%27%29%3B%20%7D%0Athis.pause%20%281000%29%3B%0Athis.setFlLDC%20%3D%20false%3B%0A%7D%3B%0A*/%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

/*Initialization Code*/

//Открыть базу дополнений в интернете
function lbMouse(){
getBrowser (). selectedTab = getBrowser (). addTab ("https://addons.mozilla.org/ru/firefox/")
};

//Открыть установленные дополнения
function rbMouse(){
try{ BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); }
};

//Проверить обновление дополнений
function mbMouse(){
checkForUpdates();
var win = BrowserOpenAddonsMgr ();

var doc = win. document;
cmd = doc. getElementById ("extensions-view");
if (!cmd)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("extensions-view"). doCommand (); }, 200); }, false);
else
    cmd. doCommand ();
    cmd2 = doc. getElementById ("cmd_checkUpdatesAll");
if (!cmd2)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("cmd_checkUpdatesAll"). doCommand (); }, 500); }, false);
else
    cmd2. doCommand ();
};

function BrowserOpenAddonsMgr(aPane)
{
  const EMTYPE = "Extension:Manager";
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var theEM = wm.getMostRecentWindow(EMTYPE);
  if (theEM) {
    theEM.focus();
    return theEM;
  }

  const EMURL = "chrome://mozapps/content/extensions/extensions.xul";
  const EMFEATURES = "chrome,menubar,extra-chrome,toolbar,dialog=no,resizable";
  return window.openDialog(EMURL, "", EMFEATURES);
};

this.tooltipText = "Left    => Дополнения в интернете \nMiddle => Проверить наличие обновлений \nRight   => Установленные дополнения";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

/*
this.setFlLDC = false;
this.setAttribute('onclick', 'gQuot(event, this)');
this.setAttribute('ondblclick', 'gQuot(event, this)');
this.pause = function (ms){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < ms);
};

//Открыть установленные дополнения
this.leftDclick = function(event) {
this.setFlLDC = true;
try{ BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); }
this.pause (1000);
this.setFlLDC = false;
};
*/

SaveSetOpenDocument(Firefox)
ЛКМ    => Сохранить как...
СКМ => Установить папку загрузки как текущую, те будет установлен путь который прописан в Настройках. За код спасибо  - Infocatcher
ПКМ   => Открыть файл
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESaveSetOpenDocument%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABetJREFUWIXNl31snWUZxn/3836cc9qe09Oztmu7taIsIkbQCMWZRQlsCDqd/4EmOoYImMWZkTACgUW2mIU5iX8IwYAsBCUxhBA0jGw4HAmJhSnCigtug5VlZ7W0sx3taft+P/7xvqfnq92ZRBLv5D3v1/M+13Vf9/XcTw58jDHxJutPD8nQ0WewlxqjPjbwt1nvuMaznpsenBXzlaVImNU3qzbs2RWGwTat4+fPFe79SODpi8GZNin0rQGxOXf29S+/PZp2V33zJ4SREShlPPjeC3dvbyAQhuG2X973HTPbYjP54SyfnTgOgfNfgQfZUT7sfI1892pEpTg3MU4YhHTlHO685VqmXct87OmD9wCNBLTWZntrir0vHWdi/N98veVZxJu5YPCwD0qfMOlYvgYkBi8eP0ZwzmXnW7+ipXCW6wcHKCvcQAAAEV49NMTK/j4mtwzT1pa9IHDt/Al39DbynVdUwN8bwVf95L/6W0qHhzk1fJTrrxyo+a7BhAJsvX0DYRTFA5RqeuAeXBxc97By9fNkc93oKOKW764jqsNrUEBEGH5/Cknuf7z1TjZ+/6YlM8/Zh+lP/5yOrsEF8NPvnqTktFNatp1HH9jNrp0PIAhvHJ/g6sv7zk8AAaUESRj8+uGHlwQP5w4wX/wFucJgTeah9PKZdS/Qnu9h7TXfZnLyLIiglKDRTRRAUCIxE8AwjEXBg9n9zJ/ZRK5QK3tAL5/8yj7yHb2180qsrq7FX6wEIEqQRILbNm9m4/durBmTsw8z0Lqb/LKrgHrZ76f0zjHgGABP/e4Zdu34KQKJAlIzV2MJiI1XLsGTjz9el/lLnDu5h1yhAn7m5AiRWsHn1x9oyPzaq69jdLSYlEChdbMSSLkEZTK1JSgVt5Dr3oRE40x9cIIzJ0cI6eOStQcbwGvnTUpQ97yBgKa2BBtv/cFCCVrNdxhoEdpXrGZ2usjpd/dTcvKUlt3H9FtHgCMNwJUSlE3YjIAGJZVV8NQTexfebbn1DlYNaNav/Q2TZ4bB7OeLGw7Snu9ZMvN119xAsXgqXl0i6LpG0NCItNYoVVkF5Zg8e4rnXzzNG0ccxmbW0HPVy3zhW38/L3h1iAiiBC1NTBjpeLBhxNyKxVMA+N4cf9j3GplMC9ls3J7Hx/91QeAQl1VdiAeixKXdPZ3cvOcv6KQlV8yrF66rHa2THx3/VMbG8HR1FuK23awPRMmA3t4uenu7KgA6BiwDaK2To/x8kWdV19XEz08gqh01feIVZkaG0PXuOU+IMggLlzPXeilKCYZStGbbyGTS6FoLLLYKagnMvD/EXdu2ks8XsEwL07QwTRPLtDAMkzAKCcOQKAwJggDXc5ktldj14G5WXfY1RGm0jhgbm0K1Zpq34joB0FFEodDJP0/8gxf3/ZnpqSkAlnUuZ/OPfojrebieE59dF9AMrLyIKAyItEYHmraMjWVZiQmbroLGQhmGgWGYTIyNEX3uDkRrRo8+hut7uJ6L63l4rovve6TTmYqKSkCDbRkYptHUhHZcggZ8DGWQslMAtGbi8zwQ+D5B4BP4Pn7gY1k2lmktfFfOOGUZC5tclQeywEyZgAA5gLC+BsT7gZ0QyGRSCJp5wA8C/MDHDwKUUtiWhWXZSCKzUvH2m7IUKukDVQpkAb/cCW0gFSugaW+xqA7DMEjZaQBaMjaZRIU4+4AwDLBMG8uysS1roYmKKEQE2zIQFZOoskAasGtasRImnv7jkH9JX45cFQmlFCk7RaGziw8OPcTYoYdoy+Xwq6W3rOSwcZz5hAALmavGVixQ8YAHuGOvP3HDm2z6faS56MZvfMmKtKZ4ANCwoqefn+3YieM4OK4TLznXwfe9uM+LwlAGjuMyPz8HQG9HmkhDW9qkO58hk0kx53gokQBwAK96TaSAjtbuTy/vGdz0XKjlUwCD2b+hjIoaNQ7RmvK2WT2RBnTo89eZK6kPEQkJ5x8Z2b9jOzBd15ewgBZiTxj87/87hoAPzBErQD2B6lBN3n9UAv9f8R8ByozB/P9dQAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043A%u0430%u043A...%0Afunction%20lbMouse%28%29%7B%0AsaveDocument%28window.content.document%29%3B%0A%7D%3B%0A%0A//%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u043A%u0430%u043A%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%0Afunction%20mbMouse%28%29%7B%0AApplication.prefs.setValue%28%22browser.download.lastDir%22%2C%20Application.prefs.getValue%28%22browser.download.dir%22%2C%20%22%22%29%29%3B%0A%7D%3B%20%20%20%20%20%20%20%20%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%0Afunction%20rbMouse%28%29%7B%0ABrowserOpenFileWindow%28%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043A%u0430%u043A...%20%5CnMiddle%20%3D%3E%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u043A%u0430%u043A%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%5CnRight%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

/*Initialization Code*/

//Сохранить как...
function lbMouse(){
saveDocument(window.content.document);
};

//Установить папку загрузки как текущую
function mbMouse(){
Application.prefs.setValue("browser.download.lastDir", Application.prefs.getValue("browser.download.dir", ""));
};        

//Открыть файл
function rbMouse(){
BrowserOpenFileWindow();
};

this.tooltipText = "Left    => Сохранить как... \nMiddle => Установить папку загрузки как текущую \nRight   => Открыть файл";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

ToolsBookmark (Firefox)
ЛКМ    => Добавить в закладки текущую страницу (с выбором куда добавлять)
СКМ => Скрыть/Показать панель закладок (при запуске браузера в состоянии ON)
ПКМ   => Открыть менеджер закладок
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EToolsBookmark%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%0Afunction%20lbMouse%28%29%7B%0Atry%20%7BPlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20addBookmarkAs%28document.getElementById%28%27content%27%29%29%3B%20%7D%0A%7D%3B%0A%0A//%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0Afunction%20mbMouse%28%29%7B%0Aconst%20ptId%20%3D%20%22PersonalToolbar%22%3B%0Avar%20pt%20%3D%20document.getElementById%28ptId%29%3B%0Avar%20pt_hideAttr%20%3D%20pt.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Apt.setAttribute%28pt_hideAttr%2C%20pt.getAttribute%28pt_hideAttr%29%20%21%3D%20%22true%22%29%3B%0Adocument.persist%28ptId%2C%20pt_hideAttr%29%3B%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0Afunction%20rbMouse%28%29%7B%0Atry%20%7BPlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7BtoOpenWindowByType%28%27bookmarks%3Amanager%27%2C%20%27chrome%3A//browser/content/bookmarks/bookmarksManager.xul%27%29%3B%20%7D%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043D%u0430%u0447%u0430%u043B%u044C%u043D%u043E%0Aconst%20ptId%20%3D%20%22PersonalToolbar%22%3B%0Avar%20pt%20%3D%20document.getElementById%28ptId%29%3B%0Avar%20pt_hideAttr%20%3D%20pt.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Apt.setAttribute%28pt_hideAttr%2C%20%22false%22%29%3B%0Adocument.persist%28ptId%2C%20pt_hideAttr%29%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%5CnMiddle%20%3D%3E%20%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%5CnRight%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

/*Initialization Code*/

//Добавить в закладки текущую страницу
function lbMouse(){
try {PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId); } 
               catch(e) { addBookmarkAs(document.getElementById('content')); }
};

//Скрыть/Показать панель закладок
function mbMouse(){
const ptId = "PersonalToolbar";
var pt = document.getElementById(ptId);
var pt_hideAttr = pt.getAttribute("type") == "menubar" ? "autohide" : "collapsed";
pt.setAttribute(pt_hideAttr, pt.getAttribute(pt_hideAttr) != "true");
document.persist(ptId, pt_hideAttr);
};

//Открыть менеджер закладок
function rbMouse(){
try {PlacesCommandHook.showPlacesOrganizer('AllBookmarks'); }
          catch(e) {toOpenWindowByType('bookmarks:manager', 'chrome://browser/content/bookmarks/bookmarksManager.xul'); }
};

//Открыть изначально
const ptId = "PersonalToolbar";
var pt = document.getElementById(ptId);
var pt_hideAttr = pt.getAttribute("type") == "menubar" ? "autohide" : "collapsed";
pt.setAttribute(pt_hideAttr, "false");
document.persist(ptId, pt_hideAttr);

this.tooltipText = "Left    => Добавить в закладки текущую страницу \nMiddle => Скрыть/Показать панель закладок \nRight   => Открыть менеджер закладок";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

RestartHideQuit(Firefox 20)
ЛКМ    => Перезагрузить Mozilla FireFox
СКМ => В разработке (правка для FF 20) Показать/скрыть панель меню
ПКМ   => Выйти из Mozilla FireFox
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ERestartHideQuit%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A//%u0423%u0431%u0438%u0440%u0430%u0435%u043C%20%20%u0425%u0440%u043E%u043C-%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%0A/*%20%u0421%u043D%u044F%u0442%u044C%20%u043A%u043E%u043C%u043C%u0435%u0442%u0430%u0440%u0438%u0438%20%u0435%u0441%u043B%u0438%20%u0445%u043E%u0442%u0438%u043C%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0425%u0440%u043E%u043C.%0Adocument.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A*/%0A%0A//%u0421%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043D%u0430%u0447%u0430%u043B%u044C%u043D%u043E%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%20%20%20%20%20%20%20%0Aconst%20tbId%20%3D%20%22toolbar-menubar%22%3B%0Avar%20tb%20%3D%20document.getElementById%28tbId%29%3B%0Avar%20tb_hideAttr%20%3D%20tb.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Atb.setAttribute%28tb_hideAttr%2C%20%22true%22%29%3B%0Adocument.persist%28tbId%2C%20tb_hideAttr%29%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20Mozilla%20FireFox%20%5CnMiddle%20%3D%3E%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%5CnRight%20%20%20%3D%3E%20%u0412%u044B%u0439%u0442%u0438%20%u0438%u0437%20Mozilla%20FireFox%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0A%20%20var%20appStartup%20%3D%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIAppStartup%29%3B%0A%20%20appStartup.quit%28appStartup.eForceQuit%20%7C%20appStartup.eRestart%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0A//%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%0Aconst%20tbId%20%3D%20%22toolbar-menubar%22%3B%0Avar%20tb%20%3D%20document.getElementById%28tbId%29%3B%0Avar%20tb_hideAttr%20%3D%20tb.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Atb.setAttribute%28tb_hideAttr%2C%20tb.getAttribute%28tb_hideAttr%29%20%21%3D%20%22true%22%29%3B%0Adocument.persist%28tbId%2C%20tb_hideAttr%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0AgoQuitApplication%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация

Выделить код

Код:

/*Initialization Code*/

this.tooltipText = "Left    => Перезагрузить Mozilla FireFox \nMiddle => В разработке (Показать/скрыть панель меню) \nRight   => Выйти из Mozilla FireFox";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
  var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
                             .getService(Components.interfaces.nsIAppStartup);
  appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);
    }
    else if(event.button == 1) {
// Действие при клике СКМ
// Показать/скрыть панель меню
 
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
goQuitApplication();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

UpDownCenterPage(Firefox) Работает в FF7 и выше (Gecko 6.0)
Left    => Вверх/Вниз по странице
DLeft => Центрирование страницы
ПКМ => Меню настройки кнопки

Заменена на Page Navigation с большим функционалом и упрощена.

Подключиться к Интернету (только Windows) (Firefox, Thunderbird)

скрытый текст
Ссылка:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20credentials%20%3D%20%5B%22ConnectionName%22%2C%20%22Login%22%2C%20%22Password%22%5D%3B%0A%0Avar%20vbs%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D%0A%09%09%09%09%09.getService%28Components.interfaces.nsIProperties%29%0A%09%09%09%09%09.get%28%22TmpD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%0Avbs.append%28%22rasdial.vbs%22%29%3B%0A%0Alet%20stream%20%3D%20Components.classes%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0Astream.init%28vbs%2C%20-1%2C%20-1%2C%200%29%3B%0Alet%20converter%20%3D%20Components.classes%5B%22@mozilla.org/intl/converter-output-stream%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIConverterOutputStream%29%3B%0Aconverter.init%28stream%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0Aconverter.writeString%0A%09%28%0A%09%22CreateObject%28%5C%22Wscript.Shell%5C%22%29.Run%20%5C%22rasdial%20%22%20+%0A%09credentials.join%28%22%20%22%29%20+%0A%09%22%5C%22%20%2C%200%2C%20True%22%0A%09%29%3B%20%0Aconverter.close%28%29%3B%0A%0Avar%20wcscript%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Awcscript.initWithPath%28%22C%3A%5C%5CWINDOWS%5C%5Csystem32%5C%5Cwscript.exe%22%29%3B%20%0A%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28wcscript%29%3B%20%0Aprocess.run%28false%2C%20%5Bvbs.path%5D%2C%201%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Собственно код:

Выделить код

Код:

var credentials = ["ConnectionName", "Login", "Password"];

var vbs = Components.classes["@mozilla.org/file/directory_service;1"]
                    .getService(Components.interfaces.nsIProperties)
                    .get("TmpD", Components.interfaces.nsIFile);

vbs.append("rasdial.vbs");

let stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
                    .createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(vbs, -1, -1, 0);
let converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                    .createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(stream, "UTF-8", 0, 0);
converter.writeString
    (
    "CreateObject(\"Wscript.Shell\").Run \"rasdial " +
    credentials.join(" ") +
    "\" , 0, True"
    ); 
converter.close();

var wcscript = Components.classes["@mozilla.org/file/local;1"]
                    .createInstance(Components.interfaces.nsILocalFile);
wcscript.initWithPath("C:\\WINDOWS\\system32\\wscript.exe"); 

var process = Components.classes["@mozilla.org/process/util;1"]
                    .createInstance(Components.interfaces.nsIProcess);
process.init(wcscript); 
process.run(false, [vbs.path], 1);


В первой строке кода кнопки нужно указать название подключения, логин и пароль.

Не более десяти вкладок! (Firefox)

скрытый текст
Ссылка:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5BtabLimiter%20%3D%20new%20function%28%29%20%7B%0A%0A%20%20%20%20this.boolean%20%3D%20true%3B%0A%0A%20%20%20%20this.extIEvents%20%3D%20Application.activeWindow.events%3B%0A%0A%20%20%20%20this.extIEventListener%20%3D%20function%28event%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.data.index%20%3E%209%29%20event.data.close%28%29%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20this.addORremoveListener%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.boolean%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20this.extIEvents.addListener%28%22TabOpen%22%2C%20this.extIEventListener%29%3B%20%7D%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20this.extIEvents.removeListener%28%22TabOpen%22%2C%20this.extIEventListener%29%3B%20%7D%0A%20%20%20%20%20%20%20%20this.boolean%20%3D%20%21this.boolean%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20this.addORremoveListener%28%29%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BtabLimiter.addORremoveListener%28%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код инициализации:

Выделить код

Код:

tabLimiter = new function() {

    this.boolean = true;

    this.extIEvents = Application.activeWindow.events;

    this.extIEventListener = function(event) {
        if (event.data.index > 9) event.data.close();
    };

    this.addORremoveListener = function () {
        if (this.boolean)
            { this.extIEvents.addListener("TabOpen", this.extIEventListener); }
        else
            { this.extIEvents.removeListener("TabOpen", this.extIEventListener); }
        this.boolean = !this.boolean;
    };

    this.addORremoveListener();
}

Собственно код (выключающий и обратно включающий ограничение):

Выделить код

Код:

tabLimiter.addORremoveListener();

Кодом инициализации кнопка запрещает открываться новым вкладкам, если их уже открыто больше десяти. Чтобы отключить ограничение, кнопку нужно нажать, чтобы включить обратно, нажать снова и т. д. При перезапуске текущее состояние ограничения не сохраняется.

Кнопочка в основном для самодисциплины, для борьбы с другими подвластными пользователями нужно использовать иные средства.

Открыть страницу в Internet Explorer  ( Firefox, Pale Moon )
Кнопка открывает текущую страницу в Internet Explorer.

ЛКМ => открыть текущую страницу в Internet Explorer.

Код кнопки и код для вкладки Код:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20Internet%20Explorer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAgDAgAPAgECFwAAAQ8AAAAQBgEAIRUJADAVCAAxBgEAIwAAABIAAAERAgECGAMCABAAAAAJAAAABQAAAAIAAAABAAAABAIBAAwAAAINBgEAC0QrCVCScT6nxKFt1de2g+fXtoPnw6Ft1pJxPqhEKwlSBgEADQAAAg8CAQAOAAAABgAAAAIAAAAAAgEAAQAAAQBDJQANuIc7mfjSlvz+3q3/99en//PToP/z06D/99en//7erf/40pb8uIc7mUMlAA0AAAEAAgEAAQAAAAACAgABAAABAFQwABLpq03H8s6Y/+W8gf3itnX74rZ2+uK3evzit3r84rZ2+uO2dfvlvIH98s6Y/+mrTcdUMAASAAABAAICAAEAAAIBFAoAAM2QM6zovHv/3Kle+t+sYP3frmf+6rZp/+61Yv/utWL/6rZp/9+uZ/7fq2D83Kle+ei7e//NjzKsEwkAAAAAAgEAAAAAeUwJUuyvVf/Xnkn72qBJ/t2kTv/lo0DypG0ajnxPCU58TwlOpG0ajuWjQPLepU//26JK/tigS/3tsVf/e08LWAAAAAAfEQAAwYEZt9ubMv/VlCn71pcu/9eRIt9hOgEkAAAAAAIBAAICAQACAAAAAGA5ASbQjB/N05Eo5dGPJN3blyvvrHEUlwUBAABgOgAh35QZ7dKRIP/Vkh/81pMf/8aAD8OGVwt8i1sOkZBdDY6QXQ2Oi1sOj4NVDYK4dQqVzIIMpMd/DaHLgQymu3cKjjwlABJbOQVL4Z84/9abPP/Ymzr/2Js7/9udPv/npkD/56ZB/+emQf/npkH/56ZB/+imP//dnz7/2Zw9/9mcPP/XnD7/56M5/2I+BExdPQlV565Y/9yoW/7fql3/36xg/+CtYf3bqmL42qli+NqpYvjaqWL42qli+NqpYfjfrGH836tf/d6pXP3cp1r85q1X/1w8ClVfOwQ87Lpv++O5e//luHb+5bh3/+W5ef/yw3//+MV9//bEff/2xH3/+MV9//LDf//luXn/5bh3/+W4dv7juXv/7Lpu+187BDxOLAAM6rhr2uvJl//owIX87cmT/9WfT9V6Tg5WYkYfXWxMH2VsTB9lYkYfXXpODlbVn0/V7cmT/+jAhfzryZf/6rhr2k4sAAwAAAAArIA+j/3juP/ry5j679Gh//LQm/+qeS1/HA0ABAAAAQAAAAEAHA0AA6p4LX7y0Jv/79Gh/+vLmPr+47f/rIA9jwAAAAAAAAAATi4AIvvXnvD04sH/89ip/fXdtv//5rv/8ciH6dinWrjYp1q48ciH6f/mu//13bb/89ip/fXiwf/51p7wTi4AIwAAAAACAgIDAAAAAJhoIWP/8cr/9+nQ/ffhufv34778++vM///v0P//79D/++vM//fjvvz34bn79+nQ/f/wyv+mcCFjAAAAAAECAgMBAQAAAAACAhgKAAC2fShs/+3C/P//6//98dn+++zO/Prqyvr66sr6++zO/P3x2f7//+v//+3C/LZ9KGwYCgAAAAACAgEBAAAAAAAAAQEAAAEBAgMIAQAAWDgLNMqmbbT+58H3//fd///85P///OT///fd//7nwffKpm20WDgLNAgBAAAAAQIDAQAAAAAAAAAAAAAAAAAAAAEBAAACAQIDAAABAAYBAAByRQYrpnYqZqeCSYengkmHpnYqZnJFBisGAQAAAAABAAIBAgMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CInternet%20Explorer%5C%5Ciexplore.exe%22%3B%0A%0Avar%20uri%20%3D%20gBrowser.currentURI.spec%3B%0Avar%20uri%20%3D%20/.%u0440%u0444/.test%28uri%29%20%3F%20Services.io.newURI%28uri%2C%20null%2C%20null%29.asciiSpec%20%3A%20uri%3B%20%20%0Avar%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0Afile.initWithPath%28path%29%3B%0A%21file.exists%28%29%20%26%26%20custombuttons.alertSlide%28self.label%2C%20%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%29%3B%0Avar%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Buri%5D%2C%201%29%3B%0A%0A%0A%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var path = "C:\\Program Files\\Internet Explorer\\iexplore.exe";

var uri = gBrowser.currentURI.spec;
var uri = /.рф/.test(uri) ? Services.io.newURI(uri, null, null).asciiSpec : uri;  
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath(path);
!file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, [uri], 1);

Hide scrollbar ( Firefox 3.6+ ) от 26.05.2013.
Отключает или включает полосу прокрутки( scrollbar ) на новых страницах и в текущей странице.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EHide%20scrollbar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAAAAAAAAAAAAAAAAAAAAAAAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAI0OEJ0OAJ0OAJ0OEI0OAI0OAI0OAI0OAIz+AIzt8Izt8Hz98I0OAI0OAI0OAI0OAIz+AIzt8Izt8Iz98I0OAI0OAI0OAAz9842uaq7/So7/Rv4+wAzt8J0OAP0eEAzd5D2+if7vOv8PVo4uwEz+AIz+AJ0OAAzd9X3+r///////+18fUAzd4J0OAT0uEAy9xw4+34/v7///+m7/QIzt8J0OAJ0OAAzd9S3+r///////+m7vQAzd4J0OAS0uEAzN1m4ezu/P3///+c7fMHzt8J0OAI0OABz98n1uRy5O1w4u1K2+gCz98J0OAM0eAAzt8u1+Rr4ux35O5G2+cGz98I0eAI0OAJ0OAEzuAAy90Ay90Czd4H0OAI0OAH0OAK0OADzt8Ay9wAy9wAzd4J0OAI0OAI0OAI0OAL0OAS0uET0uEP0eEI0OAI0OAI0OAH0OAM0eES0uET0uEP0uEI0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAE0N8Azd4Azd4Czt8J0OAJ0OAI0OAJ0OADz98Azd4Azd4Azt8H0OAI0OAI0OAAzt882ua48fa08PV15e4Azt4J0OAP0uEAzd5J3Oit7/S+8vdv5OwHz98I0OEJ0OAAzd9X3+r///////+08fUAzd4J0OAT0uEAy9xw4+34/v7///+m7/QIzt8J0OAJ0OAAzd9X3+r///////+28fUAzd4J0OAT0uEAy9xx4+34/v7///+m7/QIzt8J0OAI0OAE0OAg1eNa4OpY4Os82ucDz98I0OAL0OABzt8m1uRU3upb4Oo52uYGz+AJ0OAI0OAI0OAF0OAAzd8Azd8Czt8I0OAI0OAI0OAK0OAD0N8Azd8Azd8Bz98I0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAI0OAJ0OAJ0OAI0OAI0OAI0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20css%20%3D%20%22html%20%3E%20scrollbar%5Borient%3Dvertical%5D%20%7B%20visibility%3Acollapse%20%21important%7D%5Cn%22%3B%0Acss%20%3D%20css%20+%20%22html%20%3E%20scrollbar%5Borient%3Dhorizontal%5D%20%7B%20visibility%3Acollapse%20%21important%20%7D%22%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%20%0A%0Aconst%20icon%20%3D%20this.ownerDocument.getAnonymousElementByAttribute%28this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%0A%0A//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20enabled%20%3D%20sss.sheetRegistered%28%20uri%2C%20sss.AGENT_SHEET%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20enabled%20%3F%20sss.unregisterSheet%28%20uri%2C%20sss.AGENT_SHEET%20%29%20%3A%20sss.loadAndRegisterSheet%28%20uri%2C%20sss.AGENT_SHEET%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20this.style.filter%20%3D%20enabled%20%3F%20%22%22%20%3A%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%3B%0A%20%20%20%20%20%20%20%20%20%20icon.style.opacity%20%3D%20enabled%20%3F%20%22%22%20%3A%200.65%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20BrowserReload%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Объявляем переменные для этой вкладки ................................
var css = "html > scrollbar[orient=vertical] { visibility:collapse !important}\n";
css = css + "html > scrollbar[orient=horizontal] { visibility:collapse !important }";
const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);  

const icon = this.ownerDocument.getAnonymousElementByAttribute(this, "class", "toolbarbutton-icon");


// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {

     if ( e.button == 0 ) {
          var uri = makeURI("data:text/css," + encodeURIComponent(css));
          var enabled = sss.sheetRegistered( uri, sss.AGENT_SHEET );
          enabled ? sss.unregisterSheet( uri, sss.AGENT_SHEET ) : sss.loadAndRegisterSheet( uri, sss.AGENT_SHEET );
          
          this.style.filter = enabled ? "" : 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")';
          icon.style.opacity = enabled ? "" : 0.65   
          
          BrowserReload();
          };     
};

Search and open( Firefox )
Ищет выделенный текст или текст из буфера обмена в текущем поисковике в новой вкладке, открывает адрес из буфера обмена или выделенный адрес на странице(например любой Код кнопки: на этой странице) в новой активной вкладке. Открывает выделенные на странице ссылки или с запросом на подтверждение все ссылки на странице в новых вкладках

ЛКМ =>  искать выделенный текст или текст из буфера обмена в текущем поисковике в новой активной вкладке,
СКМ => открыть выделенные ссылки или все ссылки на странице,
ПКМ => открыть адрес находящийся в буфере обмена или выделенный адрес в тексте на странице в новой активной вкладке
Ctrl+ПКМ => открыть контекстное меню.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESearch%20and%20open%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20//%20%u041B%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21text%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28%20text%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28%20submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20true%2C%20false%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0421%u041A%u041C%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20winSel.toString%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sel.appendChild%28%20winSel.getRangeAt%280%29.cloneContents%28%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20links.length%20%3E%2016%20%26%26%20%21confirm%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27%20+%20links.length%20+%20%27%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20for%28%20var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20lnk.href%29%20gBrowser.addTab%28%20lnk.href%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%20%7B%20//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21url%20%29%20gBrowser.loadOneTab%28%20url%2C%20null%2C%20null%2C%20null%2C%20false%2C%20false%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..................................................................................................%0Avar%20_this%20%3D%20this%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%20%0A%20%20%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..............%20*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20window.content.focus%28%29%3B%0A%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20str%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20alertsService.showAlertNotification%28_this.image%2C%20_this.label%2C%20str%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u043E%u0442%u0441%u0442%u0443%u043F%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................................%0Athis.tooltipText%20%3D%20%22Search%20and%20open%20%5Cn%u041B%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%5Cn%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22margin-right%3A%2010px%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

//  Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ 
          var text = getSelect();
          if ( !!text) 
               var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
               var submission = ss.currentEngine.getSubmission( text, null );
               gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, true, false );
          }; 
                  
     if ( e.button == 1 ) { // СКМ  
          var win = document.commandDispatcher.focusedWindow, doc = win.document;
          var sel = doc, winSel = win.getSelection();
          if ( winSel.toString() ) {
               var sel = doc.createElement('div');
               sel.appendChild( winSel.getRangeAt(0).cloneContents() );
               }
          var str = '', links = sel.getElementsByTagName('a');
          
          if ( links.length > 16 && !confirm('Открыть ' + links.length + ' ссылки в новых вкладках?') ) return;
          
          for( var i = 0, lnk; lnk = links[i]; i++ ) {
               if ( lnk.href) gBrowser.addTab( lnk.href );
               }    
          };
                   
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ 
          e.preventDefault();
          var url = getSelect();
          if ( !!url ) gBrowser.loadOneTab( url, null, null, null, false, false );             
          };        
};



// Объявляем переменные для этой вкладки ..................................................................................................
var _this = this;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



/* Функция отдаст выделенный текст из страницы или текстового поля, 
   или из буфера обмена если текст не выделен, если нет текста отдаст 'false' .............. */
function getSelect() {
  // выделенный текст из страницы ....
  window.content.focus();
  var selection = document.commandDispatcher.focusedWindow.getSelection().toString();

  // выделенный текст из текстового поля ....
  if ( selection == '' ) {
       var theBox = document.commandDispatcher.focusedElement;
       if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
            var startPos = theBox.selectionStart;
        var endPos = theBox.selectionEnd;
        var selection = theBox.value.substring(startPos, endPos);  
            }
       };
       
  // текст из буфера обмена ....
  if ( selection == '' ) var selection = gClipboard.read();
         
  // убираем пробелы с обоих концов текста ....
  if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,"");
  
  if ( selection == '') { 
       var str = "Выделите или скопируйте текст!"
       alertsService.showAlertNotification(_this.image, _this.label, str, false, "", null, "");
       };
    
  return ( selection == '')? false: selection;
};


// Подсказка кнопки и отступ справа у кнопки ................................................
this.tooltipText = "Search and open \nЛ: Искать текст из буфера обмена / выделенный \nМ: Открыть все выделенные ссылки \nП: Открыть адрес из буфера обмена / выделенный";
//this.setAttribute("style", "margin-right: 10px;");

Zoom( Firefox24 ) от 07.06.2016.
Даёт возможность менять масштаб страницы кликами на кнопке или колёсиком мыши на кнопке, можно переключать: изменения масштаба страницы или только текста на странице. Стандартная сплывающая подсказка у кнопки показывает текущий масштаб, при изменении масштаба кнопкой у кнопки сплывает подсказка с новым масштабом.

Скриншот:
http://i77.fastpic.ru/big/2016/0607/89/8eaf149098cb47e5ecb3a5df0b2ba189.png

ЛКМ => Увеличить масштаб,
СКМ => Менять масштаб страницы или только текста на странице, соответственно меняется иконка копки,
ПКМ => Уменьшить масштаб,
Ctrl+ПКМ => Контекстное меню кнопки,
Колёсиком мыши => Менять масштаб.
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EZoom%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onclick%20%3De%3D%3E%20%7B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20FullZoom.enlarge%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20FullZoom.reduce%28%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%0A%20%20%20%20%20showTooltip%28%29%3B%20%20%20%20%20%20%20%20%20%0A%7D%3B%0Athis.setAttribute%28%22ondblclick%22%2C%20%22event.preventDefault%28%29%22%29%3B%0A%0A%0A//%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20..............%0Athis.onwheel%20%3De%3D%3E%20%7B%0A%20%20%20e.deltaY%20%3E%200%20%3F%20FullZoom.reduce%28%29%20%3A%20FullZoom.enlarge%28%29%3B%0A%20%20%20showTooltip%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0438%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0432%u044B%u0437%u043E%u0432%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20..............%0Afunction%20showTooltip%28%29%20%7B%0A%20%20%20var%20tooltip%20%3D%20self.lastChild%3B%0A%20%20%20if%20%28%20%21tooltip%20%29%20%7B%0A%20%20%20%20%20%20%20%20tooltip%20%3D%20self.appendChild%28document.createElement%28%22tooltip%22%29%29%3B%0A%20%20%20%20%20%20%20%20tooltip.style.cssText%20%3D%20%22font-weight%3A%20bold%20%21important%3B%20color%3A%20red%20%21important%3B%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20self.tooltipText%20%3D%20%22%22%20%20%20%20%20%0A%20%20%20tooltip.label%20%3D%20Math.floor%28%28ZoomManager.zoom%20+%200.005%29%20*%20100%29%20+%20%22%25%22%3B%0A%20%20%20tooltip.showPopup%28self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22topleft%22%2C%20%22topright%22%29%3B%0A%20%20%20self.onmouseleave%20%3D%28%29%3D%3E%20%7B%20tooltip.hidePopup%28self.onmouseleave%20%3D%20null%29%3B%20self.tooltipText%20%3D%20self.label%20%7D%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0441%u0442%u0430%u0440%u0442%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%27about%3Aconfig%27%20..............%0Avar%20s%20%3D%20%22browser.zoom.full%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.image%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII%3D%27%0A%20%20%20%3A%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC%27%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0AgPrefService.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleImage%29%20%29%3B%0A%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20value%20%3D%20Math.floor%28%28ZoomManager.zoom%20+%200.005%29%20*%20100%29%20+%20%22%25%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20this.tooltipText%20%3D%20%22Zoom%3A%20%22%20+%20value%20+%20%22%5Cn%u041B%3A%20%u0443%u0432%u0435%u043B%u0438%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%5Cn%u0421%3A%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%5Cn%u041F%3A%20%u0443%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%5Cn%u041C%u043E%u0436%u043D%u043E%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%7D%3B%20%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this.onclick =e=> {

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) FullZoom.enlarge();
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s));
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();
          FullZoom.reduce();           
          }
     
     showTooltip();         
};
this.setAttribute("ondblclick", "event.preventDefault()");


// Менять масштаб колесиком мыши на кнопке ..............
this.onwheel =e=> {
   e.deltaY > 0 ? FullZoom.reduce() : FullZoom.enlarge();
   showTooltip();
};


// Создать подсказку и показывать у кнопки при вызове функции ..............
function showTooltip() {
   var tooltip = self.lastChild;
   if ( !tooltip ) {
        tooltip = self.appendChild(document.createElement("tooltip"));
        tooltip.style.cssText = "font-weight: bold !important; color: red !important;";
        }
   self.tooltipText = ""     
   tooltip.label = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";
   tooltip.showPopup(self, -1, -1, "popup", "topleft", "topright");
   self.onmouseleave =()=> { tooltip.hidePopup(self.onmouseleave = null); self.tooltipText = self.label };
};


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек 'about:config' ..............
var s = "browser.zoom.full";
function toggleImage() {
   self.image = cbu.getPrefs(s)
   ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII='
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );



// Подсказка для кнопки ..............
this.onmouseover =()=> {
   var value = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";                    
   this.tooltipText = "Zoom: " + value + "\nЛ: увеличить масштаб \nС: менять масштаб страницы или только текста на странице \nП: уменьшить масштаб \nМожно менять масштаб колёсиком на кнопке";                                                     
};

Search and open +( Firefox )
Ищет выделенный текст или текст из буфера обмена в текущем поисковике в новой вкладке, открывает адрес из буфера обмена или выделенный адрес на странице(например любой Код кнопки: на этой странице) в новой активной вкладке. Открывает выделенные на странице ссылки или с запросом на подтверждение все ссылки на странице.
Даёт возможность переключать текущий поисковик, иконка кнопки отображает текущий поисковик при изменении которого соответственно меняется иконка кнопки.

ЛКМ => искать выделенный текст или текст из буфера обмена в текущем поисковике в новой активной вкладке,
СКМ => открыть выделенные ссылки или  все ссылки на странице,
ПКМ =>  открыть адрес находящийся в буфере обмена или выделенный адрес в тексте на странице в новой активной вкладке,
Ctrl+ПКМ  => открыть контекстное меню кнопки,
Dropmarker =>  открыть меню с поисковиками.


Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESearch%20and%20open+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20//%20%u041B%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20e.originalTarget.nodeName%20%21%3D%20%22xul%3Atoolbarbutton%22%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21text%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28text%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20true%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0421%u041A%u041C%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20winSel.toString%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sel.appendChild%28%20winSel.getRangeAt%280%29.cloneContents%28%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20links.length%20%3E%2016%20%26%26%20%21confirm%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27%20+%20links.length%20+%20%27%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20for%28%20var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20lnk.href%29%20gBrowser.addTab%28%20lnk.href%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%20%7B%20//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21url%20%29%20gBrowser.loadOneTab%28%20url%2C%20null%2C%20null%2C%20null%2C%20false%2C%20false%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..................................................................................................%0Avar%20_this%20%3D%20this%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20.........................................%0Afunction%20searchService%28%29%20%7B%0A%20%20%20return%20Components.classes%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Components.interfaces.nsIBrowserSearchService%29%3B%0A%7D%0A%0Athis.selectEngine%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20%20var%20engine%20%3D%20aEvent.target.engine%3B%0A%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20ss.currentEngine%20%3D%20ss.getEngineByName%28engine.name%29%3B%0A%20%20%20aNode.engine%20%3D%20engine%3B%0A%20%20%20aNode.image%20%3D%20aEvent.target.getAttribute%28%22src%22%29%3B%0A%7D%0A%0Athis.populateMenu%20%3D%20function%28aNode%29%20%7B%0A%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20var%20engines%20%3D%20ss.getVisibleEngines%28%7B%20%7D%29%3B%0A%20%20%20const%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20%20while%28%20aNode.firstChild%20%26%26%20aNode.firstChild.localName%20%21%3D%20%22menuseparator%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20aNode.removeChild%28%20aNode.firstChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20for%20%28%20var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20mi%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20mi.id%20%3D%20%22cb-search-%22%20+%20engines%5Bi%5D.name%3B%0A%20%20%20%20%20%20%20%20%20mi.className%20%3D%20%22menuitem-iconic%20searchbar-engine-menuitem%22%3B%0A%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22label%22%2C%20engines%5Bi%5D.name%29%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20engines%5Bi%5D.iconURI%20%29%20%20mi.setAttribute%28%22src%22%2C%20engines%5Bi%5D.iconURI.spec%20%29%3B%0A%20%20%20%20%20%20%20%20%20mi.engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20mi.engine%20%3D%3D%20ss.currentEngine%20%29%0A%20%20%20%20%20%20%20%20%20mi.style.fontWeight%20%3D%20%22bold%22%3B%0A%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22onclick%22%2C%20%22event.preventDefault%28%29%3Bevent.stopPropagation%28%29%3BparentNode.parentNode.selectEngine%28parentNode.parentNode%2C%20event%29%22%29%3B%0A%20%20%20%20%20%20%20%20%20aNode.insertBefore%28mi%2C%20aNode.firstChild%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0Athis.currentEngine%20%3D%20searchService%28%29.currentEngine%3B%0Avar%20ss%20%3D%20searchService%28%29%3B%0Athis.engine%20%3D%20ss.currentEngine%3B%0Athis.image%20%3D%20this.engine.iconURI.spec%3B%0A%0Avar%20mp%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Amp.setAttribute%28%22onpopupshowing%22%2C%20%22parentNode.populateMenu%28this%29%22%29%3B%0Amp.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0Avar%20managerSeparator%20%3D%20mp.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0AmanagerSeparator.id%20%3D%20%22cb-searchbutton-separator%22%0Avar%20managerItem%20%3D%20mp.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0AmanagerItem.setAttribute%28%22label%22%2C%20%22Manage%20Search%20Engines...%22%29%3B%0AmanagerItem.setAttribute%28%22oncommand%22%2C%20%22openDialog%28%27chrome%3A//browser/content/search/engineManager.xul%27%2C%20%22%20+%20%22%27engineManager%27%2C%20%27chrome%2C%20dialog%3Dno%27%29%22%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0A%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%20%0A%20%20%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..............%20*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20window.content.focus%28%29%3B%0A%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20str%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20alertsService.showAlertNotification%28_this.image%2C%20_this.label%2C%20str%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u043E%u0442%u0441%u0442%u0443%u043F%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................................%0Athis.tooltipText%20%3D%20%22Search%20and%20open%20%5Cn%u041B%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%5Cn%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22margin-right%3A%2010px%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

//  Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ 
          if ( e.originalTarget.nodeName != "xul:toolbarbutton") return;
               var text = getSelect();
               if ( !!text) 
                    var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
                    var submission = ss.currentEngine.getSubmission(text, null);
                    gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false);
          }; 
                  
     if ( e.button == 1 ) { // СКМ  
          var win = document.commandDispatcher.focusedWindow, doc = win.document;
          var sel = doc, winSel = win.getSelection();
          if ( winSel.toString() ) {
               var sel = doc.createElement('div');
               sel.appendChild( winSel.getRangeAt(0).cloneContents() );
               }
          var str = '', links = sel.getElementsByTagName('a');
          
          if ( links.length > 16 && !confirm('Открыть ' + links.length + ' ссылки в новых вкладках?') ) return;
          
          for( var i = 0, lnk; lnk = links[i]; i++ ) {
               if ( lnk.href) gBrowser.addTab( lnk.href );
               }    
          };
                   
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ 
          e.preventDefault();
          var url = getSelect();
          if ( !!url ) gBrowser.loadOneTab( url, null, null, null, false, false );             
          };        
};



// Объявляем переменные для этой вкладки ..................................................................................................
var _this = this;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



// Добавить контекстное меню с поисковиками для кнопки .........................................
function searchService() {
   return Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
}

this.selectEngine = function(aNode, aEvent) {
   var engine = aEvent.target.engine;
   var ss = searchService();
   ss.currentEngine = ss.getEngineByName(engine.name);
   aNode.engine = engine;
   aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
   var ss = searchService();
   var engines = ss.getVisibleEngines({ });
   const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

   while( aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
          aNode.removeChild( aNode.firstChild );
          }

   for ( var i = engines.length - 1; i >= 0; i-- ) {
         var mi = document.createElementNS(kXULNS, "menuitem");
         mi.id = "cb-search-" + engines[i].name;
         mi.className = "menuitem-iconic searchbar-engine-menuitem";
         mi.setAttribute("label", engines[i].name);
         if ( engines[i].iconURI )  mi.setAttribute("src", engines[i].iconURI.spec );
         mi.engine = engines[i];
         if ( mi.engine == ss.currentEngine )
         mi.style.fontWeight = "bold";
         mi.setAttribute("onclick", "event.preventDefault();event.stopPropagation();parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
         aNode.insertBefore(mi, aNode.firstChild);
         }
};

this.currentEngine = searchService().currentEngine;
var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines...");
managerItem.setAttribute("oncommand", "openDialog('chrome://browser/content/search/engineManager.xul', " + "'engineManager', 'chrome, dialog=no')");
this.type = "menu-button";



/* Функция отдаст выделенный текст из страницы или текстового поля, 
   или из буфера обмена если текст не выделен, если нет текста отдаст 'false' .............. */
function getSelect() {
  // выделенный текст из страницы ....
  window.content.focus();
  var selection = document.commandDispatcher.focusedWindow.getSelection().toString();

  // выделенный текст из текстового поля ....
  if ( selection == '' ) {
       var theBox = document.commandDispatcher.focusedElement;
       if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
            var startPos = theBox.selectionStart;
        var endPos = theBox.selectionEnd;
        var selection = theBox.value.substring(startPos, endPos);  
            }
       };
       
  // текст из буфера обмена ....
  if ( selection == '' ) var selection = gClipboard.read();
         
  // убираем пробелы с обоих концов текста ....
  if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,"");
  
  if ( selection == '') { 
       var str = "Выделите или скопируйте текст!"
       alertsService.showAlertNotification(_this.image, _this.label, str, false, "", null, "");
       };
    
  return ( selection == '')? false: selection;
};


// Подсказка кнопки и отступ справа у кнопки ................................................
this.tooltipText = "Search and open \nЛ: Искать текст из буфера обмена/выделенный \nМ: Открыть все выделенные ссылки \nП: Открыть адрес из буфера обмена/выделенный";
//this.setAttribute("style", "margin-right: 10px;");

Green style( Firefox )
меняет фон страниц на зеленый, чтобы была легче читать.

ЛКМ => включить и отключить зеленый фон страниц.

Код кнопки и код для вкладки Код:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGreen%20style%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.checked%20%3D%20%21this.checked%3B%0A%0Aif%20%28%20this.%20checked%20%29%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/GicS/yI1GP8hNRf/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNRf/IjUY/xonEv8AAAD/AAAA/3GpUP94uU//ca9K/3OwS/9zsEv/c7BL/3OwS/9zsEv/c7BL/3OwS/9zsEv/ca9K/3i5T/9xqVD/AAAA/wAAAP9rok3/XY47/1J/Mf9UgTT/VIE0/1SBNP9UgTT/VIE0/1SBNP9UgTT/VIE0/1J/Mf9djjv/a6JN/wAAAP8AAAD/calU/2qhRv9glD3/YpY//2KWP/9ilj//YpY//2KWP/9ilj//YpY//2KWP/9glD3/aqFG/3GpVP8AAAD/AAAA/3WtVv9so0f/YpU//2SYQf9kmEH/ZJhB/2SYQf9kmEH/ZJhB/2SYQf9kmEH/YpU//2yjR/91rVb/AAAA/wICAv93sVn/cKpJ/2edQf9poEP/aaBD/2mgQ/9poEP/aaBD/2mgQ/9poEP/aaBD/2edQf9wqkn/d7FZ/wICAv8AAAD/e7Vc/3SvTf9qoEP/bKRF/2ykRf9spEX/bKRF/2ykRf9spEX/bKRF/2ykRf9qoEP/dK9N/3u1XP8AAAD/Dg4O/3+6Yf95tlH/b6lI/3GsSv9xrEr/caxK/3GsSv9xrEr/caxK/3GsSv9xrEr/b6lI/3m2Uf9/umH/Dg4O/0xLTP+Hw2n/fsNX/3m8Uf96vlP/er5T/3q+U/96vlP/er5T/3q+U/96vlP/er5T/3m8Uf9+w1f/h8Np/0xLTP9cW1z/jMlu/4TMWv9/xVf/gMZX/4DGV/+Axlf/gMZX/4DGV/+Axlf/gMZX/4DGV/9/xVf/hMxa/4zJbv9cW1z/VFJU/5DNcP+I0V3/gslY/4PKWf+Dyln/g8pZ/4PKWf+Dyln/g8pZ/4PKWf+Dyln/gslY/4jRXf+QzXD/VFJU/1ZUVv+S0XP/jNZh/4bPXP+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4bPXP+M1mH/ktFz/1ZUVv9WVFb/ltZ3/5HdZv+N1WD/jtZi/47WYv+O1mL/jtZi/47WYv+O1mL/jtZi/47WYv+N1WD/kd1m/5bWd/9WVFb/VlRW/5fYef+R3mL/i9Zc/4zXXv+M117/jNde/4zXXv+M117/jNde/4zXXv+M117/i9Zc/5HeYv+X2Hn/VlRW/1ZUVv+h6X//pfl5/5/wdf+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/5/wdf+l+Xn/oel//1ZUVv9XVlf/aXpi/2uAZf9rfWX/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfWX/a4Bl/2l6Yv9XVlf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0Aelse%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0A%0A%0Avar%20css%20%3D%20%27%5C%0A@-moz-document%20url-prefix%28%22http%22%29%2C%20url-prefix%28%22https%22%29%2C%20url-prefix%28%22ftp%22%29%2C%20url-prefix%28%22file%22%29%20%7B%5C%0Ahtml%20*%2C%20html%20%7B%5C%0Abackground%3A%20%23BADBAD%20%21important%3B%20text-shadow%3A%20none%20%21important%3B%5C%0A-moz-border-top-colors%3A%20%238FBC8F%20%21important%3B%20-moz-border-bottom-colors%3A%20%238FBC8F%21important%3B%5C%0A-moz-border-left-colors%3A%20%238FBC8F%20%21important%3B%20-moz-border-right-colors%3A%20%238FBC8F%20%21important%3B%5C%0A%7D%5C%0Acode%2C%20pre%2C%20input%2C%20samp%2C%20kbd%2C%20var%2C%20dfn%2C.postright%20%7B%5C%0A-moz-appearance%3A%20none%20%21important%3B%5C%0Abackground-color%3A%20%23BADBAD%20%21important%3B%5C%0A%7D%5C%0Ainput%2C%20select%2C%20textarea%2C%20button%20%7B%5C%0A-moz-appearance%3A%20none%20%21important%3B%5C%0Aborder%3A%201px%20solid%20%23BADBAD%20%21important%3B%5C%0Abackground-color%3A%20%23BADBAD%20%21important%3B%5C%0A%7D%5C%0A.codebox%2C%20BLOCKQUOTE%2C%20TEXTAREA%2C%20.spoiler%20%7B%20-moz-border-top-colors%3A%20%23444%20%20%21important%3B%20-moz-border-bottom-colors%3A%20%23444%20%21important%3B%5C%0A-moz-border-left-colors%3A%20%23444%20%21important%3B%20-moz-border-right-colors%3A%20%23444%20%21important%3B%5C%0A%7D%5C%0Aa%3Alink%20%7B%20font-weight%3A%20bold%20%21important%3B%20text-decoration%3A%20underline%20%21important%3B%20%7D%5C%0Aa%3Avisited%20%7B%20color%3A%20%23FFB720%20%21important%3B%20%7D%5C%0Aa%3Aactive%20%7B%20color%3A%20%23ff2424%20%21important%3B%20%7D%5C%0Aa%3Ahover%20%7B%20color%3A%20red%21%20important%3B%20%7D%5C%0A%7D%27%3B%0A%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%20%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%0A%0Aif%20%28%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%20%29%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0Aelse%20%0A%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

this.checked = !this.checked;

if ( this. checked ) 
     this.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/GicS/yI1GP8hNRf/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNRf/IjUY/xonEv8AAAD/AAAA/3GpUP94uU//ca9K/3OwS/9zsEv/c7BL/3OwS/9zsEv/c7BL/3OwS/9zsEv/ca9K/3i5T/9xqVD/AAAA/wAAAP9rok3/XY47/1J/Mf9UgTT/VIE0/1SBNP9UgTT/VIE0/1SBNP9UgTT/VIE0/1J/Mf9djjv/a6JN/wAAAP8AAAD/calU/2qhRv9glD3/YpY//2KWP/9ilj//YpY//2KWP/9ilj//YpY//2KWP/9glD3/aqFG/3GpVP8AAAD/AAAA/3WtVv9so0f/YpU//2SYQf9kmEH/ZJhB/2SYQf9kmEH/ZJhB/2SYQf9kmEH/YpU//2yjR/91rVb/AAAA/wICAv93sVn/cKpJ/2edQf9poEP/aaBD/2mgQ/9poEP/aaBD/2mgQ/9poEP/aaBD/2edQf9wqkn/d7FZ/wICAv8AAAD/e7Vc/3SvTf9qoEP/bKRF/2ykRf9spEX/bKRF/2ykRf9spEX/bKRF/2ykRf9qoEP/dK9N/3u1XP8AAAD/Dg4O/3+6Yf95tlH/b6lI/3GsSv9xrEr/caxK/3GsSv9xrEr/caxK/3GsSv9xrEr/b6lI/3m2Uf9/umH/Dg4O/0xLTP+Hw2n/fsNX/3m8Uf96vlP/er5T/3q+U/96vlP/er5T/3q+U/96vlP/er5T/3m8Uf9+w1f/h8Np/0xLTP9cW1z/jMlu/4TMWv9/xVf/gMZX/4DGV/+Axlf/gMZX/4DGV/+Axlf/gMZX/4DGV/9/xVf/hMxa/4zJbv9cW1z/VFJU/5DNcP+I0V3/gslY/4PKWf+Dyln/g8pZ/4PKWf+Dyln/g8pZ/4PKWf+Dyln/gslY/4jRXf+QzXD/VFJU/1ZUVv+S0XP/jNZh/4bPXP+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4bPXP+M1mH/ktFz/1ZUVv9WVFb/ltZ3/5HdZv+N1WD/jtZi/47WYv+O1mL/jtZi/47WYv+O1mL/jtZi/47WYv+N1WD/kd1m/5bWd/9WVFb/VlRW/5fYef+R3mL/i9Zc/4zXXv+M117/jNde/4zXXv+M117/jNde/4zXXv+M117/i9Zc/5HeYv+X2Hn/VlRW/1ZUVv+h6X//pfl5/5/wdf+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/5/wdf+l+Xn/oel//1ZUVv9XVlf/aXpi/2uAZf9rfWX/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfWX/a4Bl/2l6Yv9XVlf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
else 
     this.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";


var css = '\
@-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") {\
html *, html {\
background: #BADBAD !important; text-shadow: none !important;\
-moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important;\
-moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important;\
}\
code, pre, input, samp, kbd, var, dfn,.postright {\
-moz-appearance: none !important;\
background-color: #BADBAD !important;\
}\
input, select, textarea, button {\
-moz-appearance: none !important;\
border: 1px solid #BADBAD !important;\
background-color: #BADBAD !important;\
}\
.codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444  !important; -moz-border-bottom-colors: #444 !important;\
-moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important;\
}\
a:link { font-weight: bold !important; text-decoration: underline !important; }\
a:visited { color: #FFB720 !important; }\
a:active { color: #ff2424 !important; }\
a:hover { color: red! important; }\
}';

const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);  
var uri = makeURI("data:text/css," + encodeURIComponent(css));

if ( sss.sheetRegistered(uri, sss.AGENT_SHEET) ) sss.unregisterSheet(uri, sss.AGENT_SHEET);
else 
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);


Global dark style( Firefox 17+ ) от 08.11.2013.
меняет фон страниц на чёрный, своеобразный ночной режим. Css код создающий чёрный стиль находится в вкладке Справка, его можно легко редактировать или полностью поменять. Кнопку можно использовать для быстрого запуска любых других Css стилей.

ЛКМ => включить и отключить черный фон страниц.
Код кнопки:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0423%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u0441%u0430%u0439%u0442%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20setStyleForPages%28%29%3B%20//%20%u041B%u041A%u041C%0A%7D%3B%0A%0A%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28%20self.Help%20%29%29%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%0Avar%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28%20self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Avar%20styleImage%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/NTU1/z8/P/89PT3/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv89PT3/Pz8//zU1Nf8AAAD/AAAA/6Ghof+YmJj/ioqK/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/ioqK/5iYmP+hoaH/AAAA/wAAAP+dnZ3/hISE/3R0dP94eHj/eHh4/3h4eP94eHj/eHh4/3h4eP94eHj/eHh4/3R0dP+EhIT/nZ2d/wAAAP8AAAD/qKio/5OTk/+CgoL/hoaG/4aGhv+Ghob/hoaG/4aGhv+Ghob/hoaG/4aGhv+CgoL/k5OT/6ioqP8AAAD/AAAA/6+vr/+ampr/iYmJ/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/iYmJ/5qamv+vr6//AAAA/wAAAP+1tbX/oqKi/5GRkf+VlZX/lZWV/5WVlf+VlZX/lZWV/5WVlf+VlZX/lZWV/5GRkf+ioqL/tbW1/wAAAP8CAgL/vb29/6mpqf+Xl5f/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/qamp/729vf8CAgL/AAAA/8PDw/+xsbH/n5+f/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/n5+f/7Gxsf/Dw8P/AAAA/zo6Ov/Pz8//xMTE/7a2tv+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7a2tv/ExMT/z8/P/zo6Ov9aWlr/2dnZ/9PT0//Jycn/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Jycn/09PT/9nZ2f9aWlr/U1NT/9/f3//a2tr/z8/P/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/z8/P/9ra2v/f39//U1NT/1RUVP/m5ub/4+Pj/9jY2P/a2tr/2tra/9ra2v/a2tr/2tra/9ra2v/a2tr/2tra/9jY2P/j4+P/5ubm/1RUVP9UVFT/7u7u/+3t7f/i4uL/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/i4uL/7e3t/+7u7v9UVFT/VFRU/+/v7//y8vL/5+fn/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/5+fn//Ly8v/v7+//VFRU/1RUVP/8/Pz//////////////////////////////////////////////////////////////////Pz8/1RUVP9WVlb/kJCQ/5WVlf+VlZX/lpaW/5aWlv+Wlpb/lpaW/5aWlv+Wlpb/lpaW/5aWlv+VlZX/lZWV/5CQkP9WVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0A%0A%0Afunction%20setStyleForPages%28%20reason%20%29%20%7B%20%0A%20%20%20%0A%20%20%20var%20style%20%3D%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%3B%20%20%0A%0A%20%20%20if%20%28%20style%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20%28%21style%20%26%26%20reason%20%21%3D%3D%20%27update%27%29%20%7C%7C%20%28style%20%26%26%20reason%20%3D%3D%20%27update%27%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20styleImage%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0AaddDestructor%28function%28reason%29%20%7B%20if%20%28/update%7Cdelete/.test%28%20reason%20%29%20%29%20setStyleForPages%28reason%29%20%7D%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B@-moz-document%20url-prefix%28http%3A//%29%2C%20url-prefix%28https%3A//%29%2C%20url-prefix%28about%3Ablank%29%20%7B%0A%20%20%20body%2C%20html%20%7B%20min-height%3A%20100%25%20%21important%3B%20%7D%0A%20%20%20html%2C%20body%20%7B%20background-color%3A%20%23111%20%21important%3B%20%7D%0A%20%20%20body%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23282828%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23282828%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23383838%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3E*%20*%20%7B%20background-color%3A%20%23383838%20%21important%3B%20%7D%0A%20%20%20body%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23111%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23333%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23444%20%21important%3B%20%7D%0A%20%20%20body%20*%3Aempty%20%7B%20background-color%3A%20%23252525%20%21important%3B%20%7D%0A%0A%20%20%20body%20p%3Anot%28%3Aempty%29%2C%20body%20p%20*%2C%20body%20h1%2C%20body%20h1%20*%2C%20body%20h2%2C%20body%20h2%20*%2C%20body%20h3%2C%20body%20h3%20*%2C%20body%20h4%2C%20body%20h4%20*%2C%20body%20h5%2C%20body%20h5%20*%2C%20body%20strong%3E*%2C%20body%20b%3E*%2C%20body%20em%3E*%2C%20body%20i%3E*%2C%20%20body%20span%3E*%3Anot%28img%29%20%7B%20background%3A%20transparent%20none%20%21important%3B%20%7D%0A%20%20%20body%20h1%2C%20body%20h1%20*%2C%20body%20h2%2C%20body%20h2%20*%2C%20p%3Estrong%3Aonly-of-type%2C%20%20p%3Eb%3Aonly-of-type%20%7B%20color%3A%20%23a98%20%21important%3B%20%7D%0A%20%20%20body%20h3%2C%20body%20h3%20*%2C%20body%20h4%2C%20body%20h4%20*%7B%20color%3A%20%23aaa%20%21important%3B%20%7D%0A%0A%20%20%20*%3Anot%28%5Bonclick%5D%29%3Anot%28input%29%3Anot%28a%29%3Anot%28img%29%3Anot%28%5Bclass%5E%3D%22UI%22%5D%29%2C%20body%20a%3Anot%28%3Aempty%29%2C%20div%3Anot%28%5Bonclick%5D%29%20%7B%20background-image%3A%20none%20%21important%3B%20text-indent%3A%200%20%21important%20%7D%0A%20%20%20*%5Bonclick%5D%20%7B%20color%3A%20%2379a%20%21important%3B%20%7D%0A%20%20%20*%5Bonclick%5D%3Ahover%20%7B%20color%3A%20%2399a8aa%20%21important%3B%20%7D%0A%20%20%20body%20hr%20%7B%20background%3A%20%23666%20none%20%21important%3B%20color%3A%20%23666%20%21important%3B%20border%3A%201px%20solid%20%23666%20%21important%3B%20height%3A%201px%20%21important%3B%20overflow%3A%20hidden%20%21important%3B%20display%3A%20block%20%21important%3B%20%7D%0A%20%20%20*%20%7B%20color%3A%20%23c0c0c0%20%21important%3B%20border-color%3A%20%23666%20%21important%3B%20%7D%0A%20%20%20*%20body%20a%2C%20body%20a%20*%7B%20color%3A%20%23B6AA7B%20%21important%3B%20%7D%0A%20%20%20body%20a%3Ahover%2C%20body%20a%3Ahover%20*%7B%20color%3A%20%23D9C077%20%21important%3B%20text-decoration%3A%20underline%20%21important%3B%20%7D%0A%20%20%20body%20img%2Ca%5Bhref%5D%20img%2C%20a%5Bhref%5D%20button%2C%20input%5Btype%3D%22image%22%5D%2C*%5Bonclick%5D%3Aempty%2C%20body%20a%3Aempty%20%7B%20opacity%3A%20.5%20%21important%3B%20%7D%0A%20%20%20body%20img%3Ahover%2Ca%5Bhref%5D%3Ahover%20img%2C%20a%5Bhref%5D%3Ahover%20button%2C%20*%5Bonclick%5D%3Aempty%3Ahover%2C%20body%20a%3Aempty%3Ahover%20%7B%20opacity%3A%201%20%21important%3B%20%7D%0A%0A%20%20%20body%20input%5Btype%5D%2C%20body%20textarea%5Bname%5D%2C%20body%20input%5Bname%5D%2C%20body%20input%5Bid%5D%2C%20body%20select%5Bname%5D%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20color%3A%20%23bbb%21important%3B%20border-radius%3A%204px%20%21important%3B%20border-width%3A%201px%20%21important%3B%20border-color%3A%20%23778%20%21important%3B%20border-style%3A%20solid%20%21important%3B%20background%3A%20%23555%20none%20%21important%3B%20%7D%0A%0A%20%20%20body%20select%5Bname%5D%20%7B%20-moz-appearance%3Anone%21important%3B%20color%3A%20%23bbb%20%21important%3B%20border-radius%3A%204px%20%21important%3B%20border-width%3A%201px%20%21important%3B%20border-color%3A%20%23778%21important%3B%20border-style%3A%20solid%20%21important%3B%20background-color%3A%20%23555%20%21important%3B%20%7D%0A%0A%20%20%20body%20input%3E*%2C%20body%20textarea%3E*%20%7B%20background%3Atransparent%20none%20%21important%3B%20color%3A%20%23bbb%21important%3B%20border-style%3A%20solid%20%21important%3B%20border-width%3A%200px%21important%3B%20%7D%0A%20%20%20body%20select%20*%20%7B%20background-color%3A%20transparent%20%21important%3B%20color%3A%20%23bbb%20%21important%3B%20border-style%3A%20solid%20%21important%3B%20border-width%3A%200px%20%21important%3B%20%7D%0A%7D%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Autocopy( Pale Moon, SeaMonkey ) от 23.04.2018.
1. Автоматически копирует выделенный текст на странице, при этом выделенный текст мигает. Кнопка будет сама выключать авто копирование при выходе из браузера, если эта возможность включена в настройках кнопки.
2. Даёт возможность копировать двойным правым кликом мыши выделенный текст на страницах и в текстовых полях и поисковых формах на страницах и также редакторе в Custom Buttons, если эти возможности включены в настройках кнопки.
3. Даёт возможность средней кнопкой мыши вставлять текст из буфера обмена с заменой выделенного текста в текстовые полях и поисковых формах на страницах и также в адресной строке и строке поиска браузера и поисковых формах браузера которые открываются как страница, например поисковой форме в about:config и также редакторе в Custom Buttons. Эту возможность надо включать в настройках кнопки.
4. Даёт возможность копировать адрес страницы если кликнуть правой клавишей мыши на значке идентификации сайта в строке адреса, при этом значок идентификации сайта мигает красным или открыть без запроса информацию о странице Разрешения если кликнуть левой клавишей мыши.
5. Даёт возможность закрывать окошко информации о странице двойным кликом мыши на нём.
6. Даёт возможность без запроса сохранять изображения на странице в папке загрузки двойным правым кликом мыши, если эта возможность включена в настройках кнопки.

Настройки кнопки в меню кнопки:
http://i104.fastpic.ru/big/2018/0423/28/0a4600dc742b107ccca9fe48f6481b28.png

ЛКМ => Включить или отключить автокопирование.
ПКМ => Mеню кнопки с настройками,
Двойной ПКМ => Стандартное меню кнопки.
Код кнопки и код для инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EAutocopy%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20.................%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20cbu.setPrefs%28%22CB.Autocopy%22%2C%20%21cbu.getPrefs%28%22CB.Autocopy%22%29%29%3B%20%0A%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%7D%3B%20%0Athis.oncontextmenu%20%3D%20e%20%3D%3E%20e.detail%20%3D%3D%202%20%26%26%20%21menuPopup.hidePopup%28%29%0A%20%20%20%20%20%7C%7C%20e.ctrlKey%20%7C%7C%20%21%21menuPopup.openPopup%28this%2C%20%22after_start%22%29%3B%0A%20%20%20%20%20%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20.................%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0434%u0435%u043B%u044F%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0441%20%u043F%u0440%u043E%u0431%u0435%u043B%u043E%u043C%20%u0441%u043F%u0440%u0430%u0432%u0430%27%2C%20value%3A%20%27layout.word_select.eat_space_to_next_word%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043C%u0438%u0433%u0430%u0435%u0442%20%u043F%u0440%u0438%20%u0430%u0432%u0442%u043E%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0438%27%2C%20value%3A%20%27CB.Autocopy.selectingTextBlink%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%27%2C%20value%3A%20%27CB.Autocopy.addToAddressBar%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0440%u0438%20%u0432%u044B%u0445%u043E%u0434%u0435%20%u0438%u0437%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%27%2C%20value%3A%20%27CB.Autocopy.reset%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0414%u0432%u043E%u0439%u043D%u043E%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043C%u044B%u0448%u0438%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%27%2C%20value%3A%20%27CB.Autocopy.copyWithDoubleClick%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0414%u0432%u043E%u0439%u043D%u043E%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043C%u044B%u0448%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%27%2C%20value%3A%20%27CB.Autocopy.saveWithDoubleClick%27%20%7D%2C%20%0A%20%20%20%20%7B%20label%3A%20%27%u0421%u0440%u0435%u0434%u043D%u0438%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u0432%u0441%u0442%u0430%u0432%u043B%u044F%u0442%u044A%20%u0442%u0435%u043A%u0441%u0442%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%27%2C%20value%3A%20%27middlemouse.paste%27%20%7D%2C%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.value%29%29%3B%0A%20%20%20mItem.onclick%20%3De%3D%3E%20cbu.setPrefs%28m.value%2C%20%21cbu.getPrefs%28m.value%29%29%3B%20%20%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u0411%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u043A%u0430%20%u0434%u0432%u043E%u0439%u043D%u043E%u0439%20%u0438%u043D%u0438%u0446%u0438%u0430%u043B%u0438%u0437%u0430%u0446%u0438%u0438%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u043E%u0432%20%u0434%u043B%u044F%20SeaMonkey%20...............%0Aif%20%28%20this.hasAttribute%28%22initialized%22%29%20%29%20return%3B%0A%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0441%u0442%u0430%u0440%u0442%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%u0432%20%27about%3Aconfig%27%20.................%0Aconst%20s%20%3D%20%22CB.Autocopy%22%3B%0Afunction%20toggleImage%28%29%20%7B%20%20%0A%20%20%20document.getAnonymousNodes%28self%29%5B1%5D.src%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0A%7D%3B%20%20%0AtoggleImage%28%29%3B%0AServices.prefs.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.prefs.removeObserver%28s%2C%20toggleImage%29%29%3B%20%20%0A%0A%20%0A//%20%u0412%u044B%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043F%u0440%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u0438%u0438%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20.................%0Avar%20toggleButton%20%3D%20%7B%0A%20%20%20observe%3A%28subject%2C%20topic%2C%20data%29%3D%3E%20%7B%0A%20%20%20%20%20%20cbu.getPrefs%28%22CB.Autocopy.reset%22%29%20%26%26%20data%20%3D%3D%20%22shutdown%22%20%26%26%20cbu.setPrefs%28%22CB.Autocopy%22%2C%20false%29%3B%20%20%0A%20%20%20%7D%0A%7D%3B%0AServices.obs.addObserver%28toggleButton%2C%20%22quit-application%22%2C%20false%29%3B%0A%0A%20%20%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u0438%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%2C%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20...............%0Afunction%20autocopy%28e%29%20%7B%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%22CB.Autocopy%22%29%0A%20%20%20%20%20%20%20%7C%7C%20document.commandDispatcher.focusedWindow.getSelection%28%29.isCollapsed%0A%20%20%20%20%20%20%29%20return%3B%0A%20%20%20%0A%20%20%20goDoCommand%28%27cmd_copy%27%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043C%u0438%u0433%u0430%u0435%u0442%20....%0A%20%20%20if%20%28%20%21cbu.getPrefs%28%22CB.Autocopy.selectingTextBlink%22%29%20%29%20return%3B%0A%20%20%20document.activeElement.blur%28%29%3B%20%20%0A%20%20%20setTimeout%28%28%29%3D%3E%20window.content.focus%28%29%2C%20300%29%3B%0A%7D%3B%0AaddEventListener%28%27mouseup%27%2C%20autocopy%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20C%u0440%u0435%u0434%u043D%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u043C%u044B%u0448%u0438%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u043F%u043E%u043B%u044F%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20...............%0Afunction%20middleMousePaste%28e%2C%20doc%20%3D%20this.document%20%7C%7C%20document%29%20%7B%20%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%20%21%3D%3D%201%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%27middlemouse.paste%27%29%0A%20%20%20%20%20%20%20%7C%7C%20%21/input%7Cpassword%7Ctextarea%7Ctextbox%7Csearchbar%7Cfindbar%7Ccbeditor/.test%28e.target.localName%29%0A%20%20%20%20%20%20%29%20return%3B%0A%0A%20%20%20e.preventDefault%28%29%3B%0A%20%20%20e.stopPropagation%28%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20....%0A%20%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20var%20commandDispatcher%20%3D%20doc.commandDispatcher%3B%0A%20%20%20var%20controller%20%3D%20commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20gClipboard.read%28%29%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%3B%0AaddEventListener%28%22click%22%2C%20middleMousePaste%2C%20true%2C%20document.documentElement%29%3B%0A%0A%0A//%20%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0437%u043D%u0430%u0447%u043A%u0430%20%u0438%u0434%u0435%u043D%u0442%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u0432%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0430%u0434%u0440%u0435%u0441%u0430%20...............%0AaddEventListener%28%22click%22%2C%20e%3D%3E%20%7B%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%20%3D%3D%201%0A%20%20%20%20%20%20%20%7C%7C%20%21/page-proxy-favicon%7Cpage-proxy-button/.test%28e.target.id%29%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%22CB.Autocopy.addToAddressBar%22%29%0A%20%20%20%20%20%20%29%20return%3B%0A%0A%20%20%20e.preventDefault%28%29%3B%0A%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20e.target.setAttribute%28%22context%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%0A%20%20%20//%20%u041B%u041A%u041C%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0438%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%27%u0420%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u0438%u044F%27%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20BrowserPageInfo%28content.document%2C%20%28gURLBar.value.startsWith%28%22http%22%29%20%3F%20%22permTab%22%20%3A%20%22generalTab%22%29%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u041F%u041A%u041C%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0430%u0434%u0440%u0435%u0441%20....%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%21%3D%3D%202%20%29%20return%3B%0A%20%20%20gClipboard.write%28content.location%29%3B%0A%0A%20%20%20//%20%u0437%u043D%u0430%u0447%u043E%u043A%20%u0438%u0434%u0435%u043D%u0442%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u043C%u0438%u0433%u0430%u0435%u0442%20%u043A%u0440%u0430%u0441%u043D%u044B%u043C%20....%0A%20%20%20var%20id%20%3D%20%28Services.appinfo.name%20%3D%3D%20%22SeaMonkey%22%29%20%3F%20%22page-proxy-deck%22%20%3A%20%22identity-box%22%3B%0A%20%20%20document.getElementById%28id%29.style.background%20%3D%20%22red%22%3B%0A%20%20%20setTimeout%28%28%29%3D%3E%20document.getElementById%28id%29.style.background%20%3D%20%22%22%2C%20300%29%3B%0A%20%20%20%0A%7D%2C%20true%2C%20gURLBar%29%3B%0A%0A%20%20%20%0A//%20%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0434%u0432%u043E%u0439%u043D%u043E%u0433%u043E%20%u043A%u043B%u0438%u043A%u0430%20%u043C%u044B%u0448%u0438%20...............%0Afunction%20handleDblClick%28e%29%20%7B%0A%20%20%20var%20node%20%3D%20e.target%3B%0A%20%20%20var%20editor%20%3D%20node.editor%3B%0A%0A%20%20%20//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20cbu.getPrefs%28%22CB.Autocopy.saveWithDoubleClick%22%29%20%26%26%20node.localName%20%3D%3D%20%27img%27%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20run%20%3D%20cbu.getPrefs%28%22browser.download.folderList%22%29%3B%0A%20%20%20%20%20%20%20%20var%20use%20%3D%20cbu.getPrefs%28%22browser.download.useDownloadDir%22%29%3B%0A%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.folderList%22%2C%202%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.useDownloadDir%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20function%20save%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20eval%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20gContextMenu.saveMedia.toSource%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%28false%2C%5Cs+%29false%2C/%2C%20%22%241true%2C%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%5Es/%2C%20%220%2Cfunction%20s%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%28save%20%3D%28%29%3D%3E%20func.call%28gContextMenu%29%29%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20/Pale%20Moon%7CSeaMonkey/.test%28Services.appinfo.name%29%0A%20%20%20%20%20%20%20%20%3F%20saveImageURL%28gContextMenu.imageURL%2C%200%2C%200%2C%200%2C%201%2C%20null%2C%20content.document%29%0A%20%20%20%20%20%20%20%20%3A%20save%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%2C%2020%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.folderList%22%2C%20run%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.useDownloadDir%22%2C%20use%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20%20//%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20cbu.getPrefs%28%22CB.Autocopy.copyWithDoubleClick%22%29%20%26%26%20%21/findbar%7Ctabbrowser/.test%28node.localName%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20editor%20%3F%20editor.copy%28%29%20%3A%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20try%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20box%20%3D%20%28node.textbox%20%7C%7C%20node%29.inputField.parentNode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20box.ownerDocument.getAnonymousElementByAttribute%28box%2C%20%22anonid%22%2C%20%22input-box-contextmenu%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20popup.hidePopup%28%29%2C%2050%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20setTimeout%28%28%29%3D%3E%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%2C%2050%29%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%0A%7D%3B%0AaddEventListener%28%22dblclick%22%2C%20handleDblClick%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20%u041D%u0430%u0431%u043B%u044E%u0434%u0430%u0442%u0435%u043B%u044C%20%u0441%u043B%u0435%u0434%u0438%u0442%20%u0437%u0430%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%u043C%20%u043D%u043E%u0432%u044B%u0445%20%u043E%u043A%u043E%u043D%20...............%0Afunction%20observer%28subject%29%20%7B%0A%20%20%20subject.addEventListener%28%22load%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20%20%20var%20view%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u0438%20%u043A%u043B%u0438%u043A%u0430%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u043E%u0432%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%20....%0A%20%20%20%20%20%20if%20%28%20/custombuttons/.test%28doc.URL%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22dblclick%22%2C%20handleDblClick%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22click%22%2C%20middleMousePaste.bind%28view%29%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u0438%20%u043A%u043B%u0438%u043A%u0430%20%u0434%u043B%u044F%20%27%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%27%20%u0438%20%27%u0411%u0438%u0431%u043B%u0438%u043E%u0442%u0435%u043A%u0438%27%20....%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20/pageInfo.xul%7Cplaces.xul/.test%28doc.URL%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22dblclick%22%2C%20function%20close%28%29%20%7B%20this.close%28%29%20%7D%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22unload%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20view.removeEventListener%28e.type%2C%20arguments.callee%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20view.removeEventListener%28%22dblclick%22%2C%20close%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20false%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%7D%29%3B%0A%7D%3B%0AServices.ww.registerNotification%28observer%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.ww.unregisterNotification%28observer%29%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.tooltipText%20%3D%20%22Autocopy%20%5Cn%u041B%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u043E%u0435%20%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%5Cn%u041F%3A%20%u041C%u0435%u043D%u044E%20%5Cn%u0414%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки .................
this.onclick =e=> {
   if ( e.button == 0 ) cbu.setPrefs("CB.Autocopy", !cbu.getPrefs("CB.Autocopy")); 
       
   if ( e.button == 2 ) { 
        e.preventDefault();  
        menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
        }     
}; 
this.oncontextmenu = e => e.detail == 2 && !menuPopup.hidePopup()
     || e.ctrlKey || !!menuPopup.openPopup(this, "after_start");
     

// Создать меню .................
var array = [
    { label: 'Выделять текст с пробелом справа', value: 'layout.word_select.eat_space_to_next_word' },
    { label: 'Выделенный текст мигает при автокопировании', value: 'CB.Autocopy.selectingTextBlink' },
    { label: 'Дополнительные возможности для адресной строки', value: 'CB.Autocopy.addToAddressBar'},
    { label: 'Выключать автокопирование при выходе из браузера', value: 'CB.Autocopy.reset' },
    { separator: ''},
    { label: 'Двойной правый клик мыши копирует выделенный текст', value: 'CB.Autocopy.copyWithDoubleClick' },
    { label: 'Двойной правый клик мыши сохраняет изображение без запроса', value: 'CB.Autocopy.saveWithDoubleClick' }, 
    { label: 'Средним кликом вставлятъ текст с заменой выделенного текста', value: 'middlemouse.paste' },
];
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {
   if ( "separator" in m ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute('type', 'checkbox');
   mItem.setAttribute('checked', cbu.getPrefs(m.value));
   mItem.onclick =e=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


// Блокировка двойной инициализации обработчиков для SeaMonkey ...............
if ( this.hasAttribute("initialized") ) return;


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек в 'about:config' .................
const s = "CB.Autocopy";
function toggleImage() {  
   document.getAnonymousNodes(self)[1].src = cbu.getPrefs(s)
   ? "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
   : "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};  
toggleImage();
Services.prefs.addObserver(s, toggleImage, false);
addDestructor(()=> Services.prefs.removeObserver(s, toggleImage));  

 
// Выключать кнопку при закрытии браузера если это разрешено в 'about:config' .................
var toggleButton = {
   observe:(subject, topic, data)=> {
      cbu.getPrefs("CB.Autocopy.reset") && data == "shutdown" && cbu.setPrefs("CB.Autocopy", false);  
   }
};
Services.obs.addObserver(toggleButton, "quit-application", false);

  
// Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ...............
function autocopy(e) {
   if (
       e.button
       || !cbu.getPrefs("CB.Autocopy")
       || document.commandDispatcher.focusedWindow.getSelection().isCollapsed
      ) return;
   
   goDoCommand('cmd_copy');
         
   // выделенный текст мигает ....
   if ( !cbu.getPrefs("CB.Autocopy.selectingTextBlink") ) return;
   document.activeElement.blur();  
   setTimeout(()=> window.content.focus(), 300);
};
addEventListener('mouseup', autocopy, false, gBrowser);


// Cредней кнопкой мыши вставить текст из буфера обмена в текстовые поля с заменой выделенного текста ...............
function middleMousePaste(e, doc = this.document || document) { 
   if (
       e.button !== 1
       || !cbu.getPrefs('middlemouse.paste')
       || !/input|password|textarea|textbox|searchbar|findbar|cbeditor/.test(e.target.localName)
      ) return;

   e.preventDefault();
   e.stopPropagation(); 
          
   // вставить текст ....
   var cmd = "cmd_insertText";
   var commandDispatcher = doc.commandDispatcher;
   var controller = commandDispatcher.getControllerForCommand(cmd);
   var controller = controller.QueryInterface(Ci.nsICommandController);
   var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
   params.setStringValue("state_data", gClipboard.read());
   controller.doCommandWithParams(cmd, params);
};
addEventListener("click", middleMousePaste, true, document.documentElement);


// Дополнительные возможности для значка идентификации сайта в строке адреса ...............
addEventListener("click", e=> {
   if (
       e.button == 1
       || !/page-proxy-favicon|page-proxy-button/.test(e.target.id)
       || !cbu.getPrefs("CB.Autocopy.addToAddressBar")
      ) return;

   e.preventDefault();
   e.stopPropagation();
   e.target.setAttribute("context", "event.stopPropagation()");
   
   // ЛКМ без запроса открывает информацию о странице в вкладке 'Разрешения' ....
   if ( e.button == 0 )
        BrowserPageInfo(content.document, (gURLBar.value.startsWith("http") ? "permTab" : "generalTab"));
        
   // ПКМ копирует текущий адрес ....     
   if ( e.button !== 2 ) return;
   gClipboard.write(content.location);

   // значок идентификации сайта мигает красным ....
   var id = (Services.appinfo.name == "SeaMonkey") ? "page-proxy-deck" : "identity-box";
   document.getElementById(id).style.background = "red";
   setTimeout(()=> document.getElementById(id).style.background = "", 300);
   
}, true, gURLBar);

   
// Дополнительные возможности для двойного клика мыши ...............
function handleDblClick(e) {
   var node = e.target;
   var editor = node.editor;

   // Сохранить изображение в папку загрузки ....
   if ( e.button == 2 && cbu.getPrefs("CB.Autocopy.saveWithDoubleClick") && node.localName == 'img' ) {
        var run = cbu.getPrefs("browser.download.folderList");
        var use = cbu.getPrefs("browser.download.useDownloadDir");

        cbu.setPrefs("browser.download.folderList", 2);
        cbu.setPrefs("browser.download.useDownloadDir", true);
        
        function save() {
           var func = eval(
              gContextMenu.saveMedia.toSource()
              .replace(/(false,\s+)false,/, "$1true,")
              .replace(/^s/, "0,function s")
           );
           (save =()=> func.call(gContextMenu))();
        } 
        
        /Pale Moon|SeaMonkey/.test(Services.appinfo.name)
        ? saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document)
        : save();
        
        setTimeout(()=> document.getElementById("contentAreaContextMenu").hidePopup(), 20);
        
        cbu.setPrefs("browser.download.folderList", run);
        cbu.setPrefs("browser.download.useDownloadDir", use);
        };
       
   // скопировать выделенный текст ....
   if ( e.button == 2 && cbu.getPrefs("CB.Autocopy.copyWithDoubleClick") && !/findbar|tabbrowser/.test(node.localName) ) { 
        e.preventDefault();
        editor ? editor.copy() : goDoCommand("cmd_copy");      
        try {      
            var box = (node.textbox || node).inputField.parentNode;
            var popup = box.ownerDocument.getAnonymousElementByAttribute(box, "anonid", "input-box-contextmenu");
            setTimeout(()=> popup.hidePopup(), 50);
            }
        catch(e) { setTimeout(()=> document.getElementById("contentAreaContextMenu").hidePopup(), 50) }; 
        }        
};
addEventListener("dblclick", handleDblClick, false, gBrowser);


// Наблюдатель следит за открытием новых окон ...............
function observer(subject) {
   subject.addEventListener("load", e=> {
      var doc = e.target;
      var view = doc.defaultView;
      
      // добавлять обработчики клика для редакторов CB кнопок ....
      if ( /custombuttons/.test(doc.URL) ) {
           view.addEventListener("dblclick", handleDblClick, false);
           view.addEventListener("click", middleMousePaste.bind(view), true);
           };
      
      // добавлять обработчики клика для 'Информацию о странице' и 'Библиотеки' ....            
      if ( /pageInfo.xul|places.xul/.test(doc.URL) ) {
           view.addEventListener("dblclick", function close() { this.close() }, true);
                         
           view.addEventListener("unload", e=> {
              view.removeEventListener(e.type, arguments.callee, false);
              view.removeEventListener("dblclick", close, true);
           }, false);                  
           };
   });
};
Services.ww.registerNotification(observer);
addDestructor(()=> Services.ww.unregisterNotification(observer));


// Подсказка для кнопки ................................
this.tooltipText = "Autocopy \nЛ: Переключить автоматическое копирование \nП: Меню \nДП: CB меню";

Вкладки сверху & Вставить и перейти Firefox3.6 не требует нажатия,после установки возможно потребуется перезапуск браузера
Помещает панель вкладок вверх ,добавляет контекстный пункт меню адресной строки"Вставить и перейти"

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0432%u0435%u0440%u0445%u0443%20%26amp%3B%20%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAn5JREFUeJx9U01IVFEYPfe9eW/GcoZSg6b3pME0UzIErWiVFSVEkC7bSQRBq2oTmKUGboJI0I07nwRSG2ch2aLIRX/mjGaSMFmNyow5QaM5M877ue/eFoPjPCY6u++e853v5/IRzjkKcenbzWOlwq5eGVKzBFG1GEWKZmJpeyu0yTLdUw0jnwv1pNDgSvTumAypbSozj6i5CpNbAACJuOAXylElKNCZEXzfqLU7DL7qK56HCW0xoq+ob9Kz+B+qiYK9zBs7aR2pGTjVpQsA0P1zaPRfyS3eJrR4mxxv33gcCb6uvhTCowBArkZ7j1POPo4kx4uqvT48BNgcZ2avAT6Xg6s1VFBGT7g27HTfl+z3ouSAfCBfPfBnH5Z86w5+TUyilHn6XGWirz5qruZbbiypRcDtx+U9p3c6OTcMbWMcG8jgUzaCyVQYKTEL31ZJvYsxpmxv+6Dsx+PK28XdeBV0e68DADrmuoBNCuZzgdpUESxG80Lt9zg65u8VGWyj49UdaG+fAWbu6y1GIRi2GZfIzoI0cwL9y0+KkvvnhqFFxoBDJUCFBMIJLGbFhV80ueAXyh3ixrK64jF8KrBfBiokAIBkEBgiXRA8XO6sEhSn2O0HAPRMD6B/bji/BxgsrxHTgG3RTmHi6GBIZ0awmuyYTKbCCDw9i97pAdxafoTAiwtYSsUBIze7nCKwQIPmxZkQ4ZyjZ3bQ89z+sJjg6+qKkMi5/MgCihtwC7nYYMCyDtm/G3zLjtGlTA27EdEdx1Q31T7Gbd62JiaRErNgJMcRTiAZBGIasECDVuuM85gKUfmutQE2HnCbNTPKVItRmDBjJuwQJfZ963x4vlD/F6u3LbVAOWEsAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E/*%u0412%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0432%u0435%u0440%u0445%u0443*/%0A%20var%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A@-moz-document%20url%28%22chrome%3A//browser/content/browser.xul%22%29%0A%7B.tabbrowser-strip%7Bposition%3Afixed%3Btop%3A0px%3Bwidth%3A100%25%21important%3Bz-index%3A0%3B%7D%0Atab%7B-moz-user-select%3A-moz-none%21important%3Bz-index%3A0%21important%3B-moz-border-radius-bottomleft%3A%200px%21important%3B%7D%0A.tabbrowser-strip%20.tabbrowser-tabs%7Bwidth%3A100%25%21important%3B%7D%0A.tab-drop-indicator-bar%7Bposition%3Afixed%21important%3B%0Atop%3A0px%3Bleft%3A0px%3Bwidth%3A100%25%21important%3Bz-index%3A1%3B%7Dwindow%20%7Bpadding-top%3A20px%3B%7D%7D%0A%5D%5D%26gt%3B%0A%20%20%20%20.toString%28%29%0A%20%20%20%20.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%20%20%20%20%22data%3Atext/css%2C%22%0A%20%20%20%20+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%20%20%20%20var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%20%20%20%20if%28sss.sheetRegistered%28cssURI%2C%20sss.AGENT_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28cssURI%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20if%28addFlag%29%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28cssURI%2C%20sss.AGENT_SHEET%29%3B%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7Bthis.setSheet%28this._cssURI%2C%20true%29%3B%7D%0A%0A/*%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438*/%0Adocument.getElementById%28%22urlbar%22%29.addEventListener%28%22popupshowing%22%2C%20function%28event%29%20%7B%0A%09const%20eltID%20%3D%20%22pasteandgo-menuitem%22%3B%0A%09var%20menupopup%20%3D%20event.originalTarget%3B%0A%09var%20refChild%20%3D%20menupopup.getElementsByAttribute%28%22cmd%22%2C%20%22cmd_paste%22%29%5B0%5D%3B%0A%09var%20canPaste%20%3D%20refChild.getAttribute%28%22disabled%22%29%20%3D%3D%20%22true%22%3B%0A%09var%20menuitem%20%3D%20document.getElementById%28eltID%29%3B%0A%09if%20%28%21menuitem%29%20%7B%0A%09%09var%20pasteAndGo%20%3D%20function%28event%29%20%7B%0A%09%09%09goDoCommand%28%22cmd_paste%22%29%3B%0A%09%09%09if%20%28%22handleURLBarCommand%22%20in%20window%29%0A%09%09%09%09//%20%5BFirefox3.0%5D%0A%09%09%09%09handleURLBarCommand%28event%29%3B%0A%09%09%09else%0A%09%09%09%09//%20%5BFirefox3.5%5D%0A%09%09%09%09gURLBar.handleCommand%28event%29%3B%0A%09%09%09menupopup.hidePopup%28%29%3B%0A%09%09%7D%3B%0A%09%09menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09%09menuitem.id%20%3D%20eltID%3B%0A%09%09menuitem.setAttribute%28%22label%22%2C%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438%22%29%3B%0A%09%09menuitem.setAttribute%28%22accesskey%22%2C%20%22G%22%29%3B%0A%09%09menuitem.addEventListener%28%22command%22%2C%20pasteAndGo%2C%20false%29%3B%0A%09%09menupopup.insertBefore%28menuitem%2C%20refChild.nextSibling%29%3B%0A%09%7D%0A%09menuitem.setAttribute%28%22disabled%22%2C%20canPaste.toString%28%29%29%3B%0A%7D%2C%20false%29%3B%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

/*Вкладки сверху*/
 var cssStr = <![CDATA[
@-moz-document url("chrome://browser/content/browser.xul")
{.tabbrowser-strip{position:fixed;top:0px;width:100%!important;z-index:0;}
tab{-moz-user-select:-moz-none!important;z-index:0!important;-moz-border-radius-bottomleft: 0px!important;}
.tabbrowser-strip .tabbrowser-tabs{width:100%!important;}
.tab-drop-indicator-bar{position:fixed!important;
top:0px;left:0px;width:100%!important;z-index:1;}window {padding-top:20px;}}
]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.AGENT_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.AGENT_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.AGENT_SHEET);}
this.setSheet(cssURI, true);
this.onDestroy = function() {this.setSheet(this._cssURI, true);}

/*Вставить и перейти*/
document.getElementById("urlbar").addEventListener("popupshowing", function(event) {
    const eltID = "pasteandgo-menuitem";
    var menupopup = event.originalTarget;
    var refChild = menupopup.getElementsByAttribute("cmd", "cmd_paste")[0];
    var canPaste = refChild.getAttribute("disabled") == "true";
    var menuitem = document.getElementById(eltID);
    if (!menuitem) {
        var pasteAndGo = function(event) {
            goDoCommand("cmd_paste");
            if ("handleURLBarCommand" in window)
                // [Firefox3.0]
                handleURLBarCommand(event);
            else
                // [Firefox3.5]
                gURLBar.handleCommand(event);
            menupopup.hidePopup();
        };
        menuitem = document.createElement("menuitem");
        menuitem.id = eltID;
        menuitem.setAttribute("label", "Вставить и перейти");
        menuitem.setAttribute("accesskey", "G");
        menuitem.addEventListener("command", pasteAndGo, false);
        menupopup.insertBefore(menuitem, refChild.nextSibling);
    }
    menuitem.setAttribute("disabled", canPaste.toString());
}, false);

Копировать информацию вкладки & Link Tooltips & TextLink (Firefox3.6 - 4.0.1)
Добавляет в контекстное меню вкладки пункты:"Копировать название вкладки и адрес""Копировать название вкладки и адрес(HTML)""Копировать название вкладки и адрес(BBCode)", при наведении курсора на ссылку показывает в всплывающей подсказке(как в Opera) название и полный адрес ссылки,открытие текстовых адресов двойным кликом ЛКМ. После установки и вывода кнопки на панель желателен перезапуск браузера.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%26amp%3B%20Link%20Tooltips%20%26amp%3B%20TextLink%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAkVJREFUeJx9k71PU1EYxn/n3tuWUggfBkKkxhsQjUQJA+ooOpuIg4Mb8T9wJUbEhMVFRte6MNIRJ0h0IFgTIwhqNZRYVNrQNCmF2/txXofy0WuNT3KGk/f3nPO8b/IqESGkb3dGMNpmhOiYKCsp2kOCSp6gkiGoTFtXVj824ir0wNaDBYhOUF0BNwfiHlERtNmHbw4g2knHRlbuhR9wvraw+zyL8yXJ/lv+J88cxKczX2FsqHf0pWMA8Gt6/p/m9vH6aVAk+I6pC8m2YGm+nmDr4TXEX6X0qvm7i0sEGpy1WyTi4VJVX0Dr4LpFUJ7lcL3ZHLWhfRwTKLs2iXguXKZATVpnLTG7h5WbO40cH4WYDZ13T+DeG0vocgpDl+HwA1SWsYx9ql7bsCUS9KvjaUfPw7kXTWEiCRsS0/Xom5NwCIm4RgK/3xDtnZJ7KQ4+Tza3c6Sf7ybZXk/h+fW7aBdDdG0HFTmBWqspavm5JnMpO0c5l+JsD3S2g4hCxNsx8Aob2uwLwbGO0eY2Wm26O+pmANc3sQx3w9CqZco3B8J0zAag+OkppezcyRyOowNUHQPf96eM6OXFjGgn7ZmDp9XKMluvbYobMwTbjyi+sfGqOTzv2Gyh8NJnbuuMEhFKm49b4rXFrKkLyaj8qA+sCD1dELHqJs+H33vQ3WHh1IL87p4MDd8XJ7RMB+8vLYjWE1EKWMY+Cl2ftihc36TqGCi8dNe4/muZGnSw2n9Va54FWo/pQCdFuyjcvMLLKPwnHTf1WiP/B4PEHA5jCaq+AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%28function%28%29%20%7B%0A%09var%20htmlEscape%20%3D%20function%28s%29%20%7B%0A%09%09s%20%3D%20s.replace%28/%26/g%2C%20%22%26amp%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%3E/g%2C%20%22%26gt%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%3C/g%2C%20%22%26lt%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%22/g%2C%20%22%26quot%3B%22%29%3B%0A%09%09return%20s%3B%0A%09%7D%3B%0A%09var%20copyTabInfo%20%3D%20function%20%28aAsHTML%29%20%7B%0A%09%09var%20tab%20%3D%20document.popupNode%3B%0A%09%09var%20title%20%3D%20tab.label%3B%0A%09%09var%20url%20%3D%20gBrowser.getBrowserForTab%28tab%29.contentWindow.location.href%3B%0A%09%09var%20txt%20%3D%20aAsHTML%20%3F%0A%09%09%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22%27%20+%20htmlEscape%28url%29%20+%20%27%22%3E%27%20+%20htmlEscape%28title%29%20+%20%27%3C/a%3E%27%20%3A%0A%09%09%20%20%20%20%20%20%20%20%20%20title%20+%20%22%5Cn%22%20+%20url%3B%0A%09%09Cc%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%09%09.getService%28Ci.nsIClipboardHelper%29%0A%09%09.copyString%28txt%29%3B%0A%09%7D%3B%0A%09var%20copyTabBBC%20%3D%20function%20%28aAsBBC%29%20%7B%0A%20%20%20%20%20%20%20%20var%20tab%20%3D%20document.popupNode%3B%0A%20%20%20%20%20%20%20%20var%20title%20%3D%20tab.label%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20gBrowser.getBrowserForTab%28tab%29.contentWindow.location.href%3B%0A%20%20%20%20%20%20%20%20var%20txt%20%3D%20aAsBBC%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Burl%3D%27%20+%20htmlEscape%28url%29%20+%20%27%5D%27%20+%20htmlEscape%28title%29%20+%20%27%5B/url%5D%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%20+%20%22%5Cn%22%20+%20url%3B%0A%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Ci.nsIClipboardHelper%29%0A%20%20%20%20%20%20%20%20.copyString%28txt%29%3B%0A%20%20%20%20%7D%3B%0A%09var%20menuitem1%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09menuitem1.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%22%29%3B%0A%09menuitem1.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabInfo%28false%29%3B%20%7D%2C%20false%29%3B%0A%09var%20menuitem2%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09menuitem2.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%20%28HTML%29%22%29%3B%0A%09menuitem2.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabInfo%28true%29%3B%20%7D%2C%20false%29%3B%0A%09var%20menuitem3%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20menuitem3.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%20%28BBCode%29%22%29%3B%0A%20%20%20%20menuitem3.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabBBC%28true%29%3B%20%7D%2C%20false%29%3B%0A%09setTimeout%28function%28%29%20%7B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem1%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem2%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem3%29%3B%0A%09%7D%2C%200%29%3B%0A%7D%29%28%29%3B%0A%0A/*%20%3A%3A%3A%3A%3A%3A%3A%3A%20Link%20Tooltips%20%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%20*/%0A%0AgetBrowser%28%29.addEventListener%28%22DOMContentLoaded%22%2C%20function%28aEvent%29%20%7B%0A%09var%20doc%20%3D%20new%20XPCNativeWrapper%28aEvent.originalTarget%29%3B%0A%09var%20links%20%3D%20doc.evaluate%28%22//a%5B@href%20and%20@href%21%3D%27%27%5D%22%2C%20doc%2C%20null%2C%20XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE%2C%20null%29%3B%0A%09%0A%09for%20%28var%20link%2C%20i%20%3D%200%3B%20%28link%20%3D%20links.snapshotItem%28i%29%29%3B%20i++%29%0A%09%7B%0A%09%09link.title%20%3D%20link.title%20%3F%20link.title%20+%20%22%20%3C%22%20+%20link.href%20+%20%22%3E%22%20%3A%20link.href%3B%0A%09%7D%0A%7D%2C%20true%29%3B%0A%0Afunction%20ucjs_textlink%28event%29%7B%0A%0A%20%20if%28event.button%20%21%3D%200%20%26%26%20event.keyCode%20%21%3D%2013%29%20return%3B%0A%0A%0A%0A%20%20var%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%0A%0A%0A%20%20const%20relative%20%3D%20true%3B%20//%u76F8%u5BFEurl%u3092%u89E3%u6C7A%u3059%u308B%u304B%u3069%u3046%u304B%0A%0A%0A%0A%20%20const%20ioService%20%3D%20Components.classes%5B%27@mozilla.org/network/io-service%3B1%27%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIIOService%29%3B%0A%0A%0A%0A%20%20const%20urlRegex%20%3D%20/%28%28%28h%3Ft%29%3Ftps%3F%7Ch..ps%3F%7Cftp%7C%28%28%5Cuff48%29%3F%5Cuff54%29%3F%5Cuff54%5Cuff50%28%5Cuff53%29%3F%7C%5Cuff48..%5Cuff50%28%5Cuff53%29%3F%7C%5Cuff46%5Cuff54%5Cuff50%29%28%3A%5C/%5C/%7C%5Cuff1a%5C/%5C/%7C%3A%5Cuff0f%5Cuff0f%7C%5Cuff1a%5Cuff0f%5Cuff0f%29%5B-_.%21%7E*%27%28%29%7Ca-zA-Z0-9%3B%3A%5C/%3F%2C@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D*%5B-_.%21%7E*%29%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D+%29/ig%3B%0A%0A%20%20const%20urlRegex1%20%3D%20/%28%5B-_.%21%7E*%27%28%29%7Ca-zA-Z0-9%3B%3A%5C/%3F%2C@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D*%5B.%5Cuff0e%5D+%5B-_.%21%7E*%27%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5D+%5B.%5Cuff0e/%5Cuff0f%5D*%5B-_.%21%7E*%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5D+%29/ig%3B%0A%0A%20%20const%20urlRx%20%3D%20/%5E%28ttp%7Ctp%7Ch..p%7C%5Cuff54%5Cuff54%5Cuff50%7C%5Cuff54%5Cuff50%7C%5Cuff48..%5Cuff50%29/i%3B%0A%0A%20%20const%20urlRx1%20%3D%20/%28%3A%5C/%5C/%7C%5Cuff1a%5C/%5C/%7C%3A%5Cuff0f%5Cuff0f%7C%5Cuff1a%5Cuff0f%5Cuff0f%29/i%3B%0A%0A%20%20const%20mailRx%20%3D%20/%28%5E%28mailto%3A%7C%5Cuff4d%5Cuff41%5Cuff49%5Cuff4c%5Cuff54%5Cuff4f%5Cuff1a%29%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%22%28%3F%3A%5C%5C%5B%5E%5Cr%5Cn%5D%7C%5B%5E%5C%5C%22%5D%29*%22%29%29%29%5C@%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%5C%5B%28%3F%3A%5C%5C%5CS%7C%5B%5Cx21-%5Cx5a%5Cx5e-%5Cx7e%5D%29*%5C%5D%29%29%29%24%29/%3B%0A%0A%20%20const%20mailRx1%20%3D%20/%28%5E%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%22%28%3F%3A%5C%5C%5B%5E%5Cr%5Cn%5D%7C%5B%5E%5C%5C%22%5D%29*%22%29%29%29%5C@%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%5C%5B%28%3F%3A%5C%5C%5CS%7C%5B%5Cx21-%5Cx5a%5Cx5e-%5Cx7e%5D%29*%5C%5D%29%29%29%24%29/%3B%0A%0A%0A%0A//%u30C9%u30AD%u30E5%u30E1%u30F3%u30C8%u3068%u30B3%u30F3%u30C6%u30F3%u30C8%u30BF%u30A4%u30D7%0A%0A%20%20var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%0A%20%20if%28doc.contentType%20%21%3D%20%27text/plain%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27text/html%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27application/xml%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27application/xhtml+xml%27%29%20return%3B%0A%0A%0A%0A%20%20//designMode%u306A%u3089%u4F55%u3082%u3057%u306A%u3044%0A%0A%20%20if%20%28Components.lookupMethod%28doc%2C%20%27designMode%27%29.call%28doc%29%20%3D%3D%20%27on%27%29%20return%3B%0A%0A%0A%0A%20%20var%20win%20%3D%20doc.defaultView%3B%0A%0A%20%20if%28%21win%29return%3B%0A%0A%0A%0A%20%20var%20str1%2C%20text%2C%20str2%3B%0A%0A%0A%0A%20%20//textarea%20%u304B%u3069%u3046%u304B%0A%0A%20%20var%20node%20%3D%20isParentEditableNode%28document.commandDispatcher.focusedElement%29%3B%0A%0A%20%20if%20%28%21node%29%20%7B%0A%0A%20%20//%20%u3053%u306Eif%20%u30D6%u30ED%u30C3%u30AF%u306F%20textarea%u7B49%u4EE5%u5916%u306E%u51E6%u7406%0A%0A%20%20//%u30C0%u30D6%u30EB%u30AF%u30EA%u30C3%u30AF%u3067%u9078%u629E%u3055%u308C%u305F%u9078%u629E%u6587%u5B57%u5217%u306E%u30EC%u30F3%u30B8%u3092%u5F97%u308B%0A%0A%20%20%20%20var%20selection%20%3D%20win.getSelection%28%29%3B%0A%0A%20%20%20%20var%20selRange%3B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20selRange%20%3D%20selection.getRangeAt%280%29%3B%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%0A%0A%20%20%20%20%20%20selRange%20%3D%20selection%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%28%21selRange%29return%3B%0A%0A%20%20//%u30EC%u30F3%u30B8%u306E%u30CE%u30FC%u30C9%u306A%u3069%0A%0A%20%20%20%20text%20%3D%20selection.toString%28%29%3B%0A%0A%20%20%20%20if%28text%20%3D%3D%20%27%27%29%20return%3B%0A%0A%20%20//debug%28text%29%3B%0A%0A%20%20%20%20var%20sNode%20%3D%20selRange.startContainer%3B%20//debug%28sNode.nodeName%29%3B%0A%0A%20%20%20%20var%20soffset%20%3D%20selRange.startOffset%3B%0A%0A%20%20%20%20var%20eNode%20%3D%20selRange.endContainer%3B%20//debug%28eNode.nodeName%29%3B%0A%0A%20%20%20%20var%20eoffset%20%3D%20selRange.endOffset%3B%0A%0A%20%20%20%20if%20%28sNode%20%21%3D%20eNode%29%7B%0A%0A%20%20%20%20%20%20eNode%20%3D%20sNode%3B%0A%0A%20%20%20%20%20%20eoffset%20%3D%20soffset%20+%20text.length%20-%201%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20sOyaNode%20%3D%20oyaNode%28sNode%29%3B%0A%0A%20%20%20%20var%20eOyaNode%20%3D%20oyaNode%28eNode%29%3B%0A%0A%20%20%20%20var%20root%3B%0A%0A%20%20%20%20if%28sOyaNode%20%3D%3D%20eOyaNode%29%0A%0A%20%20%20%20%20%20root%20%3D%20sOyaNode%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20root%20%3D%20doc%3B%0A%0A%20%20%20%20if%20%28%21root%29%0A%0A%20%20%20%20%20%20return%3B%0A%0A//debug%28%22eOyaNode%20%22%20+%20eOyaNode.nodeName%29%3B%0A%0A%0A%0A%20%20//%u89AA%u30D6%u30ED%u30C3%u30AF%u8981%u7D20%u306E%u6587%u5B57%u5217%u3092%u3059%u3079%u3066%u5F97%u308B%0A%0A%20%20%20%20const%20allowedParents%20%3D%20%5B%0A%0A%20%20%20%20%20%20%20%20/*%22a%22%2C*/%22abbr%22%2C%20%22acronym%22%2C%20%22address%22%2C%20%22applet%22%2C%20%22b%22%2C%20%22bdo%22%2C%20%22big%22%2C%20%22blockquote%22%2C%20%22body%22%2C%0A%0A%20%20%20%20%20%20%20%20%22caption%22%2C%20%22center%22%2C%20%22cite%22%2C%20%22code%22%2C%20%22dd%22%2C%20%22del%22%2C%20%22dir%22%2C%20%22div%22%2C%20%22dfn%22%2C%20%22dl%22%2C%20%22dt%22%2C%20%22em%22%2C%0A%0A%20%20%20%20%20%20%20%20%22fieldset%22%2C%20%22font%22%2C%20%22form%22%2C%20%22h1%22%2C%20%22h2%22%2C%20%22h3%22%2C%20%22h4%22%2C%20%22h5%22%2C%20%22h6%22%2C%20%22i%22%2C%20%22iframe%22%2C%0A%0A%20%20%20%20%20%20%20%20%22ins%22%2C%20%22kdb%22%2C%20%22li%22%2C%20%22menu%22%2C%20%22noframes%22%2C%20%22noscript%22%2C%20%22object%22%2C%20%22ol%22%2C%20%22p%22%2C%20%22pre%22%2C%20%22q%22%2C%20%22samp%22%2C%20%22small%22%2C%20%22span%22%2C%20%22strike%22%2C%0A%0A%20%20%20%20%20%20%20%20%22s%22%2C%20%22strong%22%2C%20%22sub%22%2C%20%22sup%22%2C%20%22table%22%2C%20%22td%22%2C%20%22th%22%2C%20%22thead%22%2C%20%22tt%22%2C%20%22u%22%2C%20%22var%22%0A%0A%20%20%20%20%20%20%20%20%5D%3B%0A%0A%20%20%20%20var%20xpath%20%3D%20%22.//text%28%29%5B%28parent%3A%3A%22%20+%20allowedParents.join%28%22%20or%20parent%3A%3A%22%29%20+%20%22%29%5D%22%3B%0A%0A%0A%0A%20%20%20%20var%20candidates%20%3D%20doc.evaluate%28xpath%2C%20root%2C%20null%2C%20XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE%2C%20null%29%3B%0A%0A//debug%28%22candidates.snapshotLength%20%22%20+%20candidates.snapshotLength%29%3B%0A%0A%20%20//%u30EC%u30F3%u30B8%u3088%u308A%u524D%u306B%u3042%u308B%u6587%u5B57%u5217%0A%0A%20%20%20%20var%20i1%20%3D%20-%201%3B%0A%0A%20%20%20%20for%20%28var%20i%20%3D%20i1%20+%201%2C%20len%20%3D%20candidates.snapshotLength%3B%20i%20%3C%20len%3B%20i++%29%20%7B%0A%0A%20%20%20%20%20%20if%28candidates.snapshotItem%28i%29%20%21%3D%20sNode%29%20continue%3B%0A%0A%20%20%20%20%20%20i1%20%3D%20i%20-%201%3B%0A%0A%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20str1%20%3D%22%22%3B%0A%0A%20%20%20%20if%20%28i%20%3E%3D%200%29%20%7B%0A%0A%20%20%20%20%20%20for%20%28var%20i%20%3D%20i1%3B%20i%20%3E%3D%200%20%3B%20i--%29%7B%0A%0A%20%20%20%20%20%20%20%20if%28sOyaNode%20%3D%3D%20oyaNode%28candidates.snapshotItem%28i%29%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28candidates.snapshotItem%28i%29.nextSibling%20%26%26%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20/%5Ebr%24/i.test%28candidates.snapshotItem%28i%29.nextSibling.nodeName%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20//debug%28candidates.snapshotItem%28i%29.nodeValue%20+%20%22%20%20%22%20+%20candidates.snapshotItem%28i%29.nextSibling.nodeName%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20str1%20%3D%20candidates.snapshotItem%28i%29.nodeValue%20+%20str1%3B%0A%0A//debug%28%22str1%20%22+str1%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28/%5B%20%u3000%5D/.test%28str1%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20str2%20%3D%20str1%3B%0A%0A%20%20%20%20if%28sNode.nodeValue%20%26%26%20soffset%20%3E%200%29%20str1%20%3D%20str1%20+%20sNode.nodeValue.substr%280%2Csoffset%29%3B%0A%0A%0A%0A%20%20//%u30EC%u30F3%u30B8%u3088%u308A%u5F8C%u308D%u306B%u3042%u308B%u6587%u5B57%u5217%0A%0A%20%20%20%20for%28var%20i%20%3D%20i1%20+%201%2C%20len%20%3D%20candidates.snapshotLength%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A%20%20%20%20%20%20if%28sOyaNode%20%3D%3D%20oyaNode%28candidates.snapshotItem%28i%29%29%29%7B%0A%0A%20%20%20%20%20%20%20%20str2%20%3D%20str2%20+%20candidates.snapshotItem%28i%29.nodeValue%3B%0A%0A//debug%28%22str2%20%22+str2%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28i%20%3E%20i1%20+%201%20%26%26%20/%5B%20%u3000%5D/.test%28candidates.snapshotItem%28i%29.nodeValue%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28candidates.snapshotItem%28i%29.nextSibling%20%26%26%0A%0A%20%20%20%20%20%20%20%20%20%20/%5Ebr%24/i.test%28candidates.snapshotItem%28i%29.nextSibling.nodeName%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20str2%20%3D%20str2.substr%28str1.length%20+%20text.length%29%3B%0A%0A%20%20%7D%20else%20%7B%0A%0A%20%20%20%20//%20%u3053%u306E%20else%u30D6%u30ED%u30C3%u30AF%u306F%20textarea%u7B49%u306E%u51E6%u7406%0A%0A%20%20%20%20//%20readonly%u3067%u306A%u3044%u306A%u3089%u4F55%u3082%u3057%u306A%u3044%0A%0A%20%20%20if%20%28%21node.hasAttribute%28%22readonly%22%29%29%0A%0A%20%20%20%20%20return%3B%0A%0A%20%20%20if%20%28node%20%26%26%0A%0A%20%20%20%20%20%20%28node.type%20%3D%3D%20%22text%22%20%7C%7C%20node.type%20%3D%3D%20%22textarea%22%29%20%26%26%0A%0A%20%20%20%20%20%20%27selectionStart%27%20in%20node%20%26%26%0A%0A%20%20%20%20%20%20node.selectionStart%20%21%3D%20node.selectionEnd%29%20%7B%0A%0A%20%20%20%20%20%20var%20offsetStart%20%3D%20Math.min%28node.selectionStart%2C%20node.selectionEnd%29%3B%0A%0A%20%20%20%20%20%20var%20offsetEnd%20%20%20%3D%20Math.max%28node.selectionStart%2C%20node.selectionEnd%29%3B%0A%0A%20%20%20%20%20%20str1%20%3D%20node.value.substr%280%2C%20offsetStart%29%3B%0A%0A%20%20%20%20%20%20text%20%3D%20node.value.substr%28offsetStart%2C%20offsetEnd-offsetStart%29%3B%0A%0A%20%20%20%20%20%20str2%20%3D%20node.value.substr%28offsetEnd%29%3B%0A%0A%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067%u306E%u30EC%u30F3%u30B8%u306E%u4F4D%u7F6E%u3092%u5F97%u308B%0A%0A%20%20var%20allStr%20%3D%20str1%20+%20text%20+%20str2%3B%0A%0A%20%20var%20si%20%3D%20str1.length%0A%0A%20%20var%20ei%20%3D%20si%20+%20text.length%3B%0A%0A//%u5168%u89D2%u62EC%u5F27%u8ABF%u6574%0A%0A%20%20while%28text.match%28/%5E%5B%5Cu3001%5Cu3002%5Cuff08%5Cuff5b%5Cuff3b%5Cu300c%5Cu3014%5Cu3008%5Cu300a%5Cu300e%5Cu3010%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226a%5Cuff1c%5Cuff09%5Cuff5d%5Cuff3d%5Cu300d%5Cu3015%5Cu3009%5Cu300b%5Cu300f%5Cu3011%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226b%5Cuff1e%5D/%29%29%7B%0A%0A%20%20%20%20si%20%3D%20si%20+%201%3B%0A%0A%20%20%20%20text%20%3D%20text.substr%281%29%3B%0A%0A%20%20%7D%0A%0A%20%20while%28text.match%28/%5B%5Cs%5Cu3001%5Cu3002%5Cuff08%5Cuff5b%5Cuff3b%5Cu300c%5Cu3014%5Cu3008%5Cu300a%5Cu300e%5Cu3010%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226a%5Cuff1c%5Cuff09%5Cuff5d%5Cuff3d%5Cu300d%5Cu3015%5Cu3009%5Cu300b%5Cu300f%5Cu3011%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226b%5Cuff1e%5D%24/%29%29%7B%0A%0A%20%20%20%20ei%20%3D%20ei%20-%201%3B%0A%0A%20%20%20%20text%20%3D%20text.substr%280%2Ctext.length%20-1%29%3B%0A%0A%20%20%7D%0A%0A%20%20//%u6587%u672B%u306E.%u306F%u7121%u3044%u3053%u3068%u306B%0A%0A%20%20allStr%20%3D%20allStr.replace%28/%5C.%24/%20%2C%27%27%29%3B%0A%0A%0A%0A//debug%28%222%20%22%20+%20str2%29%3B%0A%0A//debug%28%22Str%20%22%20+%20text%29%3B%0A%0A//debug%28%221%20%22%20+%20str1%29%3B%0A%0A//debug%28%22all%20%22%20+%20allStr%29%3B%0A%0A%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067URL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u3092%u914D%u5217%u3068%u3057%u3066%u5F97%u308B%0A%0A%20%20var%20i1%2C%20i2%3B%0A%0A%20%20var%20arrUrl%20%3D%20allStr.match%28urlRegex%29%3B%0A%0A%20%20if%28arrUrl%29%7B%0A%0A//%u898B%u3064%u304B%u3063%u305FURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u308B%u304B%u3069%u3046%u304B%0A%0A%20%20%20%20i2%3D0%0A%0A%20%20%20%20for%28var%20i%20%3D0%2Clen%20%3D%20arrUrl.length%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A//debug%28i%20+%20%22%5D%20%22%20+%20arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20%20%20i1%20%3D%20allStr.indexOf%28arrUrl%5Bi%5D%2Ci2%29%3B%0A%0A%20%20%20%20%20%20i2%20%3D%20i1%20+%20arrUrl%5Bi%5D.length%3B%0A%0A//debug%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%3B%0A%0A%20%20%20%20%20%20if%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%7B%0A%0A%20%20%20%20%20%20%20%20//%u3053%u306EURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u305F%u306E%u3067%2C%u3053%u308C%u3092URL%u3068%u3057%u3066%u65B0%u3057%u3044%u30BF%u30D6%u3067%u958B%u304D%u307E%u3057%u3087%u3046%0A%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20arrUrl%5Bi%5D%3B%0A%0A%20%20%20%20%20%20%20%20//%20%7E%u7B49%20%u3092%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cu301c/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cuffe3/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20%20%20//%20%u672B%u5C3E%u306E%20%29%u3084%5D%20%u306E%u8ABF%u6574%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5C%29%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%28%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%29%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%5B%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5B.%2C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5B.%2C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20//%20ttp%u7B49%u3092%20http%u7B49%u306B%20%u304A%u3088%u3073%20%20%3A//%20%u3092%20%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20/%5E%28ftp%7C%5Cuff46%5Cuff54%5Cuff50%29/i.test%28url%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20url.replace%28urlRx1%2C%27%3A//%27%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20url.replace%28urlRx%2C%27http%27%29.replace%28urlRx1%2C%27%3A//%27%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20URIFixup%20%3D%20Components.classes%5B%27@mozilla.org/docshell/urifixup%3B1%27%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIURIFixup%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20uri%20%3D%20URIFixup.createFixupURI%28%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20url%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20URIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP%20%29%3B%0A%0A%20%20%20%20%20%20%20%20if%28%21uri%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21isValidTld%28uri%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%20%20uri%20%3D%20ioService.newURI%28uri.spec%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20%20%20debug%28%27Parsing%20ucjs_textlink%3A%20%27+%28%28new%20Date%28%29%29.getTime%28%29-Start%29%20+%27msec%5Cn%27%29%3B%0A%0A%20%20%20%20%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%28event.shiftKey%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20saveAsURL%28uri%2Cdoc%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20openNewTab%28uri%29%3B%0A%0A%20%20%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%20%20if%28%20%21relative%20%29%20return%3B%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067%u76F8%u5BFEURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u3092%u914D%u5217%u3068%u3057%u3066%u5F97%u308B%0A%0A%20%20arrUrl%20%3D%20allStr.match%28urlRegex1%29%3B%0A%0A%20%20if%28%21arrUrl%29%20return%3B%0A%0A%20%20i2%3D0%0A%0A%20%20for%28var%20i%20%3D0%2Clen%20%3D%20arrUrl.length%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A//debug%28%22Relative%20%22%20+%20arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20i1%20%3D%20allStr.indexOf%28arrUrl%5Bi%5D%2Ci2%29%3B%0A%0A%20%20%20%20i2%20%3D%20i1%20+%20arrUrl%5Bi%5D.length%3B%0A%0A%0A%0A//debug%28i1%20+%22%20%22+%20si%20+%22%20%22+%20ei%20+%22%20%22+%20i2%29%3B%0A%0A%20%20%20%20if%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%7B%0A%0A//debug%28arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20%20%20//%u3053%u306EURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u305F%u306E%u3067%2C%u3053%u308C%u3092URL%u3068%u3057%u3066%u65B0%u3057%u3044%u30BF%u30D6%u3067%u958B%u304D%u307E%u3057%u3087%u3046%0A%0A%20%20%20%20%20%20var%20url%20%3D%20arrUrl%5Bi%5D%3B%0A%0A%20%20%20%20%20%20//%20%7E%u7B49%20%u3092%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cu301c/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cuffe3/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20//%20%u672B%u5C3E%u306E%20%29%u3084%5D%20%u306E%u8ABF%u6574%0A%0A%20%20%20%20%20%20if%20%28/%5C%29%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%28%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%29%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/%5C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%5B%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/%5B.%2C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5B.%2C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20host%u540D%u304C%20ftp%20%u3067%u59CB%u307E%u308B%u306A%u3089%20ftp%3A//%u306B%0A%0A%20%20%20%20%20%20if%20%28/%5Eftp/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22ftp%3A//%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20host%u540D%u304C%20irc%20%u3067%u59CB%u307E%u308B%u306A%u3089%20irc%3A%u306B%0A%0A%20%20%20%20%20%20if%20%28/%5Eirc/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22irc%3A//%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%u30E1%u30FC%u30EB%3F%0A%0A%20%20%20%20%20%20if%20%28mailRx1.test%28url%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22mailto%3A%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%u76F8%u5BFE%u30D1%u30B9%u306E%u51E6%u7406%0A%0A%20%20%20%20%20%20if%28url.match%28/%5E%5C.%7B1%2C%7D/%29%29%7B%0A%0A%20%20%20%20%20%20%20%20var%20baseURI%20%3D%20ioService.newURI%28win.document.documentURI%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20ioService.newURI%28url%2C%20null%2C%20baseURI%29.spec%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A//debug%28url.indexOf%28url.match%28urlRegex%29%29%29%3B%0A%0A%20%20%20%20%20%20if%20%28%21mailRx.test%28url%29%20%26%26%20url.indexOf%28url.match%28urlRegex%29%29%20%3E%201%29%20return%3B%0A%0A%20%20%20%20%20%20var%20URIFixup%20%3D%20Components.classes%5B%27@mozilla.org/docshell/urifixup%3B1%27%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIURIFixup%29%3B%0A%0A%20%20%20%20%20%20try%7B%0A%0A//debug%28url%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20uri%20%3D%20URIFixup.createFixupURI%28%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20URIFixup.FIXUP_FLAG_NONE%20%29%3B%20//FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP%u2192FIXUP_FLAG_NONE%0A%0A%20%20%20%20%20%20%7Dcatch%28e%29%7Breturn%3B%7D%0A%0A%20%20%20%20%20%20if%28%21uri%29%20return%3B%0A%0A%0A%0A%20%20%20%20%20%20if%20%28%21isValidTld%28uri%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%7D%0A%0Adebug%28url%29%3B%0A%0A%20%20%20%20%20%20uri%20%3D%20ioService.newURI%28uri.spec%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20debug%28%27Parsing%20ucjs_textlink%3A%20%27+%28%28new%20Date%28%29%29.getTime%28%29-Start%29%20+%27msec%5Cn%27+uri.spec%29%3B%0A%0A%20%20%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20%20%20if%28event.shiftKey%29%0A%0A%20%20%20%20%20%20%20%20%20%20saveAsURL%28uri%2Cdoc%29%3B%0A%0A%20%20%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20%20%20openNewTab%28uri%29%3B%0A%0A%20%20%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20activeBrowser%28%29%20%7B%0A%0A%20%20%20%20return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%20%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%20gBrowser%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20_getFocusedWindow%28%29%7B%20//%u73FE%u5728%u306E%u30A6%u30A4%u30F3%u30C9%u30A6%u3092%u5F97%u308B%0A%0A%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20if%20%28%21focusedWindow%20%7C%7C%20focusedWindow%20%3D%3D%20window%29%0A%0A%20%20%20%20%20%20%20%20return%20window._content%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20return%20focusedWindow%3B%0A%0A%20%20%7D%0A%0A%0A%0A//%u30EC%u30F3%u30B8%u306E%u8981%u7D20%u304C%u6240%u5C5E%u3059%u308B%u89AA%u30D6%u30ED%u30C3%u30AF%u8981%u7D20%u3092%u5F97%u308B%0A%0A%20%20function%20oyaNode%28aNode%29%7B%0A%0A%20%20%20%20var%20pNode%20%3D%20aNode.parentNode%3B%0A%0A%20%20%20%20while%28pNode%20%26%26%20/%5E%28a%7Cabbr%7Cacronym%7Cb%7Cbdo%7Cbig%7Cbody%7Ccode%7Cdfn%7Cem%7Cfont%7Ci%7Ckbd%7Clabel%7Cpre%7Cq%7Csamp%7Csmall%7Cspan%7Cstrong%7Csub%7Csup%7Ctt%7Cvar%7Cwbr%29%24/i.test%28pNode.nodeName%29%20%29%7B%0A%0A%20%20%20%20%20%20pNode%20%3D%20pNode.parentNode%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20pNode%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20isParentEditableNode%28node%29%7B%0A%0A%20%20%20%20//if%20%28Components.lookupMethod%28node.ownerDocument%2C%20%27designMode%27%29.call%28node.ownerDocument%29%20%3D%3D%20%27on%27%29%0A%0A%20%20%20%20//%20%20return%20node%3B%0A%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/input%7Ctextarea/.test%28node.localName%29%29%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20if%20%28node.isContentEditable%20%7C%7C%20node.contentEditable%3D%3D%27true%27%29%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20null%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20isValidTld%28aURI%29%7B%0A%0A%20%20%20%20const%20regexpTLD%20%3D%20new%20RegExp%28%22%5C%5C.%28arpa%7Cint%7Cnato%7Ccom%7Cnet%7Corg%7Cinfo%7Cbiz%7Cname%7Cpro%7Cmuseum%7Ccoop%7Caero%7Cedu%7Cgov%7Cmil%7Cac%7Cad%7Cae%7Caf%7Cag%7Cai%7Cal%7Cam%7Can%7Cao%7Caq%7Car%7Cas%7Cat%7Cau%7Caw%7Cax%7Caz%7Cba%7Cbb%7Cbd%7Cbe%7Cbf%7Cbg%7Cbh%7Cbi%7Cbj%7Cbm%7Cbn%7Cbo%7Cbr%7Cbs%7Cbt%7Cbu%7Cbv%7Cbw%7Cby%7Cbz%7Cca%7Ccc%7Ccd%7Ccf%7Ccg%7Cch%7Cci%7Cck%7Ccl%7Ccm%7Ccn%7Cco%7Ccp%7Ccr%7Ccs%7Csk%7Ccu%7Ccv%7Ccx%7Ccy%7Ccz%7Cdd%7Cde%7Cdg%7Cdj%7Cdk%7Cdm%7Cdo%7Cdz%7Cea%7Cec%7Cee%7Ceg%7Ceh%7Cer%7Ces%7Cet%7Cfi%7Cfj%7Cfk%7Cfm%7Cfo%7Cfr%7Cfx%7Cga%7Cgb%7Cgd%7Cge%7Cgf%7Cgg%7Cgh%7Cgi%7Cgl%7Cgm%7Cgn%7Cgp%7Cgq%7Cgr%7Cgs%7Cgt%7Cgu%7Cgw%7Cgy%7Chk%7Chm%7Chn%7Chr%7Cht%7Chu%7Cic%7Cid%7Cie%7Cil%7Cim%7Cin%7Cio%7Ciq%7Cir%7Cis%7Cit%7Cje%7Cjm%7Cjo%7Cjp%7Cke%7Ckg%7Ckh%7Cki%7Ckm%7Ckn%7Ckp%7Ckr%7Ckw%7Cky%7Ckz%7Cla%7Clb%7Clc%7Cli%7Clk%7Clr%7Cls%7Clt%7Clu%7Clv%7Cly%7Cma%7Cmc%7Cmd%7Cmg%7Cmh%7Cmk%7Cml%7Cmm%7Cmn%7Cmo%7Cmp%7Cmq%7Cmr%7Cms%7Cmt%7Cmu%7Cmv%7Cmw%7Cmx%7Cmy%7Cmz%7Cna%7Cnc%7Cne%7Cnf%7Cng%7Cni%7Cnl%7Cno%7Cnp%7Cnr%7Cnt%7Cnu%7Cnz%7Com%7Cpa%7Cpc%7Cpe%7Cpf%7Cpg%7Cph%7Cpk%7Cpl%7Cpm%7Cpn%7Cpr%7Cps%7Cpt%7Cpw%7Cpy%7Cqa%7Cre%7Cro%7Cru%7Crw%7Csa%7Csb%7Csc%7Csd%7Cse%7Csg%7Csh%7Csi%7Csj%7Csk%7Csl%7Csm%7Csn%7Cso%7Csr%7Cst%7Csu%7Csv%7Csy%7Csz%7Cta%7Ctc%7Ctd%7Ctf%7Ctg%7Cth%7Ctj%7Ctk%7Ctm%7Ctn%7Cto%7Ctp%7Ctr%7Ctt%7Ctv%7Ctw%7Ctz%7Cua%7Cug%7Cuk%7Cum%7Cus%7Cuy%7Cuz%7Cva%7Cvc%7Cve%7Cvg%7Cvi%7Cvn%7Cvu%7Cwf%7Cwg%7Cws%7Cyd%7Cye%7Cyt%7Cyu%7Cza%7Czm%7Czr%7Czw%29%5C%5C.%3F%24%22%2C%22%22%29%3B%0A%0A%20%20%20%20const%20regexpIP%20%3D%20new%20RegExp%28%22%5E%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%24%22%2C%22%22%29%3B%0A%0A%20%20%20%20var%20host%2C%20tlds%3B%0A%0A%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20host%20%3D%20aURI.host.split%28%27/%27%29%5B0%5D%3B%0A%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20if%20%28aURI.spec.match%28/%5E%28.+%3F%5C/%5C/%28%3F%3A%5B%5E%5C/%5D+@%29%3F%29%28%5B%5E%5C/%5D+%29%28%3A%5Cd+%29%3F%28%3F%3A.*%29%24/%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20host%20%3D%20RegExp.%242%3B%0A%0A%20%20%20%20%20%20%7D%20else%20if%20%28aURI.spec.match%28/%5E%28mailto%3A%28%3F%3A%5B%5E%5C/%5D+@%29%3F%29%28%5B%5E%5C/%5D+%29%28%3A%5Cd+%29%3F%28%3F%3A.*%29%24/%29%29%7B%0A%0A%20%20%20%20%20%20%20%20host%20%3D%20RegExp.%242%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A//debug%28%22host%20%20%22%20+%20host%29%3B%0A%0A%20%20%20%20if%20%28%21host%29%0A%0A%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20if%20%28getVer%28%29%20%3C%203.0%29%7B%0A%0A%20%20%20%20%20%20if%20%28regexpTLD.test%28host%29%29%0A%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%0A%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20return%20%28regexpIP.test%28host%29%29%3B%0A%0A%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20var%20eTLDService%20%3D%20Components.classes%5B%22@mozilla.org/network/effective-tld-service%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIEffectiveTLDService%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20var%20tld%20%3D%20eTLDService.getPublicSuffixFromHost%28host%29%3B%0A%0A%20%20%20%20%20%20%20%20return%20regexpTLD.test%28%27.%27+tld%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20return%20%28regexpIP.test%28host%29%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20saveAsURL%28uri%2Cdoc%29%7B%0A%0A%20%20%20%20var%20linkText%20%3D%20uri.spec%3B%0A%0A%20%20%20%20//Thunderbird%0A%0A%20%20%20%20if%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20%20%20%20%20//%20URL%20Loading%20Security%20Check%0A%0A%20%20%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20%20%20var%20sourceURL%20%3D%20getContentFrameURI%28focusedWindow%29%3B%0A%0A%20%20%20%20%20%20const%20nsIScriptSecurityManager%20%3D%20Components.interfaces.nsIScriptSecurityManager%3B%0A%0A%20%20%20%20%20%20var%20secMan%20%3D%20Components.classes%5B%22@mozilla.org/scriptsecuritymanager%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28nsIScriptSecurityManager%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20secMan.checkLoadURIStr%28sourceURL%2C%20uri.spec%2C%20nsIScriptSecurityManager.STANDARD%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20throw%20%22Load%20of%20%22%20+%20url%20+%20%22%20denied.%22%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20saveURL%28%20uri.spec%2C%20linkText%2C%20null%2C%20true%20%29%3B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20//%20urlSecurityCheck%20wanted%20a%20URL-as-string%20for%20Fx%202.0%2C%20but%20an%20nsIPrincipal%20on%20trunk%0A%0A%20%20%20%20if%28activeBrowser%28%29.contentPrincipal%29%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.contentPrincipal%2CCi.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL%29%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.currentURI.spec%2CCi.nsIScriptSecurityManager.DISALLOW_SCRIPT%29%3B%0A%0A%0A%0A%20%20%20%20saveURL%28%20uri.spec%2C%20linkText%2C%20null%2C%20true%2C%20false%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20makeURI%28doc.location.href%2C%20doc.characterSet%29%20%29%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20openNewTab%28uri%29%7B%0A%0A%20%20%20%20//Thunderbird%0A%0A%20%20%20%20if%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20%20%20%20%20//%20Make%20sure%20we%20are%20allowed%20to%20open%20this%20URL%0A%0A%20%20%20%20%20%20//%20URL%20Loading%20Security%20Check%0A%0A%20%20%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20%20%20var%20sourceURL%20%3D%20getContentFrameURI%28focusedWindow%29%3B%0A%0A%20%20%20%20%20%20const%20nsIScriptSecurityManager%20%3D%20Components.interfaces.nsIScriptSecurityManager%3B%0A%0A%20%20%20%20%20%20var%20secMan%20%3D%20Components.classes%5B%22@mozilla.org/scriptsecuritymanager%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28nsIScriptSecurityManager%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20secMan.checkLoadURIStr%28sourceURL%2C%20uri.spec%2C%20nsIScriptSecurityManager.STANDARD%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20throw%20%22Load%20of%20%22%20+%20url%20+%20%22%20denied.%22%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20var%20protocolSvc%20%3D%20Components.classes%5B%22@mozilla.org/uriloader/external-protocol-service%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIExternalProtocolService%29%3B%0A%0A%20%20%20%20%20%20protocolSvc.loadUrl%28uri%29%3B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20//%20urlSecurityCheck%20wanted%20a%20URL-as-string%20for%20Fx%202.0%2C%20but%20an%20nsIPrincipal%20on%20trunk%0A%0A%20%20%20%20if%28activeBrowser%28%29.contentPrincipal%29%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.contentPrincipal%2CCi.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL%29%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.currentURI.spec%2CCi.nsIScriptSecurityManager.DISALLOW_SCRIPT%29%3B%0A%0A%20%20%20%20if%28%20%28event.ctrlKey%29%20%29%7B%0A%0A%20%20%20%20%20%20%20%20loadURI%28uri.spec%2C%20null%2C%20null%2C%20false%29%3B%0A%0A%20%20%20%20%7Delse%7B%0A%0A%20%20%20%20%20%20if%20%28%27TreeStyleTabService%27%20in%20window%29%0A%0A%20%20%20%20%20%20%20%20TreeStyleTabService.readyToOpenChildTab%28activeBrowser%28%29.selectedTab%29%3B%0A%0A%20%20%20%20%20%20openNewTabWith%28uri.spec%2C%20null%2C%20%20null%2C%20null%2C%20false%29%0A%0A%20%20%20%20%20%20//activeBrowser%28%29.loadOneTab%28uri.spec%2C%20null%2C%20null%2C%20null%2C%20getPref%28%22browser.tabs.loadInBackground%22%2C%20%22bool%22%2C%20false%29%2C%20false%29%3B%0A%0A%0A%0A%20%20%20%20%20%20//activeBrowser%28%29.selectedTab%20%3D%20activeBrowser%28%29.addTab%28uri.spec%29%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20getVer%28%29%7B%0A%0A%20%20%20%20const%20Cc%20%3D%20Components.classes%3B%0A%0A%20%20%20%20const%20Ci%20%3D%20Components.interfaces%3B%0A%0A%20%20%20%20var%20info%20%3D%20Cc%5B%22@mozilla.org/xre/app-info%3B1%22%5D.getService%28Ci.nsIXULAppInfo%29%3B%0A%0A%20%20%20%20//%20%u3053%u306E%u30B3%u30FC%u30C9%u3092%u5B9F%u884C%u3057%u3066%u3044%u308B%u30A2%u30D7%u30EA%u30B1%u30FC%u30B7%u30E7%u30F3%u306E%u540D%u524D%u3092%u53D6%u5F97%u3059%u308B%0A%0A%20%20%20%20var%20ver%20%3D%20parseInt%28info.version.substr%280%2C3%29%20*%2010%2C10%29%20/%2010%3B%0A%0A%20%20%20%20return%20ver%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20getPref%28aPrefString%2C%20aPrefType%2C%20aDefault%29%7B%0A%0A%20%20%20%20var%20xpPref%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefBranch2%29%3B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20switch%20%28aPrefType%29%7B%0A%0A%20%20%20%20%20%20%20%20case%20%22str%22%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getCharPref%28aPrefString%29.toString%28%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%20%22int%22%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getIntPref%28aPrefString%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%20%22bool%22%3A%0A%0A%20%20%20%20%20%20%20%20default%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getBoolPref%28aPrefString%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20aDefault%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20debug%28aMsg%29%7B%0A%0A%20%20%20%20const%20Cc%20%3D%20Components.classes%3B%0A%0A%20%20%20%20const%20Ci%20%3D%20Components.interfaces%3B%0A%0A%20%20%20%20Cc%5B%22@mozilla.org/consoleservice%3B1%22%5D%0A%0A%20%20%20%20%20%20.getService%28Ci.nsIConsoleService%29%0A%0A%20%20%20%20%20%20.logStringMessage%28aMsg%29%3B%0A%0A%20%20%7D%0A%0A%7D%0A%0Avar%20textLinkForSidebar%20%3D%20%7B%0A%0A%20%20init%3A%20function%28event%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20event.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28%21doc.location%29%20return%3B%0A%0A%20%20%20%20%20%20if%28doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%7B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%2C%0A%0A%20%20uninit%3A%20function%28event%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20event.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28%21doc.location%29%20return%3B%0A%0A%20%20%20%20%20%20if%28doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%7B%0A%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%0A%0A%7D%0A%0A//for%20contents%20area%0A%0Aif%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20var%20target%20%3D%20document.getElementById%28%22messagepane%22%29%3B%0A%0A%7D%20else%20%7B%0A%0A%20%20var%20target%20%3D%20document.getElementById%28%22appcontent%22%29%3B%0A%0A%7D%0A%0Atarget.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0Atarget.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A//for%20already%20loaded%20chrome%3A//browser/content/web-panels.xul%0A%0Aif%20%28%21/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20setTimeout%28function%28%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20document.getElementById%28%27sidebar%27%29.contentDocument%3B%0A%0A%20%20%20%20%20%20if%28doc%20%26%26%20doc.location%20%26%26%20doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%2C1000%29%3B%0A%0A%7D%0A%0A//for%20sidebar%20document%20onload%20event%20Listener%0A%0Awindow.document.addEventListener%28%27load%27%2C%20textLinkForSidebar.init%2C%20true%29%3B%0A%0Awindow.document.addEventListener%28%27unload%27%2C%20textLinkForSidebar.uninit%2C%20true%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%3Clabel%3E%0AID%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Код кнопки:Custom Buttons | Форум Mozilla Россия из-за ограничения на размер сообщения.

Fit to Width (Подогнать по ширине) (Firefox)
Автор: Dark-Demon.
Выравнивает страницу по ширине окна (обсуждение кнопки).

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3Efit%20to%20width%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0As.insertRule%28%27*%20%7Bmin-width%3A0%21important%3B%20white-space%3Anormal%21important%3B%20margin%3A0%21important%3B%20padding%3A0%21important%3B%20float%3Anone%3B%7D%27%2C0%29%3B%0As.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C0%29%3B%0As.insertRule%28%27table%2Ctbody%2Ctr%2Ctd%20%7Bdisplay%3Ablock%21important%7D%27%2C0%29%3B%0A%0Avar%20i%3D%20content.document.images%3B%0Afor%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width*.95%3B%0A%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%7D%0A%0A%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC

Код:

Выделить код

Код:

var s=content.document.styleSheets[0];
s.insertRule('* {min-width:0!important; white-space:normal!important; margin:0!important; padding:0!important; float:none;}',0);
s.insertRule('div,table,tbody,tr,td,p,ol,ul,h1,h2,h3,hr {max-width:99%!important;}',0);
s.insertRule('table,tbody,tr,td {display:block!important}',0);

var i= content.document.images;
for (var j=0; j<i.length; j++) {
  var k= content.window.innerWidth/i[j].width*.95;
  if (k<1) {i[j].width*=k; i[j].height*=k;};
}

Cookies Permissions (Firefox)
Автор: Infocatcher
Описание: позволяет быстро открыть список исключений для куков, открыть список самих куков, в 1-2 клика добавить просматриваемый сайт в исключения, так же по таймеру удаляет все незащищённые (т.е. все которые не находятся в списке исключений как "разрешить" или "разрешить на сессию") куки.

У кнопки есть теперь своя тема, там же вы найдёте и ссылки на установку стабильной и тестовой версий кнопки и сможете почитать её changelog.

Открыть SAVE.HTML (Mozilla Thunderbird)
Считывает и открывает HTML файл (в новой закладке) указанный в Инструменты - Настройки... - Основные (переменная из about:config - mailnews.start_page.url ).

Данная кнопка удалена и заменена на TB Exp Imp CB как на более универсальную.

Tools(Mozilla Thunderbird)
Left    => Параметры учётной записи
Middle => about:config (в новом табе)
Right   => Настройки
Shift+Right => Редактирование кнопки

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Econfig%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIFQTFRF////u7uImZmZMzMzRERE7u7ud3d3qqqqzMzMVVVVZmZm3d3d////iIiIu7u7zMyZ7u7dIiIizMy73d27u7uZ3d3MzMyqmZlmiIhmqqqIu8yZIiIzqqp3///dd3dmd3dVmZl3qqqZMzNEzN277v/u7u7/mapmd4hEu7uq7u7MmZmIMf7U/gAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0QwDBykHHZ47CAAAAWVJREFUeJydk1tvwyAMhRMDBptCozRN2qnqTXva//+BM9Asl7aTNt6s88X4HJOq+sMx3jnzmx4BOcS3ureAWmmyhXbRL/XWAitFGCAJHhjdXG7am+h3dMaYrBNZs9Cl/12FsWvEpV45SPeff5pappjHMmUeJ/drfah3E6BlBAPssw4QZL5ztx0JB4GEsJyBGEIgpfD2sa0L4ZLhu2bS+YrIlHS/q9PZPXSltKbsWAJkKYMkkYm+6ATWjrkLoTgNnYnjVw7UznM0EcsGetEROenLmI1/NOuPKKMpDas9TIEFJAEO7Rvd58D0Zdg2r78v/i4n8fKKKLo+nJKZdQ8frYXir+3qZ0LeB3HA4q95Joy8D07jF/9Nn4luIhxzdLLAFHgm1j0kSVN5JAXjlYWo92Od1+JYj0AmTsPQfc4GNZZo+in2XT1cru1maQRmD3VfD9c4qzcRcbFi6dEuHrZxfvVfruv/nm+NxhAKW3jK0QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0443%u0447%u0451%u0442%u043D%u043E%u0439%20%u0437%u0430%u043F%u0438%u0441%u0438%0Afunction%20lbMouse%28%29%7B%0AMsgAccountManager%28null%29%3B%0A%7D%3B%0A%0A//%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%0Afunction%20rbMouse%28%29%7B%0AopenOptionsDialog%28%29%3B%0A%7D%3B%0A%0A//about%3Aconfig%0Afunction%20mbMouse%28%29%7B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20cnConf%20%3D%20%22chrome%3A//global/content/config.xul%22%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20cnConf%0A%09%7D%0A%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0443%u0447%u0451%u0442%u043D%u043E%u0439%20%u0437%u0430%u043F%u0438%u0441%u0438%20%5CnMiddle%20%3D%3E%20about%3Aconfig%20%5CnRight%20%20%20%3D%3E%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A/*%0AMsgAccountManager%28null%29%3B%0AopenOptionsDialog%28%29%3B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20cnConf%20%3D%20%22chrome%3A//global/content/config.xul%22%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20cnConf%0A%09%7D%0A%29%3B%0A//window.content.focus%28%29%3B%0A*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

//Параметры учётной записи
function lbMouse(){
MsgAccountManager(null);
};

//Настройки
function rbMouse(){
openOptionsDialog();
};

//about:config
function mbMouse(){
var inBackground = false;
var cnConf = "chrome://global/content/config.xul"
var tabmail = document. getElementById ("tabmail");
tabmail. openTab
(
    "contentTab",
    {
        background: inBackground,
        contentPage: cnConf
    }
);
};

this.tooltipText = "Left    => Параметры учётной записи \nMiddle => about:config \nRight   => Настройки";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

AddonsChekUpDate(Mozilla Thunderbird)
Left    => Открыть установленные дополнения
Middle => Проверить обновление дополнений
Right   => Дополнения в интернете
Shift+Right => Редактирование кнопки

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EAddonsChekUpDate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhJQAaAPcAAAAAAAA7KAA/ND0+ACM5LAA5UjFSBztEJwpXQwxVWwVJZBRTfiFPXzdLVj5+W38dEnooB3oxAE5aBlpmFEdkKmhWAmdAI2Z2N3h4MkNCSEFbQkRXaExhdlptZ1N/cnNYR3FdXHlqSXB/VmZiYWZ2dnRyYypugTh7pUFvkVh1iFR8lmF7kj+1K1WTM06oMWmCGnqbJmy3NVKWR12Dbk6kQGSDRX+XQWyBcG+edGSxWH6nb367bXu7dUnKNmPENlnORWrRUnbDZ3TkXXrmZUmKl1aHi1yImk+Ot0uTokiQtleMoVyOs1WWrFictmODgmeOnXeHgnCLlH2RiGWVpGKas3iXpWq/hG2yn3Osg3OivVuaw12oymaqxmy41XapyHmxy3iz0XDBh3jDmH/K6pUWCoooE4A3AIk1GpYlAIQxLqkVAaktBJBTJ5ZQNpt7FoV2NZF2J71MHKZSLrNXJrhXNq5rFLRiKLloML13Ibt2PZNbUoxpSY1uXJ50W4l0YZ1qZ6l2SaJ+Xrt2RbN6cMQ6FstHCM1XFttXDNdaG99dI9xpFsllI8dmO8hxK8lyNddpJNVyJONZKOFlGOFmIOJ9Ncx6QNV/QoOcCouUJ5aNKJmKNauCKLykILGqNru6Lo+GQ42SXJqMTYWDboKDfpWNZp6PcpS6S4mvdqaMRKqTTaqVVrabS6GNdbqMar6TcbS0VLupebSwaY7fX4nJc47vdarKTaHkfdCpKNSsM+G7Ks2DS8mPX9CAQcyefdWyTtG0VsmuZ8ygfeGffOnGPOXSLv7XMd7KacPueubPRe3EW/bXRvvSU+7Ua+jwd4KYm5iKgYSds421iI2npo6zuaGhlaGxvre7xJDEhY3ri5LjhpronJv8i5jzlLb+mq7ioo7CzY7M24TG4I7W7o/U85jM4pDR5Zvf9KTY7dubgMCwjMS3lNa0m8yzqOqyieizo9LDnN3MrtfFtd3RuOjGvcXO08ndwdXOxN3cytvb29Tj0OXHxeHYyeXZ1fLMwwAAAAAAACH5BAEAAP8ALAAAAAAlABoAAAj/AP8JHEiwoMGDCBMehJZiRYoq1egpnHgQxRIv5M6ByZKiwSh7FBPGi2eNgwovX76UMzduY5QSIdSFPNirT4YNzpxJqwJO3BguVJyQAvZr1UyC8QQJ4vOMVSlRUr412dIlXJEDb5gxU5Xu6L91dihZquQozx5q0750WcuFAQEMxnytkkcRn8BgjRTpVbSIjR8oU7hsGaxlighNuJK9qytwF6S9eu+4gmKkSZITC44oufHp1jJY/Gbqerz3ka5AJKYQUaCggIkiGmINW6ZqX8h2vCA/ctSqxBMmSBIICIDAAYVXypShinfbkV5JhtBA+EDCiBIiV8SEscLDRidlw1DB/wspbNFeNGjOgEjB3gMWbdyw2cLEqViuVHQpopvzSBGiNWvQoccIHcyAgwxAbLONC7V4QgwyodwTkjtyLCKJJIUUYggjgFywQxBB0CIiLUDEcEkzoEhIUT9txHGhJIccsoYZEnTTzTYiDiEEELTEcEwN9cw0yBqJvOhfBAPM0kI2tAwxBBA/COFDDEFcM9M8Z8SByIWKPNIIHBMY0EKTQED5Q5lAzHLUIGWsEQkiiEyiCB6bZPICiVD2oCcLaXqlRxlkELKGhnW4kQkMspT5g54/nKmmnw+QoYYaaFRgSgtoxhBDo0DkkIOVXv0zSBpkkAGBBLOU6YILLbTgAhBBeDATTagC8cPOH2lYYICZrJ5yzas80FoQP/qwU4MMNNAggw75RCODDLMKG1I+0labUEAAOw%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Afunction%20lbMouse%28%29%7B%0AopenAddonsMgr%28%29%3B%0A%7D%3B%0A%0A//%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%0Afunction%20mbMouse%28%29%7B%0Avar%20win%20%3D%20BrowserOpenAddonsMgr%20%28%29%3B%0A%0Avar%20doc%20%3D%20win.%20document%3B%0Acmd%20%3D%20doc.%20getElementById%20%28%22extensions-view%22%29%3B%0Aif%20%28%21cmd%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22extensions-view%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20200%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd.%20doCommand%20%28%29%3B%0A%09cmd2%20%3D%20doc.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29%3B%0Aif%20%28%21cmd2%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20500%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd2.%20doCommand%20%28%29%3B%0AcheckForUpdates%28%29%3B%20%20%20%20%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u0430%u0437%u0443%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%0Afunction%20rbMouse%28%29%7B%0Avar%20url%20%3D%20%22https%3A//addons.mozilla.org/ru/thunderbird/%22%3B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20url%0A%09%7D%0A%29%3B%0A%7D%3B%0A%0Afunction%20BrowserOpenAddonsMgr%28aPane%29%0A%7B%0A%20%20const%20EMTYPE%20%3D%20%22Extension%3AManager%22%3B%0A%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20var%20theEM%20%3D%20wm.getMostRecentWindow%28EMTYPE%29%3B%0A%20%20if%20%28theEM%29%20%7B%0A%20%20%20%20theEM.focus%28%29%3B%0A%20%20%20%20return%20theEM%3B%0A%20%20%7D%0A%0A%20%20const%20EMURL%20%3D%20%22chrome%3A//mozapps/content/extensions/extensions.xul%22%3B%0A%20%20const%20EMFEATURES%20%3D%20%22chrome%2Cmenubar%2Cextra-chrome%2Ctoolbar%2Cdialog%3Dno%2Cresizable%22%3B%0A%20%20return%20window.openDialog%28EMURL%2C%20%22%22%2C%20EMFEATURES%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%5CnMiddle%20%3D%3E%20%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%5CnRight%20%20%20%3D%3E%20%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

//Открыть установленные дополнения
function lbMouse(){
openAddonsMgr();
};

//Проверить обновление дополнений
function mbMouse(){
var win = BrowserOpenAddonsMgr ();

var doc = win. document;
cmd = doc. getElementById ("extensions-view");
if (!cmd)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("extensions-view"). doCommand (); }, 200); }, false);
else
    cmd. doCommand ();
    cmd2 = doc. getElementById ("cmd_checkUpdatesAll");
if (!cmd2)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("cmd_checkUpdatesAll"). doCommand (); }, 500); }, false);
else
    cmd2. doCommand ();
checkForUpdates();    
};

//Открыть базу дополнений в интернете
function rbMouse(){
var url = "https://addons.mozilla.org/ru/thunderbird/";
var inBackground = false;
var tabmail = document. getElementById ("tabmail");
tabmail. openTab
(
    "contentTab",
    {
        background: inBackground,
        contentPage: url
    }
);
};

function BrowserOpenAddonsMgr(aPane)
{
  const EMTYPE = "Extension:Manager";
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var theEM = wm.getMostRecentWindow(EMTYPE);
  if (theEM) {
    theEM.focus();
    return theEM;
  }

  const EMURL = "chrome://mozapps/content/extensions/extensions.xul";
  const EMFEATURES = "chrome,menubar,extra-chrome,toolbar,dialog=no,resizable";
  return window.openDialog(EMURL, "", EMFEATURES);
};

this.tooltipText = "Left    => Открыть установленные дополнения \nMiddle => Проверить обновление дополнений \nRight   => Дополнения в интернете";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();

        event.stopPropagation();
    }
};

Min&Quit&Restart(Mozilla Thunderbird)
Left    => Свернуть Mozilla Thunderbird
Middle => Выйти из Mozilla Thunderbird
Right   => Перезагрузить Mozilla Thunderbird
Shift+Right => Редактирование кнопки

скрытый текст
Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMin%26amp%3BQuit%26amp%3BRestart%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0421%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20Mozilla%20Thunderbird%20%5CnMiddle%20%3D%3E%20%u0412%u044B%u0439%u0442%u0438%20%u0438%u0437%20Mozilla%20Thunderbird%20%5CnRight%20%20%20%3D%3E%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20Mozilla%20Thunderbird%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0Awindow.minimize%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AgoQuitApplication%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20var%20appStartup%20%3D%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIAppStartup%29%3B%0A%20%20appStartup.quit%28appStartup.eForceQuit%20%7C%20appStartup.eRestart%29%3B%0A%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

this.tooltipText = "Left    => Свернуть Mozilla Thunderbird \nMiddle => Выйти из Mozilla Thunderbird \nRight   => Перезагрузить Mozilla Thunderbird";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
window.minimize();
    }
    else if(event.button == 1) {
// Действие при клике СКМ
goQuitApplication();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
// Действие при клике ПКМ без модификаторов
  var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
                             .getService(Components.interfaces.nsIAppStartup);
  appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);

    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Attributes Inspector (для разработчиков) (все приложения на движке gecko: [firefox] Firefox, [seamonkey] SeaMonkey, [thunderbird] Thunderbird etc.)
Показывает всплывающую подсказку со всеми атрибутами.
Использование:
   Кликните средней кнопкой мыши или левой с зажатым Ctrl (или нажмите Ctrl+Shift+I), чтобы исследовать узел в DOM Inspector
   Удерживайте Shift, чтобы показывать и не скрывать всплывающие подсказки и меню
Сочетания клавиш:
   Escape – отмена
   Ctrl+Up, Ctrl+Down – перейти к родительскому/дочернему узлу
   Ctrl+Shift+C – копировать содержимое всплывающей подсказки

У кнопки теперь есть отдельная тема.

Tools(Firefox)   Прим. пост с начальной версией удалён с форума

Версия от 12.02.2011

Left => Настройки Mozilla FireFox
Middle => Vacuum очистка баз places.sqlite и Brief
Ctrl+Right => Информация для решения проблем и плагины
Right => About:Config

Переустанавливает plugin.expose_full_path в true, что позволяет увидеть пути расположения плагинов.

Скачать кнопку в HTML формате Tools._html. Для установки исправить расширение файла с _html на html

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETools%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIFQTFRF////u7uImZmZMzMzRERE7u7ud3d3qqqqzMzMVVVVZmZm3d3d////iIiIu7u7zMyZ7u7dIiIizMy73d27u7uZ3d3MzMyqmZlmiIhmqqqIu8yZIiIzqqp3///dd3dmd3dVmZl3qqqZMzNEzN277v/u7u7/mapmd4hEu7uq7u7MmZmIMf7U/gAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0QwDBykHHZ47CAAAAWVJREFUeJydk1tvwyAMhRMDBptCozRN2qnqTXva//+BM9Asl7aTNt6s88X4HJOq+sMx3jnzmx4BOcS3ureAWmmyhXbRL/XWAitFGCAJHhjdXG7am+h3dMaYrBNZs9Cl/12FsWvEpV45SPeff5pappjHMmUeJ/drfah3E6BlBAPssw4QZL5ztx0JB4GEsJyBGEIgpfD2sa0L4ZLhu2bS+YrIlHS/q9PZPXSltKbsWAJkKYMkkYm+6ATWjrkLoTgNnYnjVw7UznM0EcsGetEROenLmI1/NOuPKKMpDas9TIEFJAEO7Rvd58D0Zdg2r78v/i4n8fKKKLo+nJKZdQ8frYXir+3qZ0LeB3HA4q95Joy8D07jF/9Nn4luIhxzdLLAFHgm1j0kSVN5JAXjlYWo92Od1+JYj0AmTsPQfc4GNZZo+in2XT1cru1maQRmD3VfD9c4qzcRcbFi6dEuHrZxfvVfruv/nm+NxhAKW3jK0QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A//%20%u0412%u0435%u0440%u0441%u0438%u044F%20%u043E%u0442%2012.02.2011%0A//%20%28c%29%20Indomito%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%20%20%20%20%20%3D%3E%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20Mozilla%20FireFox%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Middle%20%20%20%20%20%20%3D%3E%20Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20%u0431%u0430%u0437%20places.sqlite%20%u0438%20Brief%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Ctrl+Right%20%3D%3E%20%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u0434%u043B%u044F%20%u0440%u0435%u0448%u0435%u043D%u0438%u044F%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%20%u0438%20%u043F%u043B%u0430%u0433%u0438%u043D%u044B%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Right%20%20%20%20%20%20%20%20%3D%3E%20About%3AConfig%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20Mozilla%20FireFox%0Afunction%20lbMouse%28%29%7B%0Atry%7B%20openPreferences%28%29%3B%20%7D%20catch%28e%29%20%7B%20openOptionsDialog%28%29%3B%20%7D%0A%7D%3B%0A%0A//Quick%20About%3AConfig%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u043C%20%u0442%u0430%u0431%u0435%0Afunction%20rbMouse%28%29%7B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aconfig%22%29%0A%7D%3B%0A%0A//Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20%u0431%u0430%u0437%20places.sqlite%20%u0438%20Brief%0Afunction%20mbMouse%28%29%7B%0Avar%20dBF%20%3D%20%22%20%u0438%20Brief%22%3B%0Aif%20%28typeof%20gBrief%20%3D%3D%20%27undefined%27%29%20dBF%20%3D%20%22%22%3B%0Avar%20res%3Dcustombuttons.%20confirmBox%20%28%22Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20places.sqlite%22%20+%20dBF%2C%20%22%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u0431%u0430%u0437%u044B%3F%22%2C%20%22%u0414%u0430%22%2C%20%22%u041D%u0435%u0442%22%29%3B%0Aif%20%28res%29%7B%0A%20%20%20%20%20Components.classes%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Components.interfaces.nsPIPlacesDatabase%29.DBConnection.executeSimpleSQL%28%22VACUUM%22%29%3B%0A%20%20%20%20%20if%20%28%21dBF.length%29%20window.openDialog%28%27chrome%3A//brief/content/compacting-progress.xul%27%2C%20%27Brief%27%2C%27chrome%2Ctitlebar%2Ccenterscreen%27%29%3B%0A%20%20%20%20%20custombuttons.%20alertBox%20%28%22Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20places.sqlite%22%20+%20dBF%2C%20%22%u0411%u0430%u0437%u044B%20%u043E%u0447%u0438%u0449%u0435%u043D%u044B%22%29%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A//%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u0434%u043B%u044F%20%u0440%u0435%u0448%u0435%u043D%u0438%u044F%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%20%u0438%20%u043F%u043B%u0430%u0433%u0438%u043D%u044B%0Afunction%20cKeyrbMouse%28%29%7B%0A//%u0412%u043A%u043B%u044E%u0447%u0430%u0435%u043C%20%u0432%u0438%u0434%u0438%u043C%u043E%u0441%u0442%u044C%20%u043F%u0443%u0442%u0435%u0439%20%u0434%u043B%u044F%20%u043F%u043B%u0430%u0433%u0438%u043D%u043E%u0432%2C%20%u0442%u0435%20about%3Aplugins%0AApplication.prefs.setValue%28%22plugin.expose_full_path%22%2C%20true%29%3B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aplugins%22%29%3B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Asupport%22%29%3B%0A%7D%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AmbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20event.ctrlKey%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20ctrl+%u041F%u041A%u041C%0AcKeyrbMouse%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/
// Версия от 12.02.2011
// (c) Indomito

this.tooltipText = "Left         => Настройки Mozilla FireFox\n"+
                   "Middle      => Vacuum очистка баз places.sqlite и Brief\n"+
                   "Ctrl+Right => Информация для решения проблем и плагины\n"+
                   "Right        => About:Config";
                   
//Настройки Mozilla FireFox
function lbMouse(){
try{ openPreferences(); } catch(e) { openOptionsDialog(); }
};

//Quick About:Config открытие в новом табе
function rbMouse(){
getBrowser (). selectedTab = getBrowser (). addTab ("about:config")
};

//Vacuum очистка баз places.sqlite и Brief
function mbMouse(){
var dBF = " и Brief";
if (typeof gBrief == 'undefined') dBF = "";
var res=custombuttons. confirmBox ("Vacuum очистка places.sqlite" + dBF, "Очистить базы?", "Да", "Нет");
if (res){
     Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");
     if (!dBF.length) window.openDialog('chrome://brief/content/compacting-progress.xul', 'Brief','chrome,titlebar,centerscreen');
     custombuttons. alertBox ("Vacuum очистка places.sqlite" + dBF, "Базы очищены")
        }
};
//Информация для решения проблем и плагины
function cKeyrbMouse(){
//Включаем видимость путей для плагинов, те about:plugins
Application.prefs.setValue("plugin.expose_full_path", true);
getBrowser (). selectedTab = getBrowser (). addTab ("about:plugins");
getBrowser (). selectedTab = getBrowser (). addTab ("about:support");
};

this.onclick = function(event) {
   if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
    else if(event.button == 2 && event.ctrlKey) {
// Действие при клике ctrl+ПКМ
cKeyrbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Highlight( Firefox 3.6 )
Выделяет одинаковые слова или фразы на открытой странице. Выделяемые слова или фразы надо выделить на странице или ввести в поле ввода каторое появляется после нажатие кнопки.

ЛКМ => выделить одинаковые слова или фразы на открытой странице.
СКМ => выбрать цвет выделения + меню кнопки.
ПКМ => убрать выделение.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EHighlight%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACZ0lEQVQokQXBW2/TSBQA4HPmYjtOnNiJoTHKaitUVMEDSLzww9H+DPZhhQQtW7Uh3ZKbXYfEl5nMnLPfh+Vfn7kq1eUU/LMq8uiyYR4hLAHoC32s0Sq43otZzkQoYiZFZUmbtcgA3R6mUsoD0VnACsAf+W2NRiFtpZQEJIRjUOAM2A6lQ+0YwZ1GjAMIYwDW3GtoItum/hihbDhkZOVvvvof3/Xlexw/cQ9uO2atVLED8Ae+3fH2ZXPhDtQHycoFU8WKrWHTM50ZLJAnzyAY0AOQQKFBIRF6z0TOMwlWp3hsJ5mkoT4lmGkpLQhnqwEAhWKgvHRWN1Iqi+6nd0NQ5WrZ3t4O3yWSHzhKZHZmuMDyAYAqGf7bfMn0pzuRXjT++9+8mIHSs1zPC5zkDB0PMic8iNTJHJhCmqb8RyLCmRCpgnwMWQLqqesPp04bI9HEJ+PvjI7jZfvM7G+i5fL35ipbuaaxtKjv0mGDqi/LZrs5N8+EO9cdHLeoolO3B/YHDMp+d2FOh24QkqtrPY5ZcbHgpj0PCts7yS+MNf48c7Zgpkk4z50Zu9BZG4ujDm6lCtSmqjabbbYuz9WvLJyfwIym+rFaE/ttpp5265nbllswAfzzbdf1iWIAL5AQvEAGIAJi9AREyB7AA3tyBMwskASyaqP4GCdtFLeDUYhRVQMFQV0HRAQ6wENkRuffdTOcTNMBJCGox/X6/ufq1f7FsXrk4fzXQ9tbdf/fisgJK++XyxBe3zzs3Tx6XPEwtOr6w4c0Tf+8vuqO02z+Jh6ZST7rspaYRD5PJ7NFcT1JimJ6qQwvXqX/A9G+ibxhNxZGAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20clickHandler%20%3D%20function%20%28event%29%0A%7B%0A%09if%20%28%28event.%20button%20%3D%3D%202%29%20%26%26%20event.%20ctrlKey%29%0A%09%09this.%20mObj.%20setPri%20%28%29%3B%0A%09else%0A%09%09this.%20mObj.%20setSub%20%28%29%3B%0A%09if%20%28event.%20ctrlKey%29%0A%09%7B%0A%09%09this.%20showPopup%20%28this%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28event.%20button%20%3D%3D%200%29%0A%09%7B%0A%09this.%20innerHTML%20%3D%20this.%20innerHTML%20%7C%7C%20content.%20document.%20body.%20innerHTML%3B%0A%09this.%20searchPrompt%28%27%27%2Cfalse%29%3B%09%09%0A%09%7D%0A%09else%20if%20%28event.%20button%20%3D%3D%201%29%0A%09%7B%0A%09this.%20showPopup%20%28this%29%3B%09%0A%09%7D%0A%09else%0A%09%7B%0A%09%09content.%20document.%20body.%20innerHTML%20%3D%20this.%20innerHTML%20%7C%7C%20content.%20document.%20body.%20innerHTML%3B%0A%09%09this.%20innerHTML%20%3D%20%22%22%3B%0A%09%7D%0A%7D%3B%0Athis.showPopup%20%3D%20function%28node%29%0A%7B%0A%09var%20popup%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%09var%20x%20%3D%20node.boxObject.x%3B%0A%09var%20y%20%3D%20node.boxObject.y%20+%20node.boxObject.height%3B%0A%09document.popupNode%20%3D%20node%3B%0A%09popup.showPopup%28node%2C%20x%2C%20y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%7D%3B%0Athis.%20doHighlight%20%3D%20function%20%28bodyText%2C%20searchTerm%2C%20highlightStartTag%2C%20highlightEndTag%29%20%0A%7B%0A%09if%20%28%28%21highlightStartTag%29%20%7C%7C%20%28%21highlightEndTag%29%29%0A%09%7B%0A%09%09highlightStartTag%20%3D%20%22%3Cfont%20style%3D%27background-color%3A%22%20+%20this.%20highlightColor%20+%20%22%3B%27%3E%22%3B%0A%09%09highlightEndTag%20%3D%20%22%3C/font%3E%22%3B%0A%09%7D%0A%09var%20newText%20%3D%20%22%22%3B%0A%09var%20i%20%3D%20-1%3B%0A%09var%20lcSearchTerm%20%3D%20searchTerm.toLowerCase%28%29%3B%0A%09var%20lcBodyText%20%3D%20bodyText.toLowerCase%28%29%3B%0A%09while%20%28bodyText.length%20%3E%200%29%0A%09%7B%0A%09%09i%20%3D%20lcBodyText.indexOf%28lcSearchTerm%2C%20i+1%29%3B%0A%09%09if%20%28i%20%3C%200%29%0A%09%09%7B%0A%09%09%09newText%20+%3D%20bodyText%3B%0A%09%09%09bodyText%20%3D%20%22%22%3B%0A%09%09%7D%0A%09%09else%0A%09%09%7B%0A%09%09%09if%20%28bodyText.lastIndexOf%28%22%3E%22%2C%20i%29%20%3E%3D%20bodyText.lastIndexOf%28%22%3C%22%2C%20i%29%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28lcBodyText.lastIndexOf%28%22/script%3E%22%2C%20i%29%20%3E%3D%20lcBodyText.lastIndexOf%28%22%3Cscript%22%2C%20i%29%29%0A%09%09%09%09%7B%0A%09%09%09%09%09newText%20+%3D%20bodyText.substring%280%2C%20i%29%20+%20highlightStartTag%20+%20bodyText.substr%28i%2C%20searchTerm.length%29%20+%20highlightEndTag%3B%0A%09%09%09%09%09bodyText%20%3D%20bodyText.substr%28i%20+%20searchTerm.length%29%3B%0A%09%09%09%09%09lcBodyText%20%3D%20bodyText.toLowerCase%28%29%3B%0A%09%09%09%09%09i%20%3D%20-1%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09return%20newText%3B%0A%7D%0Athis.%20highlightSearchTerms%20%3D%20function%20%28searchText%2C%20treatAsPhrase%2C%20warnOnFailure%2C%20highlightStartTag%2C%20highlightEndTag%29%0A%7B%0A%09if%20%28treatAsPhrase%29%0A%09%7B%0A%09%09searchArray%20%3D%20%5BsearchText%5D%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09searchArray%20%3D%20searchText.split%28%22%20%22%29%3B%0A%09%7D%0A%09if%20%28%21content.document.body%20%7C%7C%20typeof%28content.document.body.innerHTML%29%20%3D%3D%20%22undefined%22%29%0A%09%7B%0A%09%09if%20%28warnOnFailure%29%0A%09%09%7B%0A%09%09%09alert%28%22The%20text%20of%20this%20page%20is%20not%20available.%20Highlighting%20will%20not%20work.%22%29%3B%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%0A%09var%20bodyText%20%3D%20content.document.body.innerHTML%3B%0A%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20searchArray.length%3B%20i++%29%0A%09%7B%0A%09%09bodyText%20%3D%20this.%20doHighlight%28bodyText%2C%20searchArray%5Bi%5D%2C%20highlightStartTag%2C%20highlightEndTag%29%3B%0A%09%7D%0A%09content.document.body.innerHTML%20%3D%20bodyText%3B%0A%09return%20true%3B%0A%7D%0Athis.%20searchPrompt%20%3D%20function%20%28%29%0A%7B%0A%20%20%20%20var%20searchText%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%20%7C%7C%20prompt%28%27Highlight%3A%27%2C%27%27%29%3B%0A%20%20%20%20searchText%20%26%26%20this.%20highlightSearchTerms%28searchText%2C%20true%29%3B%0A%7D%0A%0Athis.%20changeColor%20%3D%20function%20%28menuitem%2C%20event%29%0A%7B%0A%09var%20topmenuitem%20%3D%20document.%20getElementById%20%28document.%20popupNode.%20firstId%29%3B%0A%09topmenuitem.%20setAttribute%20%28%22label%22%2C%20%22*%20%22%20+%20menuitem.%20getAttribute%20%28%22label%22%29%29%3B%0A%09document.%20popupNode.%20highlightColor%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%7D%3B%0A%0Avar%20colors%20%3D%0A%7B%0A%09%22Yellow%22%3A%20%22yellow%22%2C%20%22Green%22%3A%20%22green%22%2C%20%22Blue%22%3A%20%22blue%22%2C%20%22Red%22%3A%20%22red%22%0A%7D%3B%0Avar%20mItem%20%3D%20%7B%7D%3B%0Adocument.%20getElementById%20%28CB2const.%20sCBCtxtMenu%29.%20setAttribute%20%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0Avar%20mObj%20%3D%20custombuttons.%20getCbContextObj%20%28this%29%3B%0Athis.%20mObj%20%3D%20mObj%3B%0AmObj.%20setSub%20%28%29%3B%0Avar%20mItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmItem.%20id%20%3D%20%22topmenuitem%22%3B%0AmItem.%20label%20%3D%20%22*%20Yellow%22%3B%0AmItem.%20value%20%3D%20%22yellow%22%3B%0AmItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0Athis.%20firstId%20%3D%20mItem.%20id%3B%0AmItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0Afor%20%28var%20i%20in%20colors%29%0A%7B%0A%09var%20mItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0A%09mItem.%20id%20%3D%20i%3B%0A%09mItem.%20label%20%3D%20i%3B%0A%09mItem.%20value%20%3D%20colors%20%5Bi%5D%3B%0A%09mItem.%20oncommand%20%3D%20%22document.%20popupNode.%20changeColor%20%28this%2C%20event%29%3B%22%0A%09mItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0A%7D%0AmItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0A%0Athis.%20innerHTML%20%3D%20%22%22%3B%0Athis.%20highlightColor%20%3D%20%22yellow%22%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.clickHandler%28event%29%27%29%3B%0Athis.setAttribute%28%22context%22%2C%20%22%22%29%3B%0A%0Athis.tooltipText%20%3D%20%22L%3DHighlight%5CnM%3DSelect%20color%20+%20CB%20menu%20%5CnR%3DRemove%20highlight%20%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

this. clickHandler = function (event)
{
    if ((event. button == 2) && event. ctrlKey)
        this. mObj. setPri ();
    else
        this. mObj. setSub ();
    if (event. ctrlKey)
    {
        this. showPopup (this);
        return;
    }
    if (event. button == 0)
    {
    this. innerHTML = this. innerHTML || content. document. body. innerHTML;
    this. searchPrompt('',false);        
    }
    else if (event. button == 1)
    {
    this. showPopup (this);    
    }
    else
    {
        content. document. body. innerHTML = this. innerHTML || content. document. body. innerHTML;
        this. innerHTML = "";
    }
};
this.showPopup = function(node)
{
    var popup = document.getElementById("custombuttons-contextpopup");
    var x = node.boxObject.x;
    var y = node.boxObject.y + node.boxObject.height;
    document.popupNode = node;
    popup.showPopup(node, x, y, "popup", null, null);
};
this. doHighlight = function (bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
    if ((!highlightStartTag) || (!highlightEndTag))
    {
        highlightStartTag = "<font style='background-color:" + this. highlightColor + ";'>";
        highlightEndTag = "</font>";
    }
    var newText = "";
    var i = -1;
    var lcSearchTerm = searchTerm.toLowerCase();
    var lcBodyText = bodyText.toLowerCase();
    while (bodyText.length > 0)
    {
        i = lcBodyText.indexOf(lcSearchTerm, i+1);
        if (i < 0)
        {
            newText += bodyText;
            bodyText = "";
        }
        else
        {
            if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i))
            {
                if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i))
                {
                    newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
                    bodyText = bodyText.substr(i + searchTerm.length);
                    lcBodyText = bodyText.toLowerCase();
                    i = -1;
                }
            }
        }
    }
    return newText;
}
this. highlightSearchTerms = function (searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)
{
    if (treatAsPhrase)
    {
        searchArray = [searchText];
    }
    else
    {
        searchArray = searchText.split(" ");
    }
    if (!content.document.body || typeof(content.document.body.innerHTML) == "undefined")
    {
        if (warnOnFailure)
        {
            alert("The text of this page is not available. Highlighting will not work.");
        }
        return false;
    }
    var bodyText = content.document.body.innerHTML;
    for (var i = 0; i < searchArray.length; i++)
    {
        bodyText = this. doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
    }
    content.document.body.innerHTML = bodyText;
    return true;
}
this. searchPrompt = function ()
{
    var searchText = document.commandDispatcher.focusedWindow.getSelection().toString() || prompt('Highlight:','');
    searchText && this. highlightSearchTerms(searchText, true);
}

this. changeColor = function (menuitem, event)
{
    var topmenuitem = document. getElementById (document. popupNode. firstId);
    topmenuitem. setAttribute ("label", "* " + menuitem. getAttribute ("label"));
    document. popupNode. highlightColor = menuitem. getAttribute ("value");
};

var colors =
{
    "Yellow": "yellow", "Green": "green", "Blue": "blue", "Red": "red"
};
var mItem = {};
document. getElementById (CB2const. sCBCtxtMenu). setAttribute ("oncommand", "event.stopPropagation()");
var mObj = custombuttons. getCbContextObj (this);
this. mObj = mObj;
mObj. setSub ();
var mItem = new mObj. getItem ();
mItem. id = "topmenuitem";
mItem. label = "* Yellow";
mItem. value = "yellow";
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
this. firstId = mItem. id;
mItem = new mObj. getItem ();
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
for (var i in colors)
{
    var mItem = new mObj. getItem ();
    mItem. id = i;
    mItem. label = i;
    mItem. value = colors [i];
    mItem. oncommand = "document. popupNode. changeColor (this, event);"
    mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
}
mItem = new mObj. getItem ();
mObj. insertBefore (mItem, mObj. oMenu. lastChild);

this. innerHTML = "";
this. highlightColor = "yellow";
this. setAttribute ('onclick', 'this.clickHandler(event)');
this.setAttribute("context", "");

this.tooltipText = "L=Highlight\nM=Select color + CB menu \nR=Remove highlight ";

Compact Menu( Firefox 4 + ) от 06.04.2016.
Удаляет панель меню и стандартную кнопку меню, показывает главное меню в виде выпадающего списка. Ненужные пункты меню можно удалить. Пример: если хотите удалить пункт Правка нужно удалить в из вкладки Код "edit-menu",

ЛКМ => показать меню.

Код кнопки
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECompact%20Menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMSAAcROg8hOGEvQV1hL0JdOQ4iOBIABxH7+/uBqKioqv7+/oAAAAAAAAAAAAAAAAAAAAAAAAAAAREABhB6PEx23HZ32+uLe/7rfGv/63tr/+uKev7vv7/tp52g10BAQP6vr6+z////fwAAAAAAAAAAAAAAAR0CEB3AaHK/629j/+FbVP/bUU7/10xK/9ZLSv/sp6X/26mm/0BAQP9AQED/QEBA/9jY2KH///9/AAAAAA8ABQ+6X22+1UpK/8Y2P/+8KDX/tB0v/6sZKf+uGCz/1pae/0BAQP9AQED/QEBA/0BAQP9AQED+8fHxkQAAAAJ0M0hzxz1G/7AYLv+lDCX/ng0b/5APD/+FFgL/1Zid/3BfYf9AQED/QEBA/0BAQP9AQED/QEBA/25ubtgPAAUPt0dc2KULJf+pFCb/tygu/7w1L/+FGAH/nSsW/8OSjf+gf3//qIKB/9aTlf/Vi5P/0YSR/9yosuzw7/CHMAobMLw2Sf60Iyz/xD41/9NSPv/cYUT/0188/+VwSf/IWzj/WhID/0kFAP9zGhT/yEM4/7grL/+9Okn+Nw0fNFYoOVLAOT3/zEg6/9xhRP/qdUv/64RR/+uNVf/rk1f/65NX/9t1Q/9mGQD/YhcE/9NeP//RTz3/xEA//1wsPVlWKDhR01dI/+BnRv/rf0//65JX/+ugXP/rqV7/661g/+utYf/McDH/gS4C/4UyD//CXjX/5G5I/9hdSf9dLD5YMAoaMOp+Zf7rgE//65dZ/+upX//rtGP/671n/+vBaP/rslz/rk4K/51CBf/rjUf/64RI/+uBTf/rhGf+NQweNA4ABg7Tdm3X65NY/+uqX//rumX/68Rq/+vMbf/r0G//68pn/+u+X//cgTD/67hi/+uuYf/rmlr/2Hxv2REABhAAAAACdTlIceudYP/rrV7/66xW/+vMbf/r03D/69Zw/+vVcP/r1HD/68tr/9x+Pv/rkUz/66xo/3Y7SXMAAAACAAAAAA8ABQ+2Z2O70WIX/+uEIf/rvVb/68JY/+vPbf/rsUn/68FX/+uVRf+dNBL/zGw0/8h7dL0PAAUPAAAAAAAAAAAAAAABHAEPHL5qWrzrr0r/69CA/+vQgf/r3qv/696r/+vNgP/rrnb/rEgo/6VXW70dAg8cAAAAAQAAAAAAAAAAAAAAAAAAAAEPAAUPdztFceiUcNjrz47+69yw/+vUmf/ryIT+03pe2XIzRHMPAAUPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIPAAUPMgscMlcpOlNYKTlUMwscMg8ABQ8AAAACAAAAAAAAAAAAAAAAAAAAAP//rEHwA6xBwAGsQYAArEGAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEGAAaxBgAGsQcADrEHwD6xB%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28gBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%29%20return%3B%0A%0Avar%20mmb%20%3D%20document.getElementById%28%22main-menubar%22%29%3B%0Ammb.collapsed%20%3D%20true%3B%0AaddDestructor%28%28%29%20%3D%3E%20mmb.collapsed%20%3D%20false%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%20%28event.target%20%26%26%20event.target%20%21%3D%20this%29%20return%3B%0Aif%20%28%21event.target%20%26%26%20this.lastChild%20%26%26%20this.lastChild.state%20%3D%3D%20%22open%22%29%20%7B%0A%09this.lastChild.hidePopup%28%29%3B%20return%3B%0A%7D%0Avar%20ids%20%3D%20%5B%0A%09%22file-menu%22%2C%0A%09%22edit-menu%22%2C%0A%09%22view-menu%22%2C%0A%09%22bookmarksMenu%22%2C%0A%09%22history-menu%22%2C%0A%09%22tools-menu%22%2C%0A%09%22helpMenu%22%0A%5D%3B%0Avar%20menus%20%3D%20ids.map%28id%20%3D%3E%20document.getElementById%28id%29%29.filter%28id%3D%3E%20%7Breturn%20%28id%20%21%3D%3D%20null%29%7D%29%3B%0Avar%20menubar%20%3D%20menus%5B0%5D.parentNode%3B%0Avar%20order%20%3D%20Array.slice%28menubar.childNodes%29%3B%0A%0Afunction%20appendMenus%28parent%29%20%7B%0A%09var%20nodes%20%3D%20parent%20%3D%3D%20menubar%20%3F%20order%20%3A%20menus%3B%0A%09for%28var%20node%20of%20nodes%29%20parent.appendChild%28node%29%3B%0A%09if%20%28ids.indexOf%28%22bookmarksMenu%22%29%20%3D%3D%20-1%29%20return%3B%0A%09for%28var%20menu%20of%20parent.getElementsByTagName%28%22menu%22%29%29%20%7B%0A%09%09if%20%28%21menu._placesView%29%20continue%3B%0A%09%09menu._placesView.uninit%28%29%3B%0A%09%09delete%20menu._placesView%3B%0A%09%7D%0A%7D%0Athis.textContent%20%3D%20%22%22%3B%0Avar%20popup%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Apopup.position%20%3D%20%22after_start%22%3B%0Apopup.id%20%3D%20%22cb-compact-menu-menupopup%22%3B%0Apopup.setAttribute%28%22context%22%2C%20%22toolbar-context-menu%22%29%3B%0Apopup.__defineGetter__%28%22parentNode%22%2C%20%28%29%20%3D%3E%20null%29%3B%0A%0Apopup.addEventListener%28%22popuphidden%22%2C%20function%20onPH%28e%29%20%7B%0A%09if%20%28e.originalTarget%20%21%3D%20this%29%20return%3B%0A%09popup.removeEventListener%28%22popuphidden%22%2C%20onPH%2C%20false%29%3B%0A%09appendMenus%28menubar%29%3B%0A%7D%2C%20false%29%3B%0A%0AappendMenus%28popup%29%3B%0Apopup.openPopup%28this%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Автор кнопки: Dumby


Тут версия для seamonkey-nightly

Stf( Firefox, SeaMonkey )
Сохраняет выделенный текст или весь текст на странице как txt файл. При сохранение текста к названию файла добавляется текущее время так удобней сохранять несколько кусков теста из одной страницы, не надо вручную менять название файла.

ЛКМ => Сохранить выделенный текст или весь текст на странице как txt файл.


Код кнопки и инициализация:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EStf%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFsAAABYAAAAFwAAAACISi/ml2RK9ZdjSfWUYEX1jlpA9ZdjSfWXY0r1l2NL9ZdjS/WXY0v1l2NL9ZdjS/WXY0v1lWFI9J5mSvljMR7lAAAAPgIBAQDBhmP/6cOL/+Kxcf/Fo3L/kHdV/7GNXf/esHL/3q5t/9ysbP/drWz/3a1t/92tbf/erm7/3bBz/vLKlP+FUTrtAAAAPwMCAgC4f1791qtt/tOkZv7e1Mn+jIiE/lZMPv6djHX+4860/uvWu/7p1Ln+6tS4/uvVuv7nz7L+yphV/eK1fv9/TTjsAAAAPwMCAgC5gF//3LR6/9ixff//////29nU/5CRlP9SU1X/paGd//Xr4P//8OP/+uzc//zs2v/57uH/0aRm/ue+iv+ATTftAAAAPwMCAgC5gF//4LiC/9myfv///v3/8eXW/9LPy/+Li4z/RkI7/5OIef/l077/9N/I//Texv/36dn/06Zs/urBkP9/TDbtAAAAPwMCAgC5gGD/5sab/9u1hP////7/+vPp//Pp3f/Iwbr/foCE/0VERP+Lg3r/4NG///rm0P/369v/1Klx/uvFlv9/TDXtAAAAPwMCAgC7gmP/7dS1/926jf/+/Pv/9uzg//jt4P/06dv/u7m3/5l2QP90ShH/fXVv/+DPvP/57d3/1ax0/u7JnP9/SzTtAAAAPwMCAgC8hWj/8Nu//967j////////////////v//////9vTz/9+8gP/GgRL/ckwc/4eBff/n3tH/2bB5/u/Opf9/TDbtAAAAPwMCAgC9hmr/9OPM/9qzgv/p07T/6tO2/+rTtf/p0rT/7de7/97GqP/SoVH/x4IT/2xMJP+Admr/zKRw/vXUrf9/TTjtAAAAPwMCAgC+iW7/9ufT/+rRtP/lyKX/5Mim/+THpv/kx6T/4sWh/+rLp/+9pIf/vZJP/8WCGf9iPhH/fW9c/unNrP+CTzrtAAAAPwMCAgC/inD/+OrX//Ddyv/559X//OrV//ro0//659L/+ufS//zo0v/m1cL/lod4/7iPT//Ihx//Y0ck/pSLg/95STPtAAAAPwICAgC/i3L/+Ova//fk0P/Ct6v/o52W/6uknP+qo5v/q6Sc/6qjm/+1raT/rqij/2ZhX/+wj1n/w4EZ/m1QLv89JB/zAAAASgEBAQDAjnb9+O3e//rn1P+jnpn/lZib/6eoqf+rrK7/srK0/7y9vv+0trj/oaGi/6Cho/9eXF7/w59n/8qFF/9KKgP9AAAAhQIBAAW+h2z/+PLk/P/15fusqKP+oaKi/7Kysf+3trb/vby8/8nJyf+3t7f/cnFx/6Wlpf+fmpL+dXVx+66UYfyuhUP/Ligj1QAAAFqBPSKJ2KWK//PNt/+klo78oKKk+7Cvr/u1tLX7vLu7+8jIyPu3t7b7dHNz+52ho/vHrJz+y6WP/51vX/61jVvuxo0s/z0nCsERBgMDKw8ERh4AAEFjWFS9sLKz/62srfyzs7T/urm5/8HCwv/AwMD/sbGx/cDDw/9GNC7SKgsAaSgNAkMwKSQtq4VIsks0EmcBAQACAQEBAgAAAAAjIyNKOjo6fjU1NXM2NjZ1NjY2dTY2NnU3Nzd1Ozs7czw8PH0UFBQ4AAAAAAEBAQEAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20saveSelectionToTxt%28%29%3B%20//%20%u041B%u041A%u041C%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u043B%u0438%20%u0432%u0435%u0441%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u043A%u0430%u043A%20txt%20%u0444%u0430%u0439%u043B%20.....................%0Afunction%20saveSelectionToTxt%28%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0438%u0442%u044C%20%u0432%u0441%u0451%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20....%0A%20%20%20%20%20var%20all%20%3D%20%21getSelect%28%29%3B%0A%20%20%20%20%20if%20%28%20all%20%29%20document.getElementById%28%22cmd_selectAll%22%29.doCommand%28%29%3B%20%0A%0A%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20var%20docTite%20%3D%20getDocTitle%28%29%3B%0A%0A%20%20%20%20%20if%20%28%20%21sel%20%7C%7C%20%21docTite%29%20return%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043B%u044F%20%u0444%u0430%u0439%u043B%u0430%20...%0A%20%20%20%20%20var%20time%20%3D%20new%20Date%28%29.toLocaleFormat%28%22%25H%3A%25M%3A%25S%22%29%3B%0A%20%20%20%20%20var%20fileTitle%20%3D%20docTite%20+%20%27%20%20%27%20+%20time.replace%28/%3A/g%2C%20%22%u05C3%22%29%3B%0A%0A%20%20%20%20%20//%20%u0441%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20....%0A%20%20%20%20%20saveURL%28%22data%3Atext/plain%2C%22%20+%20encodeURIComponent%28%20content.location.href%20+%20%28%22%5Cr%5Cn%5Cr%5Cn%22%20+%20getSelect%28%29%20%29%29%2C%20fileTitle%20+%20%22.txt%22%2C%20null%2C%20false%2C%20false%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20if%20%28%20all%20%29%20goDoCommand%28%22cmd_selectNone%22%29%3B%20%0A%7D%3B%0A%0A%0A%0A/*%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%u0430%20%u0443%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0435%u0442%0A%20%20%20%u0438%u043B%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0435%u0441%u043B%u0438%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u043D%u0435%u0442%20...................................................%20*/%0Afunction%20getDocTitle%28%29%20%7B%0A%20%20%20%20%20var%20protocol%20%3D%20content.location.protocol%3B%0A%20%20%20%20%20if%20%28%20%5B%22about%3A%22%2C%20%22chrome%3A%22%2C%20%22jar%3A%22%2C%20%22data%3A%22%5D.indexOf%28%20protocol%20%29%20%21%3D%20-1%20%29%20return%20false%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20content.document.title%20%7C%7C%20content.document.domain%20%7C%7C%20gBrowser.mCurrentTab.label%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0435%u0434%u043E%u043F%u0443%u0441%u0442%u0438%u043C%u044B%u0435%20%u0441%u0438%u043C%u0432%u043E%u043B%u044B%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%20%0A%0A%20%20%20%20%20%20%20%20%20%20return%20docTitle.substring%280%2C%2050%29%3B%0A%7D%3B%0A%0A%0A%0A/*%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20%20%u0444%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..........................................*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20%20var%20anchor%20%3D%20%28selection.anchorNode%20%21%3D%3D%20null%29%3F%20selection.anchorNode%3A%20false%3B%0A%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%27PRE%27%20....%0A%20%20%20%20if%20%28%20anchor%20%26%26%20anchor.parentNode.tagName%20%3D%3D%20%27PRE%27%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20selection.focusNode%3B%0A%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20selection.anchorOffset%3B%0A%20%20%20%20%20%20%20%20%20var%20endPos%20%3D%20selection.focusOffset%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20node.data.substring%28startPos%2C%20endPos%29%3B%20%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20%20%20if%20%28%20selection.toString%28%29.length%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20//%20%u0438%u0441%u043F%u0440%u0430%u0432%u043B%u044F%u0435%u043C%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%u0443%20%u0441%20%u043F%u0435%u0440%u0435%u043D%u043E%u0441%u043E%u043C%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u043E%u0432%u0443%u044E%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u0432%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u043C%20win%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0435%20....%0A%20%20%20%20if%20%28%20selection.toString%28%29.length%20%21%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000D%5Cu000D%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0435%u0435%20%u0432%u0440%u0435%u043C%u044F%20.................................................................%0Afunction%20getTime%28%29%20%7B%0A%20%20%20var%20now%20%3D%20new%20Date%28%29%3B%0A%20%20%20return%20now.toLocaleFormat%28%22%25H%3A%25M%3A%25S%22%29%3B%0A%7D%3B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20............................................................................%0Athis.tooltipText%20%3D%20%22Stf%20%5Cn%u041B%3A%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u043B%u0438%20%u0432%u0435%u0441%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u043A%u0430%u043A%20txt%20%u0444%u0430%u0439%u043B%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     if ( e.button == 0 ) saveSelectionToTxt(); // ЛКМ
};


// Сохранить выделенный текст или весь текст на странице как txt файл .....................
function saveSelectionToTxt() {
     
     // выделить всё если текст не выделен ....
     var all = !getSelect();
     if ( all ) document.getElementById("cmd_selectAll").doCommand(); 

     var sel = getSelect();
     var docTite = getDocTitle();

     if ( !sel || !docTite) return;
      
     // создать название для файла ...
     var time = new Date().toLocaleFormat("%H:%M:%S");
     var fileTitle = docTite + '  ' + time.replace(/:/g, "׃");

     // сохранить ....
     saveURL("data:text/plain," + encodeURIComponent( content.location.href + ("\r\n\r\n" + getSelect() )), fileTitle + ".txt", null, false, false, null, content.document);
     if ( all ) goDoCommand("cmd_selectNone"); 
};



/* Получить заголовк страницы или название домена если заголовка у страницы нет
   или название вкладки если домена нет ................................................... */
function getDocTitle() {
     var protocol = content.location.protocol;
     if ( ["about:", "chrome:", "jar:", "data:"].indexOf( protocol ) != -1 ) return false;  
          var docTitle = content.document.title || content.document.domain || gBrowser.mCurrentTab.label;       
          // заменить недопустимые символы и удалить лишние пробелы 
          var docTitle = docTitle.replace(/[:.\\\/<>?*|"]+/g, " ")
          var docTitle = docTitle.replace(/\s\s+/g, " "); 

          return docTitle.substring(0, 50);
};



/* Получить выделенный текст из страницы или текстового поля,
   если текст не выделен  функция отдаст 'false' ..........................................*/
function getSelect() {
    // выделенный текст из страницы ....
    var selection = document.commandDispatcher.focusedWindow.getSelection();
    var anchor = (selection.anchorNode !== null)? selection.anchorNode: false;

    // выделенный текст из 'PRE' ....
    if ( anchor && anchor.parentNode.tagName == 'PRE' ) { 
         var node = selection.focusNode;
         var startPos = selection.anchorOffset;
         var endPos = selection.focusOffset;
         var selection = node.data.substring(startPos, endPos); 
         }
    // выделенный текст из текстового поля ....
    if ( selection.toString().length == 0 ) {
         var theBox = document.commandDispatcher.focusedElement;
         if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
              var startPos = theBox.selectionStart;
          var endPos = theBox.selectionEnd;
          var selection = theBox.value.substring(startPos, endPos);  
              }
         }
    // исправляем проблему с переносом текста новую строку в стандартном win блокноте ....
    if ( selection.toString().length !== 0 ) {
         var selection = selection.toString();
         var selection = selection.replace(/\u000A/g, "\u000D\u000A");
         var selection = selection.replace(/\u000D\u000D\u000A/g, "\u000D\u000A");     
         }
    return ( selection == '')? false: selection;
};



// Получить текущее время .................................................................
function getTime() {
   var now = new Date();
   return now.toLocaleFormat("%H:%M:%S");
};


                    
// Подсказка кнопки ............................................................................
this.tooltipText = "Stf \nЛ: Сохранить выделенный текст или весь текст на странице как txt файл";


Спасибо Dumby и Infocatcher за помощь в исправление ошибок в кнопке.

Управление отсылкой Referer'ов(Firefox)
Управляет отсылкой заголовка Referer
ЛКМ переключает значения у параметра network.http.sendRefererHeader:
- Никогда не посылать Referer
- Посылать Referer при клике на ссылке
- Посылать Referer при клике на ссылке или загрузке изображений
!!! Отключение посылки Referer может вызвать проблемы в работе некоторых сайтов.
Для посайтовой настройки лучше использовать расширение RefControl (иконки взяты как раз из него)

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EToggle%20Referer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27network.http.sendRefererHeader%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%09switch%28this.PS.getIntPref%28this.pref%29%29%0A%09%7B%0A%09case%200%3A%20%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAwUlEQVR4nGL4z0AZBAggOAXBOBQxgAk4RlYPEEBoBmA3BKwJBtDUAgQQimNwGQI3AEkNA1QdQABh+AibIajOZoCaBVEDEEBgBQ0NDf9hGLshqJqRDQAIILgBMIBpCKZmZAMAAgirAVgNQQMwAwACCMMA7KGN2wCAAMJuAAleAAggTAMIBCJqgvrPABBAqAYgKYSEA+EoBggghAFoTsU0ALshAAGEM56xG4BpCEAAoQgiJyjcBqBmPoAAwqmEWAgQYADCy0D6wdEYNwAAAABJRU5ErkJggg%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041D%u0438%u043A%u043E%u0433%u0434%u0430%20%u043D%u0435%20%u043F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%27%3B%0A%09%09break%3B%0A%09case%201%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAj0lEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwggsIKGhob/yJgUAwACCG4ADCAbguJcHAYABBBOA5Bdgs8AgADCMADZIGIMAAggig0ACCCiDcCGQXIAAUSUAfggQABRbABAAFFsAEAAYU1IuBIUNggQQEQowQ8BAgwAGfZda0OWZtsAAAAASUVORK5CYII%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0435%27%3B%0A%09%09break%3B%0A%09case%202%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC%27%3B%0A%09%09this.tooltipText%3D%20%27%u041F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0435%20%u0438%u043B%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0435%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0439%27%3B%0A%09%20%09break%3B%0A%09%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%200%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C0%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

switch(this.PS.getIntPref(this.pref)){
    case 0: this.PS.setIntPref(this.pref,2);break;
    case 1: this.PS.setIntPref(this.pref,0);break;
    case 2: this.PS.setIntPref(this.pref,1);break;
}

Инициализация:

Выделить код

Код:

this.pref='network.http.sendRefererHeader';
this.setState=function(){
    switch(this.PS.getIntPref(this.pref))
    {
    case 0: 
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAwUlEQVR4nGL4z0AZBAggOAXBOBQxgAk4RlYPEEBoBmA3BKwJBtDUAgQQimNwGQI3AEkNA1QdQABh+AibIajOZoCaBVEDEEBgBQ0NDf9hGLshqJqRDQAIILgBMIBpCKZmZAMAAgirAVgNQQMwAwACCMMA7KGN2wCAAMJuAAleAAggTAMIBCJqgvrPABBAqAYgKYSEA+EoBggghAFoTsU0ALshAAGEM56xG4BpCEAAoQgiJyjcBqBmPoAAwqmEWAgQYADCy0D6wdEYNwAAAABJRU5ErkJggg==';
        this.tooltipText= 'Никогда не посылать Referer';
        break;
    case 1:
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAj0lEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwggsIKGhob/yJgUAwACCG4ADCAbguJcHAYABBBOA5Bdgs8AgADCMADZIGIMAAggig0ACCCiDcCGQXIAAUSUAfggQABRbABAAFFsAEAAYU1IuBIUNggQQEQowQ8BAgwAGfZda0OWZtsAAAAASUVORK5CYII=';
        this.tooltipText= 'Посылать Referer при клике на ссылке';
        break;
    case 2:
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC';
        this.tooltipText= 'Посылать Referer при клике на ссылке или загрузке изображений';
         break;
    }
}

this.PS=
 Components.classes['@mozilla.org/preferences-service;1']
 .getService(Components.interfaces.nsIPrefBranch);
this.ob={};
this.ob.observe=this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();

Add-on's (Дополнения) (Firefox 4 — Firefox 19) Для более новых версий подойдёт альтернативный вариант.
Основано на кнопке Add-on's для Firefox 3. Автор исправленной версии для работы с Firefox 4: Anton.

для быстрого доступа к пункту меню Инструменты - дополнения (Расширенный вариант)
Левый клик мышью - открывает окно дополнений.
Средний клик мышью - открывает дополнения слева в боковой панели.
Crtl+Средний клик мышью - открывает дополнения в новой вкладке.
Правый клик мышью - отображается меню в виде списка всех дополнений и быстрым доступом к настройкам выбранного дополнения.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EAdd-on%27s%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.url2xul%20%3D%20%27chrome%3A//mozapps/content/extensions/extensions.xul%27%3B%0Athis.onClick%20%3D%20function%20%28e%29%20%7B%0A%20%20%20%20switch%20%28e.button%29%20%7B%0A%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenAddonsMgr%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenExtensions%28%27extensions%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.ctrlKey%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20t%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20current%20%3D%20content.document.location.href%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20i%20%3D%20t.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20this.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20while%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28--i%20%3C%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20loadURI%28this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20//%20add%20new%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%20%3D%3D%20this.url2xul%29%20//%20popup%20loaded%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27this.onClick%28event%29%3B%27%29%3B%0A%20%0Aconst%20Cb%20%3D%20custombuttons%3B%0A%20%0Afunction%20prop%28aElement%2C%20aString%29%20%7B%0A%20%20%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF%20+%20aString%29%3B%0A%20%20%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20%20%20return%20null%3B%0A%7D%0A%20%0Avar%20cloneCBcontext%20%3D%20%7B%0A%20%20%20%20cloneItems%3A%20function%20%28aNode%2C%20aID%2C%20aSeparate%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menupopup%20%3D%20document.getElementById%28aID%29.cloneNode%28true%29%3B%0A%20%20%20%20%20%20%20%20var%20menuitems%20%3D%20menupopup.childNodes.length%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20menuitems%3B%20i++%29%0A%20%20%20%20%20%20%20%20aNode.appendChild%28menupopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20if%20%28aSeparate%29%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20makeMenu%3A%20function%20%28aNode%29%20%7B%0A%20%20%20%20%20%20%20%20var%20m%20%3D%20aNode.appendChild%28document.createElement%28%22menu%22%29%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%20%20%20%20%20var%20mp%20%3D%20m.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20%20%20%20%20cloneCBcontext.cloneItems%28mp%2C%20%22custombuttons-contextpopup%22%29%3B%0A%20%20%20%20%20%20%20%20aNode.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20m%29%3B%0A%20%20%20%20%7D%0A%7D%0A%20%0Aconst%20popupID%20%3D%20%22cbContext-extensionsButton%22%3B%0A%20%0Avar%20test%20%3D%20document.getElementById%28popupID%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%20%0Avar%20main%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Avar%20cPopup%20%3D%20main.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AcPopup.id%20%3D%20popupID%3B%0AcPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20document.popupNode.openPrefs%28event%29%3B%22%29%0A%20%0Avar%20app%20%3D%20Cc%20%5B%22@mozilla.org/fuel/application%3B1%22%5D.%20getService%20%28Ci.%20fuelIApplication%29%3B%0Avar%20am%20%3D%20%7B%7D%3B%0ACu.%20import%20%28%22resource%3A//gre/modules/AddonManager.jsm%22%2C%20am%29%3B%0Aam.%20AddonManager.%20getAddonsByTypes%0A%28%0A%20%20%20%20%20%20%20%20%5B%22extension%22%5D%2C%0A%20%20%20%20%20%20%20%20function%20%28extensions%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20e%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20extensions.%20length%3B%20i++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%20%3D%20extensions%20%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mi%20%3D%20%3Cmenuitem%20xmlns%3D%7Bxulns%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%7Be.%20name%20+%20%22%20%22%20+%20e.%20version%7D/%3E%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.%20iconURL%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi%20%5B%22@class%22%5D%20%3D%20%22menuitem-iconic%20bookmark-item%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi%20%5B%22@image%22%5D%20%3D%20e.%20iconURL%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.%20userDisabled%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi%20%5B%22@disabled%22%5D%20%3D%20%22true%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.%20optionsURL%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi%20%5B%22@oncommand%22%5D%20%3D%20%22window.%20openDialog%20%28%27%22%20+%20e.%20optionsURL%20+%20%22%27%2C%20%27%27%2C%20%27chrome%2Cdialog%3D0%2Cresizable%2Ctitlebar%2Ctoolbar%2Ccenterscreen%27%29%3B%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cPopup.%20appendChild%20%28cbu.%20makeXML%20%28mi%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20arr%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%09for%20%28var%20j%20%3D%200%3B%20j%20%3C%20cPopup.%20childNodes.%20length%3B%20j++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09arr%20%5Bj%5D%20%3D%20cPopup.%20childNodes%20%5Bj%5D%3B%0A%20%20%20%20%20%20%20%20%09arr.%20sort%0A%20%20%20%20%20%20%20%20%09%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09function%20%28a%2C%20b%2C%20c%2C%20d%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09if%20%28a.%20nodeName%20%3D%3D%20%22menu%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%20-1%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09else%20if%20%28b.%20nodeName%20%3D%3D%20%22menu%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%20a.%20getAttribute%20%28%22label%22%29.%20toLowerCase%20%28%29%20%3E%20b.%20getAttribute%20%28%22label%22%29.%20toLowerCase%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%7D%0A%20%20%20%20%20%20%20%20%09%29%3B%0A%20%20%20%20%20%20%20%20%09for%20%28var%20j%20%3D%200%3B%20j%20%3C%20arr.%20length%3B%20j++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09cPopup.%20appendChild%20%28arr%20%5Bj%5D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%29%3B%0A%20%0AcloneCBcontext.makeMenu%28cPopup%29%3B%0Athis.setAttribute%28%22context%22%2C%20popupID%29%3B%0A%20%0Aif%20%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%20%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%20%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup-subCall%22%29.cloneNode%28true%29%3B%20//%20Cb%20context%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0AsubMenu.appendChild%28cbPopup.lastChild%29%3B%0A%20%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%20%0Athis.setAttribute%28%22context%22%2C%20popup.id%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII=

Инициализация:

Выделить код

Код:

this.url2xul = 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick = function (e) {
    switch (e.button) {
    case 0:
        try {
            BrowserOpenAddonsMgr();
        }
        catch(e) {
            BrowserOpenExtensions('extensions');
        }
        break;
    case 1:
        {
            if (e.ctrlKey) {
                var t = gBrowser.mTabs;
                var current = content.document.location.href;
                var i = t.length;
                if (current == this.url2xul) gBrowser.removeCurrentTab();
                else while (true) {
                    if (--i < 0) {
                        if (current == 'about:blank') // replace blank tab
                        loadURI(this.url2xul);
                        else // add new tab
                        gBrowser.selectedTab = gBrowser.addTab(this.url2xul);
                        break;
                    };
                    if (t[i].linkedBrowser.currentURI.spec == this.url2xul) // popup loaded
                    {
                        gBrowser.selectedTab = gBrowser.tabContainer.childNodes[i];
                        break;
                    };
                };
            } else openWebPanel(this.tooltipText, this.url2xul);
        };
        break;
    };
};
this.setAttribute('onclick', 'this.onClick(event);');
 
const Cb = custombuttons;
 
function prop(aElement, aString) {
    var emRDF = "http://www.mozilla.org/2004/em-rdf#";
    var arc = RDFService.GetResource(emRDF + aString);
    var target = extensionDS.GetTarget(aElement, arc, true);
    if (target instanceof Ci.nsIRDFLiteral) return target.Value;
    if (target instanceof Ci.nsIRDFInt) return target.Value;
    return null;
}
 
var cloneCBcontext = {
    cloneItems: function (aNode, aID, aSeparate) {
        var menupopup = document.getElementById(aID).cloneNode(true);
        var menuitems = menupopup.childNodes.length;
        for (var i = 0; i < menuitems; i++)
        aNode.appendChild(menupopup.firstChild);
        if (aSeparate) aNode.appendChild(document.createElement("menuseparator"));
    },
    makeMenu: function (aNode) {
        var m = aNode.appendChild(document.createElement("menu"));
        m.setAttribute("label", "Custom Button");
        m.setAttribute("oncommand", "event.stopPropagation()");
        var mp = m.appendChild(document.createElement("menupopup"));
        cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
        aNode.insertBefore(document.createElement("menuseparator"), m);
    }
}
 
const popupID = "cbContext-extensionsButton";
 
var test = document.getElementById(popupID);
if (test) test.parentNode.removeChild(test);
 
var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("menupopup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand", "event.stopPropagation(); document.popupNode.openPrefs(event);")
 
var app = Cc ["@mozilla.org/fuel/application;1"]. getService (Ci. fuelIApplication);
var am = {};
Cu. import ("resource://gre/modules/AddonManager.jsm", am);
am. AddonManager. getAddonsByTypes
(
        ["extension"],
        function (extensions)
        {
                var e;
                for (var i = 0; i < extensions. length; i++)
                {
                        e = extensions [i];
                        var mi = <menuitem xmlns={xulns}
                                           label={e. name + " " + e. version}/>;
                        if (e. iconURL)
                        {
                                mi ["@class"] = "menuitem-iconic bookmark-item";
                                mi ["@image"] = e. iconURL;
                        }
                        if (e. userDisabled)
                                mi ["@disabled"] = "true";
                        if (e. optionsURL)
                                mi ["@oncommand"] = "window. openDialog ('" + e. optionsURL + "', '', 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen');";
                        cPopup. appendChild (cbu. makeXML (mi));
                }
                var arr = [];
            for (var j = 0; j < cPopup. childNodes. length; j++)
                arr [j] = cPopup. childNodes [j];
            arr. sort
            (
                    function (a, b, c, d)
                    {
                        if (a. nodeName == "menu")
                            return -1;
                        else if (b. nodeName == "menu")
                            return 1;
                        return a. getAttribute ("label"). toLowerCase () > b. getAttribute ("label"). toLowerCase ();
                    }
            );
            for (var j = 0; j < arr. length; j++)
                cPopup. appendChild (arr [j]);
        }
);
 
cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);
 
if (typeof Local_Install != "object") return;
 
var test = document.getElementById("cbContext-extensions");
if (test) test.parentNode.removeChild(test);
 
var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context
var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.appendChild(cbPopup.lastChild);
 
var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
extensionsPopup.parentNode.appendChild(popup);
 
this.setAttribute("context", popup.id);


02-04-2011 22:39:48
FFolders (Папки Firefox) (Firefox 1 — Firefox 19). Более новая версия кнопки — здесь.
Автор: Anton.
Кнопка содержит выпадающее меню, через которое можно открыть папку с текущим профилем и папку установки Firefox.
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFFolders%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22ProfD%22/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20Firefox%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22CurProcD%22/%3E%0A%20%20%20%20%20%20%3C/menupopup%3E%3B%0Athis.%20appendChild%20%28custombuttonsUtils.%20makeXML%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%20%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20value%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20file%20%3D%20Cc%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%20getService%20%28Ci.%20nsIProperties%29%3B%0A%20%20%20%20%20%20%20%20file%20%3D%20file.%20get%20%28value%2C%20Ci.%20nsIFile%29.%20QueryInterface%20%28Ci.%20nsILocalFile%29%3B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this.%20open%20%3D%20false%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

Инициализация:

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              onclick="this. parentNode. handleClick (event);">
        <menuitem label="Открыть папку текущего профиля"
              value="ProfD"/>
        <menuitem label="Открыть папку установки Firefox"
              value="CurProcD"/>
      </menupopup>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";
 
this. handleClick = function (event)
{
    var menuitem = event. target;
    var value = menuitem. getAttribute ("value");
    if (event. button == 0)
    {
        var file = Cc ["@mozilla.org/file/directory_service;1"]. getService (Ci. nsIProperties);
        file = file. get (value, Ci. nsIFile). QueryInterface (Ci. nsILocalFile);
        file. launch ();
        }
    this. open = false;
};

Quick bookmarks( Firefox 3.6 + )
Добавляет все открытие вкладки или текущую вкладку как закладки в папку закладок Новая папка или удаляет эту папку закладок. Можно в начале кода инициализации папку закладок заменить на свою.

ЛКМ => добавить все открытие вкладки в папку закладок,
СКМ => добавить текущую вкладку в папку закладок,
ПКМ => удалить папку закладок,
Ctrl+ПКМ => открыть контекстное меню кнопки.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EQuick%20bookmarks%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAEFBwcD5TTywYtQTQHAAAAAAECAgAAAAABAgEDAAAAACZKJaoakiP/K4A0ywIAAAIBAQAAAAAAAAAAAAAAAQEBAQAAAAwaIj8ZrvD9GLr382eet7eKfnt7SkI9PBgQCg4CAAUAJGYouiDSL/87r0DbCgMABwAAAQACAgICAAAAAQMDBAAXFRYjGh8mahGR2O8fx///Ic3//obh/P+s2PD/W7HZ6CKe4NcvmWr7Ercb/0+6P++PTBBXCwUAAwAAAQAAAAAABQYHAxodHzcaFBdLDHrD3ifN//8oxvf6Hsb/+xeLff0FjED/DqRQ/x+hM/8KkhX/Qb1J+nS3UOtUoUjRNHg9vw0NDgEjIiUUIBMRHBstN0sep9/pLNH//y/O+v430v//E3pB/xClAP440zf9Ps1I/zekQv9EpE7/S79j/2jQeP9dpmL/DQ0OAR4jJxAfZoJ2I73u7i/T//8y0Pz+NdT8/zrX//8yp4r/O7ps/2jXlP9/5Iz/YdRr/2KoZf51mWP/Y4JY6ERbR70AAAAAGmV6ckbo//9D5v7+ONf+/jbV/P482f3/P9z9/0Df//9x4/7/fuP//2rTm/903Hj/Zp1f++q7jP+XelyoAAAAAAEBAQEAAQEBECQkITR8h3tJx+DZTN///0Hd/P5D4P3/YOf8/670/P+l8///asiV/3fKev9xnG7778qc/5yDY6gAAAAAAAAAAAAAAAAAAQEBAAAAAAAGBwA0oMfGTOn//4fs/PzN+P//l/D8/7T8//96u5//ZZVl/4Ocfvv84Lz/nIRkqAAAAAAAAAAAAAAAAAECAgIBBgcIAAAAAESAm6Jv5///1vv9++38///u+Pr/3PDz/+Di2v/j1rr/6Ne8+//v0P+ei3KoAAAAAAAAAAAAAAAAAAAAAAIDAwMAAAAAiJiho2zT///L9/z7+f3+//77+v/u7O7/7+Ta///qzP/35Mn7//PX/6KUgagAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACuqKWijdv//87t+Pv/////+fv7/+zu8P/t5dz//OrQ//np0fv/+d//o5eGqAAAAAAAAAAAAAAAAAAAAAADAwMEAAAAAKampaL/////+vr6+////v/8/Pv/7e7v/+/n3v//79f//O3Y+//+6P+kmoqoAAAAAAAAAAAAAAAAAAAAAAMDAwQAAAAApKSkoP/////4+fj5/f39/v39/f7z9Pb/8Oni///z4P/88eD7///y/6SdkKgAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACrq6ui//////v7+/v///////////7///728ez8+vHi/Prz5fn///n/pJ6VpwAAAAAAAAAAAAAAAAAAAAACAgIDAAAAAF5eXlrGxsXE0tLS0erq6un6+vr5////////////////+/v4+/////+opZ2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwICExMTEisrKylHR0dFaGdnZYmKi4inpqam19TP2pGOiI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20button%20%3D%20this%3B%0Avar%20folderName%20%3D%20%22%u041D%u043E%u0432%u0430%u044F%20%u043F%u0430%u043F%u043A%u0430%22%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20var%20bmsvc%20%3D%20Components.classes%20%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%20%20%20%20%20var%20rootFolder%20%3D%20bmsvc.toolbarFolder%3B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.createFolder%28%20rootFolder%2C%20folderName%2C%20bmsvc.%20DEFAULT_INDEX%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20uris%20%3D%20getTabsURIs%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20ios%20%3D%20Components.%20classes%20%5B%22@mozilla.org/network/io-service%3B1%22%5D.getService%20%28Components.%20interfaces.%20nsIIOService%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20uri%3B%0A%20%20%20%20%20%20%20%20%20%20bmsvc.runInBatchMode%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20runBatched%3A%20function%28%20data%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20uris.%20length%3B%20i++%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.insertBookmark%28%20f%2C%20uris%5Bi%5D.uri%2C%20bmsvc.DEFAULT_INDEX%2C%20uris%5Bi%5D.label%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.createFolder%28%20rootFolder%2C%20folderName%2C%20bmsvc.DEFAULT_INDEX%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20br%20%3D%20gBrowser.%20getBrowserForTab%20%28gBrowser.%20mCurrentTab%29%3B%0A%20%20%20%20%20%20%20%20%20%20bmsvc.insertBookmark%28%20f%2C%20br.webNavigation.currentURI%2C%20bmsvc.DEFAULT_INDEX%2C%20gBrowser.mCurrentTab.label%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20/*%0A%20%20%20%20%20%20%20%20%20%20var%20sebp%20%3D%20StarUI.showEditBookmarkPopup%3B%0A%20%20%20%20%20%20%20%20%20%20StarUI.showEditBookmarkPopup%20%3D%20function%28%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28%20false%2C%20f%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20StarUI.showEditBookmarkPopup%20%3D%20sebp%3B%0A%20%20%20%20%20%20%20%20%20%20*/%0A%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20bmsvc%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.removeItem%28%20f%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0423%u0434%u0430%u043B%u0438%u043B%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0430%u0434%u0440%u0435%u0441%u0430%u043C%u0438%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%u043C%u0438%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20................................%20%0Afunction%20getTabsURIs%28%29%20%7B%0A%20%20%20var%20tabList%20%3D%20%5B%5D%3B%0A%20%20%20var%20seenURIs%20%3D%20%5B%5D%3B%20%20%20%20%20%20%20%20%0A%20%20%20var%20br%2C%20webNav%2C%20uri%3B%0A%20%20%20%0A%20%20%20var%20tabs%20%3D%20getBrowser%28%29.mTabs%3B%0A%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20tabs.%20length%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20br%20%3D%20gBrowser.getBrowserForTab%28%20tabs%5Bi%5D%20%29%3B%0A%20%20%20%20%20%20%20%20%20var%20webNav%20%3D%20br.webNavigation%3B%0A%20%20%20%20%20%20%20%20%20uri%20%3D%20webNav.currentURI%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20uri.spec%20in%20seenURIs%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20seenURIs%5Buri.spec%5D%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20tabList.push%20%28%7B%20uri%3A%20uri%2C%20label%3A%20tabs%5Bi%5D.label%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20return%20tabList%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20................................%20%0Afunction%20getChildFolder%28%20parentId%2C%20title%20%29%20%7B%0A%20%20%20var%20res%20%3D%20null%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20hs%20%3D%20Cc%20%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Ci.nsINavHistoryService%29%3B%0A%20%20%20%20%20%20%20%20var%20options%20%3D%20hs.getNewQueryOptions%28%29%3B%0A%20%20%20%20%20%20%20%20options.excludeItems%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20var%20query%20%3D%20hs.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20query.setFolders%28%20%5BparentId%5D%2C%201%20%29%3B%0A%20%20%20%20%20%20%20%20var%20result%20%3D%20hs.executeQuery%28%20query%2C%20options%20%29%3B%0A%20%20%20%20%20%20%20%20var%20rn%20%3D%20result.root%3B%0A%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20var%20i%2C%20node%3B%0A%20%20%20%20%20%20%20%20for%20%28%20i%20%3D%200%3B%20i%20%3C%20rn.childCount%3B%20i++%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20rn.getChild%28i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20node.title%20%3D%3D%20title%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20node.itemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28e%29%20%7B%7D%0A%20%20%20%0A%20%20%20return%20res%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20............................%0Athis.tooltipText%20%3D%20%22Quick%20bookmarks%5Cn%u041B%u041A%u041C%20%3D%3E%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5Cn%u0421%u041A%u041C%20%3D%3E%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5Cn%u041F%u041A%u041C%20%3D%3E%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5CnCtrl+%u041F%u041A%u041C%20%3D%3E%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Объявляем переменные для этой вкладки ................................
var button = this;
var folderName = "Новая папка";
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {

     var bmsvc = Components.classes ["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
     var rootFolder = bmsvc.toolbarFolder;

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) {
          var f = getChildFolder( rootFolder, folderName );
          if ( !f ) {
               bmsvc.createFolder( rootFolder, folderName, bmsvc. DEFAULT_INDEX );
               f = getChildFolder( rootFolder, folderName );
               }
          var uris = getTabsURIs();
          var ios = Components. classes ["@mozilla.org/network/io-service;1"].getService (Components. interfaces. nsIIOService);
          var uri;
          bmsvc.runInBatchMode({
                runBatched: function( data ) {
                for ( var i = 0; i < uris. length; i++ )
                      bmsvc.insertBookmark( f, uris[i].uri, bmsvc.DEFAULT_INDEX, uris[i].label );
                      alertsService.showAlertNotification( button.image, button.label, 'Добавил все вкладки в папку закладок: ' + folderName, false, "", null, ""); 
                }
                }, null );
          };
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) { 
          var f = getChildFolder( rootFolder, folderName );
          if ( !f ) {
               bmsvc.createFolder( rootFolder, folderName, bmsvc.DEFAULT_INDEX );
               f = getChildFolder( rootFolder, folderName );
               }
          var br = gBrowser. getBrowserForTab (gBrowser. mCurrentTab);
          bmsvc.insertBookmark( f, br.webNavigation.currentURI, bmsvc.DEFAULT_INDEX, gBrowser.mCurrentTab.label );
          /*
          var sebp = StarUI.showEditBookmarkPopup;
          StarUI.showEditBookmarkPopup = function() {};
          PlacesCommandHook.bookmarkCurrentPage( false, f );
          StarUI.showEditBookmarkPopup = sebp;
          */
          alertsService.showAlertNotification( button.image, button.label, 'Добавил вкладку в папку закладок: ' + folderName, false, "", null, ""); 
          };
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();  
          
          var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
          var f = getChildFolder( rootFolder, folderName );
          if ( f ) {
               bmsvc.removeItem( f );
               alertsService.showAlertNotification( button.image, button.label, 'Удалил папку закладок: ' + folderName, false, "", null, ""); 
               }
          };
};



// Получить массив с адресами и названиями вкладок ................................ 
function getTabsURIs() {
   var tabList = [];
   var seenURIs = [];        
   var br, webNav, uri;
   
   var tabs = getBrowser().mTabs;
   for ( var i = 0; i < tabs. length; ++i ) {
         br = gBrowser.getBrowserForTab( tabs[i] );
         var webNav = br.webNavigation;
         uri = webNav.currentURI;
         if ( uri.spec in seenURIs ) continue;
         seenURIs[uri.spec] = true;
         tabList.push ({ uri: uri, label: tabs[i].label });
         }
   
   return tabList;
};



// Получить нужную папку закладок ................................ 
function getChildFolder( parentId, title ) {
   var res = null;
   try {
        var hs = Cc ["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
        var options = hs.getNewQueryOptions();
        options.excludeItems = true;
        var query = hs.getNewQuery();
        query.setFolders( [parentId], 1 );
        var result = hs.executeQuery( query, options );
        var rn = result.root;
        rn.containerOpen = true;
        var i, node;
        for ( i = 0; i < rn.childCount; i++ ){
              var node = rn.getChild(i);
              if ( node.title == title ) {
                   res = node.itemId;
                   break;
                   }
              }
        rn.containerOpen = false;
       } 
   catch(e) {}
   
   return res;
};


// Подсказка для кнопки ............................
this.tooltipText = "Quick bookmarks\nЛКМ => добавить все открытие вкладки в папку закладок\nСКМ => добавить текущую вкладку в папку закладок\nПКМ => удалить папку закладок\nCtrl+ПКМ => открыть контекстное меню кнопки";


Автор кода: Anton

Очистить кэш и удалить флэш куки( Firefox 17-45 )
кнопка очищает кэш и удаляет Flash cookie. Сплывающая подсказка у кнопки отображает в MB максимально возможное и текущее заполнение дискового кеша, оффлайн кеша и кеша в оперативной памяти.

Скриншот подсказки у кнопки:
http://i84.fastpic.ru/big/2016/1001/b0/fd4706b8dc27ec552cfa3b298ff7abb0.png

Left => очистить кэш Firefox и удалить Flash cookie.
Код кнопки для Firefox 17-26:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EClear%20Cache%20/%20Delete%20flash%20cookies%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAQEBCxMTEyElJSU/KywrWC4sLWUzMzNrPDs8a0NEQ2MsLCxKDg0PKgABAA8AAAAAAgICAAAAAAAAAAAAAAAAAQAAAAIZGhoHQ0NDUGJiYqZxcXHVcXFx6XNzc/STlJT2t7e2+NDP0Pjb3dz11tbY67GwsNtsbWy0JyYnYQICAg8CAgICAAAAAgICAgUAAAAAJykpJ5CRkM64t7f/q6ut/7m5uf/Lx8b/19bW/9nY2P7a2dz+4d/g/+rq6P/r7Or/1NTU/3V1ddkKCwo+AQEBAQEBAQQCAgIDAAABARMTEhdubmy/rq6w/snIyfbj4+H94uXn/d/l7f3W2+X9xc3R/a20u/2oqKr9paWi96Wmpf5ubW3NFRMTNgAAAA4BAQEJAQIBAQICAgUAAQUBhY6UpuDi5f7b2Nj609ng/rfB1v+ssc3/wcja/6qyx/99hqL/iZOr/rW4vfrZ2Nf+io2VuQQHDiICAgETAQEBBgIDBAIDAgEDAQoSAau8wq3/////4Oft+tzm7v7d4On/q6zJ/0tLoP9cXKb/tbXM/9Hb5v7f5/H6/////7K6wrYBDRkNAwEABQICAQECAwQCAQIBAggNEQest7+4+v7+/8rY6Pnf5u7++/r6/6OmzP9kZa//aGmu/8rN4//7+vv/3Obr+Pn9/f+/wsK7ChIWDAIBAQECAwMDAwQEBAEBAQINFhgPprXAvPb////K1OT5vcDX/6SlzP+Bg7z/5ebu/7S11P9+gbv/l5jE/7G60fj1/P7/w8TIwBYYIRcAAQEBBAQEBAQEBQQCAAAAESIsGbTGzMH5////5u70+dTW6P+Dg7//gIC//8PD3f+gocr/OTyf/3J0t/+/xd349P7//73EzsYgIy8hAAAAAAQEBAQEBAUEAAAAABoiLSLAyszH+f///9/q9vj0+Pz/2Nfp/7e32P+9vtz/ubvX/25vtP+/weD/5/D1+Pb////AytHLJSw3KwAAAAAEBAUFBAQFBQAAAAAgKzQrvsvOyvb+/v/I2e/42ef3//L19v/p6Ov//vv7//Hy8v/Jydv/1ODu/97r9Pj9/v//zdHY0C44RjgAAAAABAUFBQQFBQUAAAAAKzpJN8TV2dD4/v7/1Oj++NDq///Q6P7/4PH//+Pw/v/U5fb/xt3z/8Tc9f/X5/f4//7//9PX29c3QktFAAAAAAUFBQUEBQUFAAAAADE5Rj7G09rT8Pr7/8PV6fi60eX/q8ff/63G4P+uxt//s8vl/7PN6//F2fD/0N/r+Pr8/P/W3+TaP09aSwAAAAAFBQUFBAUFBQAAAAA4PUhRqrW/3bK6wP57gIn2cXeD/nh+gv2Rlpf9rrKz/crNz/3c4eT94uft/tDU2/bX2dr+tL3F4kJNWl0AAAAABAUGBgMDAwYAAAAAX15jfq+vsvqjpqb/mJ2f/qmyt/+vvMP+u8nT/8jT3f/R3Ob/2OTs/97l7P/N0dX+wsLE/62usP5WV1uLAAAAAAIDBAUDAwMEAAAAAEdGRkqJiYi6mZma57CztO/Q1tr20tni98PL1vettb/3maGs94uSnfeIjpL3iY2M8ZycnOmZmJfDTUtMVgAAAAACAgIDAAAAAAAAAAAEBAUBDxEQEickJCtAODtEVlFTW2RjZGljYl9yXVxadVdWVHNRUFNqR0RHXT03NkcpJyctFBUWEwgHCAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u0435%u0448%20....%0A%20%20%20%20%20var%20cacheService%20%3D%20Cc%5B%22@mozilla.org/network/cache-service%3B1%22%5D.getService%28Ci.nsICacheService%29%3B%0A%20%20%20%20%20cacheService.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20cacheService.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%0A%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20const%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%0A%7D%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0Avar%20k%20%3D%20100%2C%20mb%20%3D%201024%20*%201024%2C%20str%20%3D%20%22%22%2C%0Acs%20%3D%20Cc%5B%22@mozilla.org/network/cache-service%3B1%22%5D.getService%28Ci.nsICacheService%29%2C%0Avisitor%20%3D%20%7B%20visitDevice%3A%20addInfo%20%7D%3B%0A%0Afunction%20addInfo%28device%2C%20info%29%20%7B%0A%20%20%20//%20if%20%28device%5B0%5D%20%3D%3D%20%22o%22%29%20return%3B%0A%20%20%20str%20+%3D%20%28str%20%3F%20%22%5Cn%22%20%3A%20%22%22%29%20+%20device%5B0%5D.toUpperCase%28%29%20+%20device.slice%281%29%20+%20%22%20Cache%3A%20%20%22%20+%0A%20%20%20%5Binfo.totalSize%2C%20info.maximumSize%5D.map%28function%28num%29%20Math.round%28k%20*%20num%20/%20mb%29%20/%20k%20+%20%22%20MB%22%29.join%28%22%20/%20%22%29%3B%0A%7D%3B%0A%0Athis.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20str%20%3D%20%22%22%3B%0A%20%20%20%20cs.visitEntries%28visitor%29%3B%0A%20%20%20%20this.tooltipText%20%3D%20str%3B%0A%7D%3B%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Код кнопки для Firefox 26-51:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0444%u043B%u044D%u0448%20%u043A%u0443%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAQEBCxMTEyElJSU/KywrWC4sLWUzMzNrPDs8a0NEQ2MsLCxKDg0PKgABAA8AAAAAAgICAAAAAAAAAAAAAAAAAQAAAAIZGhoHQ0NDUGJiYqZxcXHVcXFx6XNzc/STlJT2t7e2+NDP0Pjb3dz11tbY67GwsNtsbWy0JyYnYQICAg8CAgICAAAAAgICAgUAAAAAJykpJ5CRkM64t7f/q6ut/7m5uf/Lx8b/19bW/9nY2P7a2dz+4d/g/+rq6P/r7Or/1NTU/3V1ddkKCwo+AQEBAQEBAQQCAgIDAAABARMTEhdubmy/rq6w/snIyfbj4+H94uXn/d/l7f3W2+X9xc3R/a20u/2oqKr9paWi96Wmpf5ubW3NFRMTNgAAAA4BAQEJAQIBAQICAgUAAQUBhY6UpuDi5f7b2Nj609ng/rfB1v+ssc3/wcja/6qyx/99hqL/iZOr/rW4vfrZ2Nf+io2VuQQHDiICAgETAQEBBgIDBAIDAgEDAQoSAau8wq3/////4Oft+tzm7v7d4On/q6zJ/0tLoP9cXKb/tbXM/9Hb5v7f5/H6/////7K6wrYBDRkNAwEABQICAQECAwQCAQIBAggNEQest7+4+v7+/8rY6Pnf5u7++/r6/6OmzP9kZa//aGmu/8rN4//7+vv/3Obr+Pn9/f+/wsK7ChIWDAIBAQECAwMDAwQEBAEBAQINFhgPprXAvPb////K1OT5vcDX/6SlzP+Bg7z/5ebu/7S11P9+gbv/l5jE/7G60fj1/P7/w8TIwBYYIRcAAQEBBAQEBAQEBQQCAAAAESIsGbTGzMH5////5u70+dTW6P+Dg7//gIC//8PD3f+gocr/OTyf/3J0t/+/xd349P7//73EzsYgIy8hAAAAAAQEBAQEBAUEAAAAABoiLSLAyszH+f///9/q9vj0+Pz/2Nfp/7e32P+9vtz/ubvX/25vtP+/weD/5/D1+Pb////AytHLJSw3KwAAAAAEBAUFBAQFBQAAAAAgKzQrvsvOyvb+/v/I2e/42ef3//L19v/p6Ov//vv7//Hy8v/Jydv/1ODu/97r9Pj9/v//zdHY0C44RjgAAAAABAUFBQQFBQUAAAAAKzpJN8TV2dD4/v7/1Oj++NDq///Q6P7/4PH//+Pw/v/U5fb/xt3z/8Tc9f/X5/f4//7//9PX29c3QktFAAAAAAUFBQUEBQUFAAAAADE5Rj7G09rT8Pr7/8PV6fi60eX/q8ff/63G4P+uxt//s8vl/7PN6//F2fD/0N/r+Pr8/P/W3+TaP09aSwAAAAAFBQUFBAUFBQAAAAA4PUhRqrW/3bK6wP57gIn2cXeD/nh+gv2Rlpf9rrKz/crNz/3c4eT94uft/tDU2/bX2dr+tL3F4kJNWl0AAAAABAUGBgMDAwYAAAAAX15jfq+vsvqjpqb/mJ2f/qmyt/+vvMP+u8nT/8jT3f/R3Ob/2OTs/97l7P/N0dX+wsLE/62usP5WV1uLAAAAAAIDBAUDAwMEAAAAAEdGRkqJiYi6mZma57CztO/Q1tr20tni98PL1vettb/3maGs94uSnfeIjpL3iY2M8ZycnOmZmJfDTUtMVgAAAAACAgIDAAAAAAAAAAAEBAUBDxEQEickJCtAODtEVlFTW2RjZGljYl9yXVxadVdWVHNRUFNqR0RHXT03NkcpJyctFBUWEwgHCAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20Services.cache.evictEntries%281%29%3B%0A%20%20%20%20%20%20%20Services.cache.evictEntries%282%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%20....%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20dir.exists%28%29%20%26%26%20dir.remove%28true%29%3B%0A%20%20%20%21dir.exists%28%29%20%26%26%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20.showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%29%3B%0A%7D%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20..............%0Avar%20data%20%3D%20%7B%0A%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%7D%3B%20%20%20%0Afunction%20getSize%28size%29%20%7B%0A%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%7D%0Afunction%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%7D%0Afunction%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0Avar%20types%20%3D%20Object.keys%28data%29%3B%0Avar%20ttt%20%3D%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0Avar%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0Aself.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20self.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%22%20+%20ttt%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Большое спасибо Dumby за помощь с кнопкой.

Session Stacked Bookmarks ([nightly] 8.0)
Позволяет хранить несколько закладок в одной кнопке (с выпадающим списком). Можно одним кликом добавить текущую просматриваемую страницу как закладку вовнутрь кнопки.
Управление:
ЛКМ - открыть список сохранённых страниц.
СКМ или ЛКМ+любой модификатор - добавить текущую (просматриваемую) вкладку в список сохранённых страниц.
В списке:
ЛКМ - открыть выбранную страницу в текущей вкладке.
СКМ - открыть выбранную страницу в новой вкладке.
ПКМ - вызывает меню, через которое можно удалить выбранную страницу.

Т.к. код установки не влезает сюда в сообщение из-за лимита в 64кб на 1 сообщение, то просто публикую ссылки на кнопку и её обсуждение.
Код стабильной версии кнопки.
Код beta-версии кнопки.
Тема на этом форуме, посвящённая обсуждению этой кнопки, там же выкладываются и её обновления.

Автор: Infocatcher.

Toggle  Find ( Firefox 3.6+ )
показать-скрыть поиск по странице

Left => показать-скрыть поиск по странице.

Код кнопки и код для вкладки Код:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EToggle%20%20Find%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BgFindBar.hidden%20%3F%20gFindBar.onFindCommand%28%29%20%3A%20gFindBar.close%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();

Translate( Firefox 24 + ) от 27.02.2017.
Переводит страницы в обычном переводчике Google или с заменой текста на странице в переводчике Google в новой активной вкладке сразу справа от текущей вкладки или в текущей вкладке. Перевод с заменой текста переводит все и в том числе большие страницы и https страницы, но не умеет переводить автоматически как обычный переводчик Google.
Переводит выделенный текст или текст из буфера обмена с помощью сервиса Google Translate в новой активной вкладке сразу справа или в маленьком окошке который можно закрыть кликом на странице, выделенный текст также можно перевести двойным правым кликом на странице или из контекстного меню на странице.

Как изменить фон и размер шрифта, ширина и высоту окошка перевода?
Для изменения нужных параметров измените в вкладке инициализации этот кусок кода:

Выделить код

Код:

var background = 'none', fontSize = 'medium'; // фон и размер шрифта окошка перевода
var winWidth = 0.4, winHeight = 0.4;          // ширина и высота окошка перевода относительно размера страницы


Меню кнопки и перевод в маленьком окошке
http://i74.fastpic.ru/big/2016/0211/ef/c1fc2a8b384e860fe0f0813bf74438ef.pnghttp://s002.radikal.ru/i199/1210/4c/1996aa311981.jpghttp://s47.radikal.ru/i115/1210/6c/488ef1c14c92.jpg

ЛКМ => перевести страницу / выделенный текст.
СКМ => перевести текст, из буфера обмена.
ПКМ => Mеню кнопки с настройками,
Двойной ПКМ => Стандартное меню кнопки.

Код кнопки и инициализация:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKBMpTCYX4GMrH/9gMxn/YDQV/2cyG/9nLxr/YjMd/10xHv9cMRz/XjIa/2ExHP9gNRn/YDIV/2IwHf9ULSL/RCcU4EEoEylLKBfgcjUe/349IP98QRr/gEEd/39AKP+FUjv/h2NL/4lkUP+GYEv/hVQ+/35CJv9+Phz/gEIb/4c8H/96PCT/azgb/0koFOBpMyT/jD8i/4RFIf97RB3/hEUr/7GCdf/q29L/+e3e/97HuP/dwLD/6M2+/76VhP9+RSr/hUMg/5NAH/+NQCX/h0Ai/2Q1Iv9yOyf/lkYn/4xFJP+HSSn/m25Y//7y6v/bw7f/fkw2/3hBJv90QSX/hFI9/+nUxv+2k4H/i0kq/5VIJP+QRiL/lkYn/3Q5Kv9zQSn/mUkp/5tJKf+XSin/roJr//757f+0gG//l0oq/5NMI/+WTCH/i00u/8q0o//jx7j/mFU6/5JMJP+TTiL/l0wl/3Y/K/93Rif/oE4p/6ZNK/+jTSz/pGpS//rn2v/Np5b/kFEx/5BSK/+XTyv/nmFJ/+rTyP/lyrv/nlk+/5NRJv+WUib/l1Ik/3lFK/+BSyr/plQt/6ZULP+mUyv/nFIz/6d3Yf/hxrX/3b6n/7SUf/+7l4b/8NjL//7z6//BkoH/mlMz/55TLP+iUyv/olMp/4FJK/+FSzP/qVUz/61ZMf+sWSv/rFYs/59TM/+cWT//nmJJ/8OSgf/+8ub/+O/b/8ikkv+iVTb/qVgv/6pVMP+1WDT/qVY1/4ZMMf+MUTX/q1sx/7RZMf+2WjH/t1wv/7JbLf+oXDT/nVtD/8yajv/+8uf/ybGZ/5VYOP+zWDL/t1sx/7NYMv+5WjX/sFk2/49SM/+VVDn/s143/7hfNP+8WzX/v141/6xeMv/ZoYD/+9/I/+DBtP/Ss6P/7L+l/7l1Tf+1XjT/vlw0/7tdM/+6YC//tV42/5FYNP+cU0D/uGE9/75fNf/GZTb/wGI4/8OBYv//5tT/5byr/6RjSP+lXD//26eM//TNsf+3YkH/xGI3/8NjNf+7Yi//uGE3/5pZOv+hWEH/wGY9/8RlNP/KaDf/xWY3/9+ef///5tv/v4Vt/8NmOv+9ZUD/xI16//7o2v/FgGX/x2g5/8poNv/KaDb/xWU5/6ZYQv+mYUH/y2s7/8xwN//TbTf/0m46/+CYd///59X/vIJk/81tOv/Bbz//4a6b//7n2P/FiGL/yWw4/9FtN//KcDf/zG45/6dfQP+tZT//1W4//9pxPf/VbTz/1G5B/75wTf/31L7/z56C/8V5TP/TkGP/+NXC//XSv/+4cEr/0nA7/9VwO//Ubz7/1G88/61kP/+0bkj/4XNC/99wPv/gckL/321B/9VwR//Gf2D/6reX/+/DoP/82br//uHO//LSvv/mp33/3nhJ/9dwQv/bb0X/23BG/7RrSP+wb0r/4nhK/+V3Rf/qeEX/8HZE/+lzQf/adUf/yWg+/7lfO/+tYDz/qWFA/6xeOf/IaTn/5nND/+h1SP/pdkj/3ndN/7RtUP+NWTrg2oJX/+uGVf/ofkv/84FN/++ETv/qfk//6n5Q/+h+Uv/ngFP/5oFS/+d/UP/nfk//839O/+5+Tv/uhVj/3YFa/5JYPOCRVkEppFo64NN8UP/dgVT/3oRR/92DTP/ihVj/34FX/+ODVf/mg1T/5IRO/96ET//cglH/4YJT/+CCVv/Te1D/oVk44JBVQCkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEE%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20Translate%20%u043E%u0442%2027.02.2017.%20...............%0A%0A//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20sel%20%3F%20translateText%28sel%29%20%3A%20translatePage%28%29%3B%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%0A%20%20%20%20%20%20%20%20translateText%28gClipboard.read%28%29%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20menu.showPopup%28self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0A%0A%0Avar%20background%20%3D%20%27white%27%2C%20fontSize%20%3D%20%27medium%27%3B%20//%20%u0444%u043E%u043D%20%u0438%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043E%u043A%u043E%u0448%u043A%u0430%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%0Avar%20winWidth%20%3D%200.4%2C%20winHeight%20%3D%200.4%3B%20%20%20%20%20%20%20%20%20%20//%20%u0448%u0438%u0440%u0438%u043D%u0430%20%u0438%20%u0432%u044B%u0441%u043E%u0442%u0430%20%u043E%u043A%u043E%u0448%u043A%u0430%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%20%u043E%u0442%u043D%u043E%u0441%u0438%u0442%u0435%u043B%u044C%u043D%u043E%20%u0440%u0430%u0437%u043C%u0435%u0440%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20...............%0Avar%20array%20%3D%20%5B%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u043C%u0430%u043B%u0435%u043D%u044C%u043A%u043E%u043C%20%u043E%u043A%u043E%u0448%u043A%u0435%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textInPopup%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u0434%u0432%u043E%u0439%u043D%u044B%u043C%20%u043F%u0440%u0430%u0432%u044B%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textWithDoubleRightClick%27%20%7D%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0441%u0440%u0430%u0437%u0443%20%u0441%u043F%u0440%u0430%u0432%u0430%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.nextPage%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0438%u0437%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textFromContextMenu%27%20%7D%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.noTooltipForTranslate%27%2C%20func%3A%20%27%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Googl%u0435%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.removeGoogleTranslatorHeader%27%2C%20func%3A%20%27%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043E%u0431%u044B%u0447%u043D%u043E%u043C%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%22%2C%20radio%3A%20%27%27%2C%20value%3A%20%27google%27%20%7D%2C%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%22%2C%20radio%3A%20%27%27%2C%20value%3A%20%27googleBookmarklet%27%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0Avar%20menu%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%20%20%0Aarray.forEach%28%28m%29%3D%3E%20%7B%0A%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menu.appendChild%28%20document.createElement%28%22menuseparator%22%29%20%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20%0A%20%20%20if%20%28%20%22radio%22%20in%20m%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%22type%22%2C%20%22radio%22%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28%22Translate.pageIn%22%29%20%3D%3D%20m.value%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28%22Translate.pageIn%22%2C%20m.value%29%3B%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20if%20%28%20%22checkbox%22%20in%20m%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.value%29%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28m.value%2C%20%21cbu.getPrefs%28m.value%29%29%3B%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20if%20%28%20%22func%22%20in%20m%20%29%20mItem.addEventListener%28%22command%22%2C%20%28%29%3D%3E%20toggleGoogleTranslatorStyle%28%29%29%3B%0A%20%20%20%20%20%20%20%0A%20%20%20menu.appendChild%28mItem%29%3B%0A%7D%29%3B%0Amenu.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20...............%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20gBrowser.contentDocument.defaultView.getSelection%28%29%3B%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Googl%u0435%20%u0438%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%20...............%0Afunction%20toggleGoogleTranslatorStyle%28arg%29%20%7B%0A%20%20%20var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20try%20%7B%20sss.unregisterSheet%28%20self.uri%2C%200%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.removeGoogleTranslatorHeader%22%29%20%29%20%7B%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%0A%20%20%20%20%20%20%20%20var%20removeHeader%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.google.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23gb%2C%20%23gt-bbar%2C%20%23gt-c%3Anot%28%5Bclass%3D%22g-section%22%5D%29%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23contentframe%20%7B%20top%3A%200%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%27%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.noTooltipForTranslate%22%29%20%29%20%7B%20%20//%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%0A%20%20%20%20%20%20%20%20var%20noPopup%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20/*Microsoft*/%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20DIV%5Btranslate%3D%22no%22%5D%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20*%5Blang%3D%22ru%22%5D%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20black%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20transparent%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20/*Google*/%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.google.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.jfk-tooltip%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20regexp%28%22%5Ehttps%3F%3A//translate%5C.google%5C..*%22%29%20%7B/**/%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.googleusercontent.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20span%5Bonmouseout%5D%5Bonmouseover%5D%5Bstyle%5D%20%7B%20background-color%3A%20transparent%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.gmnoprint%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20.goog-text-highlight%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20transparent%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20border%3A%20none%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%20none%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20.goog-tooltip.skiptranslate%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%0A%20%20%20self.css%20%3D%20removeHeader%20+%20noPopup%3B%0A%0A%20%20%20if%20%28%20%21%21self.css%20%29%20%7B%0A%20%20%20%20%20%20%20%20self.uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28self.css%29%29%3B%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28self.uri%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20arg%20%26%26%20addDestructor%28%28%29%3D%3E%20sss.unregisterSheet%28self.uri%2C%200%29%20%29%3B%20%20%0A%7D%3B%0AtoggleGoogleTranslatorStyle%28true%29%3B%20%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20...............%20%20%20%0Afunction%20translatePage%28%29%20%7B%0A%20%20%20var%20translator%20%3D%20cbu.getPrefs%28%22Translate.pageIn%22%29%3B%0A%20%20%20%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043E%u0431%u044B%u0447%u043D%u043E%u043C%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%0A%20%20%20if%20%28%20translator%20%3D%3D%20%22google%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%20content.location%20+%20%22%26hl%3Dru%26ie%3DUTF-8%26sl%3Dauto%26tl%3Dru%22%3B%0A%20%20%20%20%20%20%20%20cbu.getPrefs%28%22Translate.nextPage%22%29%0A%20%20%20%20%20%20%20%20%3F%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%2C%20gBrowser.mCurrentTab._tPos%20+%201%29%0A%20%20%20%20%20%20%20%20%3A%20loadURI%28url%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Microsoft%20%u0438%u043B%u0438%20Google%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.nextPage%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20gBrowser.getBrowserForTab%28gBrowser.selectedTab%20%3D%20gBrowser.duplicateTab%28gBrowser.mCurrentTab%29%29%0A%20%20%20%20%20%20%20%20%20%20%20.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28e.type%2C%20c%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20runBukmarklet%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20else%20runBukmarklet%28%29%3B%0A%20%20%20%0A%20%20%20//%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0431%u0443%u043A%u043C%u0430%u0440%u043A%u043B%u0435%u0442%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%0A%20%20%20function%20runBukmarklet%28%29%20%7B%0A%20%20%20%20%20%20cbu.setPrefs%28%22security.mixed_content.block_active_content%22%2C%20false%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20content.document.location%20%3D%20%22javascript%3A%7Bvar%20d%3Ddocument%3B%20var%20b%3Dd.body%3B%20var%20o%3Dd.createElement%28%27script%27%29%3Bo.setAttribute%28%27src%27%2C%27http%3A//translate.google.com/translate_a/element.js%3Fcb%3DgoogleTranslateElementInit%26hl%3Dru%27%29%3Bo.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bb.appendChild%28o%29%3B%20var%20v%3Db.insertBefore%28d.createElement%28%27div%27%29%2Cb.firstChild%29%3Bv.id%3D%27google_translate_element%27%3Bv.style.display%3D%27none%27%3B%20var%20p%3Dd.createElement%28%27scri%27+%27pt%27%29%3Bp.text%3D%27function%2520googleTranslateElementInit%28%29%7Bvar%2520tElem%2520%3D%2520new%2520google.translate.TranslateElement%28%7BpageLanguage%3A%2522%2522%7D%2C%2522google_translate_element%2522%29%3BsetTimeout%28function%28%29%2520%7B%2520tElem.showBanner%28true%29%3B%2520%7D%2C100%29%3B%7D%27%3Bp.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bb.appendChild%28p%29%3B%7Dvoid%25200%22%3B%0A%20%20%20%7D%20%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0441%u043B%u0435%u0434%u0438%u0442%20%u0437%u0430%20%u0434%u0432%u043E%u0439%u043D%u044B%u043C%20%u043F%u0440%u0430%u0432%u044B%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u0442%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20...............%0AaddEventListener%28%22dblclick%22%2C%20e%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%26%26%20cbu.getPrefs%28%22Translate.textWithDoubleRightClick%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%3B%0A%0A%20%20%20%20%20%20%20%20translateText%28getSelect%28%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0438%u0437%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%20...............%20%20%20%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0Avar%20mItem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20contextMenu.children%5B1%5D%29%3B%0AmItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%22%29%3B%0AmItem.onclick%20%3D%28%29%3D%3E%20translateText%28getSelect%28%29%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20%7B%0A%20%20%20mItem.hidden%20%3D%20%21cbu.getPrefs%28%22Translate.textFromContextMenu%22%29%20%7C%7C%20%21gContextMenu.isTextSelected%3B%20%0A%7D%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20mItem.remove%28%29%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20Google%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0441%u0440%u0430%u0437%u0443%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0438%u043B%u0438%20%u0432%20%u043C%u0430%u043B%u0435%u043D%u044C%u043A%u043E%u043C%20%u043E%u043A%u043E%u0448%u043A%u0435%20...............%0Afunction%20translateText%28text%2C%20clipboard%29%20%7B%0A%20%20%20if%20%28%20text%20%3D%3D%20false%20%29%20return%3B%0A%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%20Google%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20%u0442%u0435%u043A%u0441%u0442%u0430%0A%20%20%20if%20%28%20%21cbu.getPrefs%28%22Translate.textInPopup%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate_t%3Fhl%3Dru%23auto%7Cru%7C%22%20+%20text%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%2C%20gBrowser.mCurrentTab._tPos%20+%201%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20var%20beg%20%3D%20%22http%3A//translate.google.com/translate_t%3Fprev%3Dhp%26hl%3Dru%26js%3Dy%26text%3D%22%3B%0A%20%20%20var%20end%20%3D%20%22%26file%3D%26sl%3Dauto%26tl%3Dru%26history_state0%3D%23%22%3B%0A%20%20%20var%20url%20%3D%20beg%20+%20text%20+%20end%3B%0A%20%20%20%20%0A%20%20%20var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20req.open%28%22GET%22%2C%20url%2C%20true%29%3B%0A%20%20%20%0A%20%20%20req.onload%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20var%20res%20%3D%20req.responseText%3B%0A%20%20%20%20%20%20%20var%20suHTML%20%3D%20Cc%5B%22@mozilla.org/feed-unescapehtml%3B1%22%5D.getService%28Ci.nsIScriptableUnescapeHTML%29%3B%0A%20%20%20%20%20%20%20var%20doc%20%3D%20document.implementation.createHTMLDocument%28%22%22%29%3B%0A%20%20%20%20%20%20%20doc.body.appendChild%28suHTML.parseFragment%28res%2C%20false%2C%20null%2C%20doc.body%29%29%3B%0A%0A%20%20%20%20%20%20%20var%20ruHTML%20%3D%20doc.getElementById%28%22result_box%22%29.innerHTML%3B%0A%20%20%20%20%20%20%20var%20dataURL%20%3D%20%27data%3Atext/html%3Bcharset%3Dutf-8%2C%20%3Chtml%20contenteditable/%3E%3Ctitle%3ETranslate%3C/title%3E%27%0A%20%20%20%20%20%20%20dataURL%20+%3D%20%27%3Cstyle%3Ebody%20%7B%20background-color%3A%20%27+%20background%20+%27%3B%20font-size%3A%20%27+%20fontSize%20+%27%20%7D%3C/style%3E%27%3B%0A%20%20%20%20%20%20%20dataURL%20+%3D%20ruHTML%20+%20%27%3C/body%3E%3C/html%3E%27%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20var%20width%20%3D%20%280%29%20%7C%7C%20winWidth%20*%20gBrowser.boxObject.width%3B%20%0A%20%20%20%20%20%20%20var%20height%20%3D%20%280%29%20%7C%7C%20winHeight%20*%20gBrowser.boxObject.height%3B%0A%0A%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043A%u043E%u043E%u0440%u0434%u0438%u043D%u0430%u0442%u044B%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%u043B%u0438%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%0A%20%20%20%20%20%20%20if%20%28%20clipboard%20%26%26%20cbu.getPrefs%28%22Translate.textInPopup%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20bcr%20%3D%20self.getBoundingClientRect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posX%20%3D%20bcr.left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posY%20%3D%20bcr.bottom%20+%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20bcr%20%3D%20gBrowser.contentDocument.defaultView.getSelection%28%29.getRangeAt%280%29.getBoundingClientRect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posX%20%3D%20window.content.mozInnerScreenX%20+%20bcr.left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posY%20%3D%20window.content.mozInnerScreenY%20+%20bcr.bottom%20+%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20var%20deltaX%20%3D%20posX%20+%20width%20-%20%28fullScreen%20%3F%20screen.width%20%3A%20screen.availWidth%29%3B%0A%20%20%20%20%20%20%20if%20%28deltaX%20%3E%200%29%20posX%20-%3D%20deltaX%3B%0A%20%20%20%20%20%20%20var%20deltaY%20%3D%20posY%20+%20height%20-%20%28fullScreen%20%3F%20screen.height%20%3A%20screen.availHeight%29%3B%0A%20%20%20%20%20%20%20if%20%28deltaY%20%3E%200%29%20posY%20-%3D%20deltaY%3B%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20var%20win%20%3D%20window.openDialog%28dataURL%2C%20%22%22%2C%20%22outerWidth%3D%22+width+%22%2C%20outerHeight%3D%22+height+%22%2C%20screenX%3D%22+posX+%22%2C%20screenY%3D%22+posY+%22%2C%20status%3Dno%2C%20scrollbars%3Dyes%2C%20resizable%3Dyes%22%29%3B%0A%20%20%20%20%20%20%20win.focus%28%29%3B%0A%0A%20%20%20%20%20%20%20//%20%u0437%u0430%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u043E%u043A%u043E%u0448%u043A%u043E%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20gBrowser.addEventListener%28%22click%22%2C%20function%20c%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%22click%22%2C%20c%29%3B%0A%20%20%20%20%20%20%20%20%20%20win%20%26%26%20win.close%28%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%7D%3B%0A%20%20%20req.channel.loadFlags%20%7C%3D%20req.channel.LOAD_FROM_CACHE%3B%0A%20%20%20req.send%28null%29%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.tooltipText%20%3D%20%22Translate%20%5Cn%u041B%3A%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%5Cn%u0421%3A%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%5Cn%u041F%3A%20%u041C%u0435%u043D%u044E%20%5Cn%u0414%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Translate от 27.02.2017. ...............

// Настройка функций кликов мыши для кнопки ...............
this.onclick =e=> {
   if ( e.button == 0 ) {         
        var sel = getSelect();
        sel ? translateText(sel) : translatePage();    
        }
                    
   if ( e.button == 1 )
        translateText(gClipboard.read(), true);
          
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft");
        } 
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


var background = 'white', fontSize = 'medium'; // фон и размер шрифта окошка перевода
var winWidth = 0.4, winHeight = 0.4;          // ширина и высота окошка перевода относительно размера страницы


// Создать меню ...............
var array = [    
    { label: "Перевод текста в маленьком окошке", checkbox: '', value: 'Translate.textInPopup' },
    { label: "Перевод текста в двойным правым кликом", checkbox: '', value: 'Translate.textWithDoubleRightClick' },              
    { label: "Перевод страницы в новой вкладке сразу справа", checkbox: '', value: 'Translate.nextPage' },
    { label: "Перевод выделенного текста из контекстного меню", checkbox: '', value: 'Translate.textFromContextMenu' },              
    { separator: ''},
    { label: "Удалять подсказки в переводчиках", checkbox: '', value: 'Translate.noTooltipForTranslate', func: '' },
    { label: "Удалять панель управления в переводчике Googlе", checkbox: '', value: 'Translate.removeGoogleTranslatorHeader', func: '' },
    { separator: ''},
    { label: "Перевод страницы в обычном переводчике Google", radio: '', value: 'google' },    
    { label: "Перевод страницы с заменой текста в переводчике Google", radio: '', value: 'googleBookmarklet' }
            ];
var menu = self.appendChild( document.createElement("menupopup") );  
array.forEach((m)=> {
   if ( "separator" in m ) { menu.appendChild( document.createElement("menuseparator") ); return };
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m.label);
   
   if ( "radio" in m ) { 
        mItem.setAttribute("type", "radio");
        mItem.setAttribute('checked', cbu.getPrefs("Translate.pageIn") == m.value );
        mItem.onclick =()=> cbu.setPrefs("Translate.pageIn", m.value);  
        }  
   if ( "checkbox" in m ) {          
        mItem.setAttribute('type', 'checkbox');
        mItem.setAttribute('checked', cbu.getPrefs(m.value) );
        mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
        }
   if ( "func" in m ) mItem.addEventListener("command", ()=> toggleGoogleTranslatorStyle());
       
   menu.appendChild(mItem);
});
menu.setAttribute("onclick", "event.stopPropagation()");


// Получить выделенный текст из страницы или false ...............
function getSelect() {
   var sel = gBrowser.contentDocument.defaultView.getSelection();
   return (sel == '') ? false : sel.toString();
};


// Удалить панель управления в переводчике Googlе и подсказки в переводчиках ...............
function toggleGoogleTranslatorStyle(arg) {
   var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   try { sss.unregisterSheet( self.uri, 0) } catch(e) {};
   
   if ( cbu.getPrefs("Translate.removeGoogleTranslatorHeader") ) {  // панель управления
        var removeHeader = '\
            @-moz-document domain("translate.google.com") {\
               #gb, #gt-bbar, #gt-c:not([class="g-section"]) { display: none !important; }\
               #contentframe { top: 0 !important; }\
            }';           
        }
   
   if ( cbu.getPrefs("Translate.noTooltipForTranslate") ) {  // подсказки в переводчиках
        var noPopup = '\
            /*Microsoft*/\
            DIV[translate="no"] { display: none !important; }\
            *[lang="ru"] {\
            color: black !important;\
            background-color: transparent !important;\
            }\
            /*Google*/\
            @-moz-document domain("translate.google.com") {\
               .jfk-tooltip { display: none !important; }\
            }\
            @-moz-document regexp("^https?://translate\.google\..*") {/**/}\
            @-moz-document domain("translate.googleusercontent.com") {\
              span[onmouseout][onmouseover][style] { background-color: transparent !important; }\
              .gmnoprint { display: none !important; }\
            }\
            .goog-text-highlight {\
            background-color: transparent !important;\
            border: none !important;\
            box-shadow: none !important;\
            }\
            .goog-tooltip.skiptranslate { display: none !important; }\
            ';
        }   
   self.css = removeHeader + noPopup;

   if ( !!self.css ) {
        self.uri = makeURI("data:text/css," + encodeURIComponent(self.css));
        sss.loadAndRegisterSheet(self.uri, 0);
        }
        
   arg && addDestructor(()=> sss.unregisterSheet(self.uri, 0) );  
};
toggleGoogleTranslatorStyle(true); 


// Перевод страницы ...............   
function translatePage() {
   var translator = cbu.getPrefs("Translate.pageIn");
   
   // перевод страницы в обычном переводчике Google в новой активной вкладке или текущей вкладке
   if ( translator == "google" ) {
        var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
        cbu.getPrefs("Translate.nextPage")
        ? gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), gBrowser.mCurrentTab._tPos + 1)
        : loadURI(url);
        return;
        } 

   // перевод страницы с заменой текста на странице в переводчике Microsoft или Google 
   if ( cbu.getPrefs("Translate.nextPage") ) {
        gBrowser.getBrowserForTab(gBrowser.selectedTab = gBrowser.duplicateTab(gBrowser.mCurrentTab))
           .addEventListener("pageshow", function c(e) {
               this.removeEventListener(e.type, c);
               runBukmarklet();
           });              
        }    
   else runBukmarklet();
   
   // запустить букмарклет для перевода
   function runBukmarklet() {
      cbu.setPrefs("security.mixed_content.block_active_content", false);
      
      content.document.location = "javascript:{var d=document; var b=d.body; var o=d.createElement('script');o.setAttribute('src','http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit&hl=ru');o.setAttribute('type','text/javascript');b.appendChild(o); var v=b.insertBefore(d.createElement('div'),b.firstChild);v.id='google_translate_element';v.style.display='none'; var p=d.createElement('scri'+'pt');p.text='function%20googleTranslateElementInit(){var%20tElem%20=%20new%20google.translate.TranslateElement({pageLanguage:%22%22},%22google_translate_element%22);setTimeout(function()%20{%20tElem.showBanner(true);%20},100);}';p.setAttribute('type','text/javascript');b.appendChild(p);}void%200";
   } 
};


// Обработчик следит за двойным правым кликом мыши на странице и запускает перевод выделенного текста ...............
addEventListener("dblclick", e=> {
   if ( e.button && cbu.getPrefs("Translate.textWithDoubleRightClick") ) {
        e.preventDefault();
        document.getElementById("contentAreaContextMenu").hidePopup();

        translateText(getSelect());
        }
}, false, gBrowser);


// Перевод выделенного текста из контекстного меню ...............   
var contextMenu = document.getElementById("contentAreaContextMenu");
var mItem = contextMenu.insertBefore(document.createElement("menuitem"), contextMenu.children[1]);
mItem.setAttribute("label", "Перевод выделенного текста");
mItem.onclick =()=> translateText(getSelect());
addEventListener("popupshowing", ()=> {
   mItem.hidden = !cbu.getPrefs("Translate.textFromContextMenu") || !gContextMenu.isTextSelected; 
}, false, contextMenu);
addDestructor(()=> mItem.remove());


// Перевести текст в Google переводчике в новой вкладке сразу справа или в маленьком окошке ...............
function translateText(text, clipboard) {
   if ( text == false ) return;

   // перевод в Google переводчике текста
   if ( !cbu.getPrefs("Translate.textInPopup") ) {
        var url = "http://translate.google.com/translate_t?hl=ru#auto|ru|" + text;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), gBrowser.mCurrentTab._tPos + 1);
        return;
        };

   var beg = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
   var end = "&file=&sl=auto&tl=ru&history_state0=#";
   var url = beg + text + end;
    
   var req = new XMLHttpRequest();
   req.open("GET", url, true);
   
   req.onload =()=> {
       var res = req.responseText;
       var suHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML);
       var doc = document.implementation.createHTMLDocument("");
       doc.body.appendChild(suHTML.parseFragment(res, false, null, doc.body));

       var ruHTML = doc.getElementById("result_box").innerHTML;
       var dataURL = 'data:text/html;charset=utf-8, <html contenteditable/><title>Translate</title>'
       dataURL += '<style>body { background-color: '+ background +'; font-size: '+ fontSize +' }</style>';
       dataURL += ruHTML + '</body></html>';
       
       var width = (0) || winWidth * gBrowser.boxObject.width; 
       var height = (0) || winHeight * gBrowser.boxObject.height;

       // получить координаты кнопки или выделенного текста
       if ( clipboard && cbu.getPrefs("Translate.textInPopup") ) {
            var bcr = self.getBoundingClientRect();
            var posX = bcr.left;
            var posY = bcr.bottom + 5;
            }
       else
            {
            var bcr = gBrowser.contentDocument.defaultView.getSelection().getRangeAt(0).getBoundingClientRect();
            var posX = window.content.mozInnerScreenX + bcr.left;
            var posY = window.content.mozInnerScreenY + bcr.bottom + 5;
            }
       
       var deltaX = posX + width - (fullScreen ? screen.width : screen.availWidth);
       if (deltaX > 0) posX -= deltaX;
       var deltaY = posY + height - (fullScreen ? screen.height : screen.availHeight);
       if (deltaY > 0) posY -= deltaY;     

       var win = window.openDialog(dataURL, "", "outerWidth="+width+", outerHeight="+height+", screenX="+posX+", screenY="+posY+", status=no, scrollbars=yes, resizable=yes");
       win.focus();

       // закрывать окошко перевода кликом на странице                 
       gBrowser.addEventListener("click", function c() {
          this.removeEventListener("click", c);
          win && win.close();                                    
       });
   };
   req.channel.loadFlags |= req.channel.LOAD_FROM_CACHE;
   req.send(null)
};


// Подсказка у кнопки ...............
this.tooltipText = "Translate \nЛ: Перевести страницу / выделенный текст \nС: Перевести текст из буфера обмена \nП: Меню \nДП: CB меню";


За код который переводит текст в маленьком окошке спасибо okkamas_knife и Dumby
За код который удаляет панель управления(заголовок) в переводчике Googlе спасибо Kamui

Greasemonkey menu(Firefox 3.6 - 4.0+)
Имитирует старое меню greasemonkey с перехватом правой кнопки мыши.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGreasemonkey%20menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20code*/%0A%0Athis.pref%3D%27greasemonkey.enabled%27%3B%0A%0Athis.onImage%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII%3D%27%3B%0Athis.offImage%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyBJREFUOMt1k8trK3Ucxc/3N888+kgmjGlu4yQqrZRW+qKlWdi0gtR4K8WFG8E/QhcKuvXfEBQUQdxpFw0S6I1Q+liUUtKmkNY0kuaGaDppemcmM7+fi8uFq9Sz/MDhnMU5Eh5QoVCgyclJqVqtipf5xsaGlk6n9aurq8ELJj9gZtvb2xxAAABbW1uvBEGQcRxnxnXdVznnPwA4W1tbY6VSiRP+R5ubm0tElB8MBu+5rrvg+/4QEf2kqupnANrFYtF5sMHKyoqpadqnrut+AmDs/v4erutCURRompYMguAjIcSPAP7M5/PsXw2mpqaMdDr9jWEYH3DOcXNzg8FggGQyiUgkglarhX6//1W5XP76hYcAIJfLFYQQH2qa9vrs7Gx+eXkZjDFeLpeZ53lYXV0VmqbRwcEBDg8Pf7Vtu8kYe7K3t/edDCA+Njb2eTQafdt1XczPzyObzXIhBCsUCsL3fSQSCSIiwTmnRqPxfiqVgud5y0dHR78xACOqqlqhUAiRSESYpimazSYrFovCcRzyfZ9KpZJotVpkmqaIxWJC13UoivJoeHg4IQPodzqdRqfTsTKZDI2MjIiTkxPs7u7S7e0tOOc4Pj6GqqpYX1+HpmlUrVbBOe/JstxjAJ42Go1f7u7uYFkWQqEQ6bouHMcR4+PjMAxDBEEAwzBARJROpxEEAer1+s+tVqsuAUC73f5raWmpkMvlYuFwGOFwmKLRKCUSCcTjcUqlUshms8QYg6IouL6+vi2Xy19yzusyACiK4jHGBpxzVCoVnJ2dCUVR6OLiArIsAwDt7OyIiYkJMk0TROREIpFn3W4XEgBkMhkEQfCOJElv6LqOoaEhmp6ehmVZMAwD8XgcsiyT53moVqs4PT097ff739q2bUszMzN0fn7+TFXVP3q93qoQImZZFkZHR0H0fGeMMUiShEqlgv39/b/b7fYXl5eXewAgq6oKAKjVak88z3vc6/U+rtVq70ajUUtV1ZgkSeT7/lPbtpudTme/2+1+X6vVfgeAhYWF5wmLi4v/PVUSwGsA3mSMzWma9haARy9/Z25ujgDgH7jkWH58xN7+AAAAAElFTkSuQmCC%27%3B%0A%0Athis.PS%3DComponents.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%20%26%26%20%21event.ctrlKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%20%0Athis.setAttribute%28%22onclick%22%2C%22if%28event.button%3D%3D0%29%7Bthis.toggleStatus%28%29%3B%7D%20else%20if%28event.button%3D%3D1%29%20%7BGM_OpenScriptsMgr%28%29%3B%7D%20else%20if%28event.button%3D%3D2%29%7Bif%28%21this.lastChild%29%7Bvar%20gm_menu%3Ddocument.getElementById%28%27gm_general_menu%27%29.getElementsByTagName%28%27menupopup%27%29%5B0%5D.cloneNode%28true%29%3Bthis.appendChild%28gm_menu%29%3B%7D%20var%20popup%3Ddocument.getBoxObjectFor%28this%29%3Bthis.lastChild.showPopup%28this%2C-1%2C-1%2C%27popup%27%2C%27bottomleft%27%2C%27topleft%27%29%3B%7D%22%29%3B%0A%0Athis.setStatus%3Dfunction%28%29%20%7B%0A%20var%20status%20%3D%20this.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28status%3D%3Dtrue%29%20%7B%0A%20%20this.image%3Dthis.onImage%3B%0A%20%20this.tooltipText%3D%22Greasemonkey%20enabled%22%0A%20%7D%20else%20%7B%0A%20%20this.image%3Dthis.offImage%3B%0A%20%20this.tooltipText%3D%22Greasemonkey%20disabled%22%0A%20%7D%0A%7D%0A%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setStatus.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setStatus%28%29%3B%0A%0Athis.toggleStatus%3Dfunction%28%29%20%7B%0A%20switch%28this.PS.getBoolPref%28this.pref%29%29%20%7B%0A%20%20case%20true%3A%20this.PS.setBoolPref%28this.pref%2Cfalse%29%3B%20break%3B%0A%20%20case%20false%3A%20this.PS.setBoolPref%28this.pref%2Ctrue%29%3B%20break%3B%0A%20%7D%0A%7D%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

/*Initialization code*/

this.pref='greasemonkey.enabled';

this.onImage='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII=';
this.offImage='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyBJREFUOMt1k8trK3Ucxc/3N888+kgmjGlu4yQqrZRW+qKlWdi0gtR4K8WFG8E/QhcKuvXfEBQUQdxpFw0S6I1Q+liUUtKmkNY0kuaGaDppemcmM7+fi8uFq9Sz/MDhnMU5Eh5QoVCgyclJqVqtipf5xsaGlk6n9aurq8ELJj9gZtvb2xxAAABbW1uvBEGQcRxnxnXdVznnPwA4W1tbY6VSiRP+R5ubm0tElB8MBu+5rrvg+/4QEf2kqupnANrFYtF5sMHKyoqpadqnrut+AmDs/v4erutCURRompYMguAjIcSPAP7M5/PsXw2mpqaMdDr9jWEYH3DOcXNzg8FggGQyiUgkglarhX6//1W5XP76hYcAIJfLFYQQH2qa9vrs7Gx+eXkZjDFeLpeZ53lYXV0VmqbRwcEBDg8Pf7Vtu8kYe7K3t/edDCA+Njb2eTQafdt1XczPzyObzXIhBCsUCsL3fSQSCSIiwTmnRqPxfiqVgud5y0dHR78xACOqqlqhUAiRSESYpimazSYrFovCcRzyfZ9KpZJotVpkmqaIxWJC13UoivJoeHg4IQPodzqdRqfTsTKZDI2MjIiTkxPs7u7S7e0tOOc4Pj6GqqpYX1+HpmlUrVbBOe/JstxjAJ42Go1f7u7uYFkWQqEQ6bouHMcR4+PjMAxDBEEAwzBARJROpxEEAer1+s+tVqsuAUC73f5raWmpkMvlYuFwGOFwmKLRKCUSCcTjcUqlUshms8QYg6IouL6+vi2Xy19yzusyACiK4jHGBpxzVCoVnJ2dCUVR6OLiArIsAwDt7OyIiYkJMk0TROREIpFn3W4XEgBkMhkEQfCOJElv6LqOoaEhmp6ehmVZMAwD8XgcsiyT53moVqs4PT097ff739q2bUszMzN0fn7+TFXVP3q93qoQImZZFkZHR0H0fGeMMUiShEqlgv39/b/b7fYXl5eXewAgq6oKAKjVak88z3vc6/U+rtVq70ajUUtV1ZgkSeT7/lPbtpudTme/2+1+X6vVfgeAhYWF5wmLi4v/PVUSwGsA3mSMzWma9haARy9/Z25ujgDgH7jkWH58xN7+AAAAAElFTkSuQmCC';

this.PS=Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);

this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.shiftKey && !event.altKey && !event.metaKey && !event.ctrlKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};
 
this.setAttribute("onclick","if(event.button==0){this.toggleStatus();} else if(event.button==1) {GM_OpenScriptsMgr();} else if(event.button==2){if(!this.lastChild){var gm_menu=document.getElementById('gm_general_menu').getElementsByTagName('menupopup')[0].cloneNode(true);this.appendChild(gm_menu);} var popup=document.getBoxObjectFor(this);this.lastChild.showPopup(this,-1,-1,'popup','bottomleft','topleft');}");

this.setStatus=function() {
 var status = this.PS.getBoolPref(this.pref);
 if (status==true) {
  this.image=this.onImage;
  this.tooltipText="Greasemonkey enabled"
 } else {
  this.image=this.offImage;
  this.tooltipText="Greasemonkey disabled"
 }
}

this.ob={};
this.ob.observe=this.setStatus.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setStatus();

this.toggleStatus=function() {
 switch(this.PS.getBoolPref(this.pref)) {
  case true: this.PS.setBoolPref(this.pref,false); break;
  case false: this.PS.setBoolPref(this.pref,true); break;
 }
}

Extension List ( Firefox 24+ )
показывает и даёт возможность легко скопировать список установленных расширений, тем, плагинов, языков, словарей, GreaseMonkey скриптов и Stylish стилей и список установленных Custom Buttons кнопок.

Скриншот:
http://i78.fastpic.ru/big/2016/0825/55/ea51a756160b8f9c4de91987ebd7d955.png

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0421%u043F%u0438%u0441%u043E%u043A%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0439%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAFHUlEQVQ4jX2UW4id1RmGv2+t9e9/H/5/9mF2Zh8m455tdMjJatpqQERIUUOhiNAWCqa1hwsvWoQ24E17a5EqlOKF0BPeKBLBeKC9EqoSo8SW0kQbO8l2MpnzzD7O/s9rre/rRWpvCn0v3xeemwdeZGYAACAitGAREQEBJQA4DGyZmRAAAYARUTIgIrBmZssAfGthECBBCgmK4Rbw3PVz/Nu//w7afot917uj5tfONivNOgqKjckkANpYJ972cOvTaTx9IaJsm4idct6z42xMD7Tux5/c/VNWDIzMzNcG19oXb3xwe7PctErKZiGXKxxbPP61Tmu+YoWmIErE8tr1zZXNleuZMXdFWTIHTMtVb0bvBLtYQMV8D4ESICCjTHh577tnTj3+y/lyMwqSMARJKQIKrQ2nlBIyiGZ1zinP+A/VCrUnr6+t3NwZbHyr6lVyIMRJP++/BwD/UgyMQkgGgb3ljavnx4PtP6UmXWw25n88W6nO9OOxidNIEhEbZQ+AMPXQjrla9haU035eOuJQvlroZgDnLNEPFQGRQARme3l5ezlwZg/9JdLx0r4Ov7HkLM1O06kN4khIRLRoWesMhmbErnRz+aL7QMZJSQFIS9wmAKkkSLRkQYJ6ZLHVebpUql5M9s1MYKLDe9MROw6gI5VFQhxMxnoUDuhgrV0Kg3R7befq8wfK9Tu04Hs7VfO2AExvSQGGUEdlRFxwCu63C9YT0XTAqU54rtpQVlqMwhSjvSRIEp1EWVqaBNNJp3jojSQJbvR2e/5X/ROhEsgKAYGIoB8OKaI4TWwYFQp5dax+xCMgDLIADGeY6BQ8zy0WSgckSgBEIU+0v+L9bfvSsUgnX56Y6ccM8JkCAJYo4WjtyJUtu/r7Gvofrk5WDu7a3afm6gfae8FQR8lUMTJq1+Q0aSVJgSpx69L44jNxIep0l1p3JkSvamueVADAQgpoePU1dzd/Yc6ZO78S9w5f3fnsjHRkO8oimkQBCYnCkIE0TYUQDETkfbK7e7rsF52y64lROF4iJkcxMFoiuNy/fN+F/rtPLZv6Y4N4WJKJ0w3XY1Ayh56tkACEUTDOwnRC7pwqsZFbJysnnttI1hfWR4OTj971ndfyKv8fKUww3B82huPhcSenjloBQoECmADXZ+sO5QzHUYr9yShjxjQZ61IRCqNnHn729U8GVzbeufnebT84/r0tiZIUAAAAg4yVbiStrBU2NCBjvlksgCUIaJ8NWcgg5bwvC3lRl9YA6Iicf6xf8Zb3lr/0ea938tX8KxeOnD7+qUJAECh5sdb5Z2e789KsqLyzPl5fGAXDn9VmK/OTZGoSnSACoBXWMVo7OZEDxqz9q/effS7FpBvE0e1uzz33CzI/UghIQgjoNrq9zt7im91K589Bsn/4wxuXzuSLx+YRmUbTkYMohMopynRqI4gVIJQmZnLa90qyXWxg2a12GFgqZhaWCS5d++upt6689XS1MtPTWepU65Wjqzurg/1w/NGs39hBZt7a2Wy5RfeeQinfTgKz3vU7P18bbNy9NRh+/f4HHzzvKidTjMzAjPt24o/0cF4aOOgoZVylnNXNjVHXv+21P37zD+eZCJ54+fuP3QzWO9JR7UKuOP7Noy9eWJusvvLR6se/PnvqbF+hw/jFY+9F/cow7tdzIscMTJYtGDLOjDMzbvmtPgPD5nSzHuiwIlGyQqUXygtbjnRSwwYU3vL7X+D/yxevjoD/0yMwEgAKEAQA8G+QDuH4X0FBaQAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3Etry%20%7B%20Cu.import%28%22resource%3A//custombuttons-modules/addons4.js%22%2C%20%7B%7D%29%3B%20%7D%20catch%28ex%29%20%7B%7D%0A%0Afunction%20gatherInfo%28type%29%20%7B%0A%0A%09var%20tmp%20%3D%20%5B%5D%2C%20map%20%3D%20%7B%7D%2C%20sort%20%3D%20%5B%5D%3B%0A%09items.forEach%28function%28item%29%20%7B%0A%09%09if%20%28item.type%20%21%3D%20type%29%20return%3B%0A%0A%09%09var%20name%20%3D%20item.name%20%3F%20item.name.toUpperCase%28%29%20%3A%20%22UNNAMED%22%3B%0A%09%09name%20+%3D%20item.id%0A%0A%09%09tmp.push%28name%29%3B%0A%09%09map%5Bname%5D%20%3D%20item%3B%0A%09%7D%29%3B%0A%09tmp.sort%28%29%3B%0A%09tmp.forEach%28function%28name%29%20%7B%20sort.push%28map%5Bname%5D%29%20%7D%29%3B%0A%09%0A%09var%20list%20%3D%20%22%22%2C%20enabled%20%3D%200%2C%20disabled%20%3D%200%3B%0A%09sort.forEach%28function%28item%29%20%7B%0A%09%0A%09%09list%20+%3D%20%28item.name%20%7C%7C%20%22unnamed%22%29%20+%20%22%20%22%20+%20%28item.version%20%7C%7C%20%22%22%29%3B%0A%0A%09%09if%20%28item.type%20%21%3D%20%22custombuttons%22%20%26amp%3B%26amp%3B%20%28item.userDisabled%20%7C%7C%20item.appDisabled%29%29%20%7B%0A%09%09%09list%20+%3D%20%22%20%5B%20%u0432%u044B%u043A%u043B%u044E%u0447%u0435%u043D%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%7D%0A%0A%09%09else%20if%20%28item.type%20%3D%3D%20%22custombuttons%22%29%20%7B%0A%0A%09%09%09var%20str%20%3D%20item.id%3B%0A%09%09%09var%20id%20%3D%20str.substring%28str.lastIndexOf%28%22custombuttons-button%22%29%2C%20str.length%29%3B%0A%09%09%09var%20button%20%3D%20document.getElementById%28id%29%3B%0A%0A%09%09%09if%20%28%21button%29%20%7B%0A%09%09%09%09list%20+%3D%20%22%20%5B%20%u041D%u0415%20%u0412%u042B%u0422%u0410%u0429%u0415%u041D%u0410%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%09%7D%0A%09%09%09if%20%28button.hasAttribute%28%22initializeerror%22%29%29%20%7B%0A%09%09%09%09list%20+%3D%20%22%20%5B%20%u041E%u0428%u0418%u0411%u041A%u0410%20%u0418%u041D%u0418%u0426%u0418%u0410%u041B%u0418%u0417%u0410%u0426%u0418%u0418%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09enabled++%3B%20list%20+%3D%20%22%5Cn%22%3B%0A%09%7D%29%3B%0A%09return%20%5Benabled%20+%20disabled%2C%20enabled%2C%20disabled%2C%20list%5D%3B%0A%7D%0Avar%20items%20%3D%20%5B%5D%3B%0Afunction%20extensionsCallback%28extensions%29%20%7B%0A%09var%20list%20%3D%20%22%22%3B%0A%09items%20%3D%20extensions%3B%0A%20%20%20%20%0A%09var%20info%20%3D%20Cc%5B%22@mozilla.org/xre/app-info%3B1%22%5D.getService%28Ci.nsIXULAppInfo%29%3B%0A%20%20%20%20%0A%09list%20+%3D%20info.vendor%20+%20%22%20%22%20+%20info.name%20+%20%22%20%22%20+%20info.version%20+%20%22%20%28build%20%22%20+%20info.appBuildID%20+%20%22%29%5Cn%22%3B%0A%09list%20+%3D%20%22User%20Agent%3A%20%22%20+%20navigator.userAgent%20+%20%22%5Cn%5Cn%22%3B%0A%0A%09for%28var%20type%20in%20AddonManager.addonTypes%29%20%7B%0A%09%09%0A%09%09var%20name%3B%0A%09%09var%20addonType%20%3D%20AddonManager.addonTypes%5Btype%5D%3B%0A%09%09if%20%28addonType.name%29%20name%20%3D%20addonType.name%3B%09%09%0A%09%09else%20if%20%28addonType.id%20%3D%3D%20%22custombuttons%22%29%20name%20%3D%20%22%u041A%u043D%u043E%u043F%u043A%u0438%22%3B%0A%0A%09%09list%20+%3D%20%22***%20%22%20+%20name%3B%0A%09%09var%20ext%20%3D%20gatherInfo%28addonType.id%29%3B%0A%09%09list%20+%3D%20%22%20%28%20%u0412%u043A%u043B%u044E%u0447%u0435%u043D%u043E%3A%20%22%20+%20ext%5B1%5D%20+%20%22%2C%20%u041E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u043E%3A%20%22%20+%20ext%5B2%5D%20+%20%22%2C%20%u0412%u0441%u0435%u0433%u043E%3A%20%22%20+%20ext%5B0%5D%20+%20%22%20%29%5Cn%22%20+%20ext%5B3%5D%20+%20%22%5Cn%22%3B%0A%09%7D%0A%0A%09var%20dialog%20%3D%20%27%5C%0A%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%5Cn%5C%0A%09%09%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%09%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%5Cn%5C%0A%09%09%09id%3D%22cbbExtensionsLister%22%5Cn%5C%0A%09%09%09persist%3D%22width%20height%20screenX%20screenY%22%5Cn%5C%0A%09%09%09title%3D%22%u0421%u043F%u0438%u0441%u043E%u043A%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0439%22%5Cn%5C%0A%09%09%09width%3D%22640%22%20height%3D%22480%22%5Cn%5C%0A%09%09%09buttons%3D%22accept%2Cextra1%22%5Cn%5C%0A%09%09%09buttonlabelextra1%3D%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u0441%u0435%u2026%22%5Cn%5C%0A%09%09%09onload%3D%22init%28%29%22%5Cn%5C%0A%09%09%09ondialogextra1%3D%22copy%28%29%22%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B%21%5BCDATA%5B%5Cn%5C%0A%09%09%09%09%09function%20init%20%28%29%20%7B%7D%5Cn%5C%0A%09%09%09%09%09function%20copy%20%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09var%20tb%20%3D%20document.getElementById%28%22addonslist%22%29%3B%5Cn%5C%0A%09%09%09%09%09%09window.arguments%5B0%5D.write%28%28opener.navigator.platform.indexOf%28%22Win%22%29%20%21%3D%20-1%29%20%3F%20tb.value.replace%28/%5C%5Cn/g%2C%20%22%5C%5Cr%5C%5Cn%22%29%20%3A%20tb.value%29%3B%5Cn%5C%0A%09%09%09%09%09%09tb.focus%20%28%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%5D%5D%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B/script%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3Btextbox%20id%3D%22addonslist%22%20flex%3D%221%22%20multiline%3D%22true%22%20/%26gt%3B%5Cn%5C%0A%09%26lt%3B/dialog%26gt%3B%27%3B%0A%09dialog%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20encodeURIComponent%28dialog%29%3B%0A//%09var%20win%20%3D%20window.openDialog%20%28dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cdialog%3Dno%2Cminimizable%22%2C%20custombuttonsUtils.gClipboard%29%3B%0A%09var%20win%20%3D%20window.openDialog%20%28dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cdialog%3Dno%22%2C%20custombuttonsUtils.gClipboard%29%3B%0A%0A%09addEventListener%28%22load%22%2C%20function%28%29%20%7B%0A%09%09var%20doc%20%3D%20win.document%3B%0A%09%09var%20textbox%20%3D%20doc.querySelector%28%22textbox%22%29%3B%0A%09%09textbox.value%20%3D%20list%3B%0A%09%09textbox.inputField.selectionStart%20%3D%0A%09%09textbox.inputField.selectionEnd%20%3D%200%3B%0A%09%7D%2C%20true%2C%20win%29%3B%0A%7D%0AAddonManager.getAllAddons%28extensionsCallback%29%3B%0A%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {}

function gatherInfo(type) {

    var tmp = [], map = {}, sort = [];
    items.forEach(function(item) {
        if (item.type != type) return;

        var name = item.name ? item.name.toUpperCase() : "UNNAMED";
        name += item.id

        tmp.push(name);
        map[name] = item;
    });
    tmp.sort();
    tmp.forEach(function(name) { sort.push(map[name]) });
    
    var list = "", enabled = 0, disabled = 0;
    sort.forEach(function(item) {
    
        list += (item.name || "unnamed") + " " + (item.version || "");

        if (item.type != "custombuttons" && (item.userDisabled || item.appDisabled)) {
            list += " [ выключен ]\n"; disabled++; return;
        }

        else if (item.type == "custombuttons") {

            var str = item.id;
            var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length);
            var button = document.getElementById(id);

            if (!button) {
                list += " [ НЕ ВЫТАЩЕНА ]\n"; disabled++; return;
            }
            if (button.hasAttribute("initializeerror")) {
                list += " [ ОШИБКА ИНИЦИАЛИЗАЦИИ ]\n"; disabled++; return;
            }
        }

        enabled++; list += "\n";
    });
    return [enabled + disabled, enabled, disabled, list];
}
var items = [];
function extensionsCallback(extensions) {
    var list = "";
    items = extensions;
    
    var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
    
    list += info.vendor + " " + info.name + " " + info.version + " (build " + info.appBuildID + ")\n";
    list += "User Agent: " + navigator.userAgent + "\n\n";

    for(var type in AddonManager.addonTypes) {
        
        var name;
        var addonType = AddonManager.addonTypes[type];
        if (addonType.name) name = addonType.name;        
        else if (addonType.id == "custombuttons") name = "Кнопки";

        list += "*** " + name;
        var ext = gatherInfo(addonType.id);
        list += " ( Включено: " + ext[1] + ", Отключено: " + ext[2] + ", Всего: " + ext[0] + " )\n" + ext[3] + "\n";
    }

    var dialog = '\
        <?xml-stylesheet href="chrome://global/skin/"?>\n\
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
            xmlns:html="http://www.w3.org/1999/xhtml"\n\
            id="cbbExtensionsLister"\n\
            persist="width height screenX screenY"\n\
            title="Список расширений"\n\
            width="640" height="480"\n\
            buttons="accept,extra1"\n\
            buttonlabelextra1="Копировать все…"\n\
            onload="init()"\n\
            ondialogextra1="copy()">\n\
            <script type="application/x-javascript">\n\
                <![CDATA[\n\
                    function init () {}\n\
                    function copy () {\n\
                        var tb = document.getElementById("addonslist");\n\
                        window.arguments[0].write((opener.navigator.platform.indexOf("Win") != -1) ? tb.value.replace(/\\n/g, "\\r\\n") : tb.value);\n\
                        tb.focus ();\n\
                    }\n\
                ]]>\n\
            </script>\n\
            <textbox id="addonslist" flex="1" multiline="true" />\n\
    </dialog>';
    dialog = "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(dialog);
//    var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no,minimizable", custombuttonsUtils.gClipboard);
    var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no", custombuttonsUtils.gClipboard);

    addEventListener("load", function() {
        var doc = win.document;
        var textbox = doc.querySelector("textbox");
        textbox.value = list;
        textbox.inputField.selectionStart =
        textbox.inputField.selectionEnd = 0;
    }, true, win);
}
AddonManager.getAllAddons(extensionsCallback);


Автор кнопки: Dumby

Downloads( Firefox 3.6 - 24 )
Кнопка открывает стандартный менеджер загрузок в боковой панели, новом окне или вкладке.

ЛКМ => открыть менеджер загрузок в боковой панели.
СКМ => открыть менеджер загрузок в новом окне.
ПКМ =>  открыть менеджер загрузок в новой активной вкладке.
Ctrl + ПКМ =>  контекстное меню кнопки

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EDownloads%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%20%3F%20toggleSidebar%28%29%20%3A%20openWebPanel%28%22Downloads%22%2C%20downTabUrl%20%29%3B%20%20%20%20%20%09%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20windows%20%3D%20Components.%20classes%20%5B%27@mozilla.org/appshell/window-mediator%3B1%27%5D.getService%28Components.%20interfaces.%20nsIWindowMediator%29.getEnumerator%20%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%28%20windows.%20hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20windows.getNext%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20win.document.documentURI%20%3D%3D%20%22chrome%3A//mozapps/content/downloads/downloads.xul%22%29%20%7B%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20win.close%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20BrowserDownloadsUI%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20downloadManagerInTab%28%20true%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20...................................................................%0Avar%20downTabUrl%20%3D%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%3B%0A%0A//%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0434%u043B%u044F%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20....%0Aconst%20trueDownloadsImg%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAIAAAMACyIAEGyoLtVqpyrVDSIADwAAAgABAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAgAAAgALHwAPZaAmwsXxnv+t63n/XpwbwAcUAA0AAAIAAQIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwADAAACAAwgAA9loyXFv+2W/7/wl/yg52b8n+Nj/1OJG8EBCAAMAAACAAECAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAIAAAIADCEADmSiI8Sx4oX/suWH+7HmhP+T3FX/i9dK+5LZUv9RhxnAAQkADAAAAgABAgACAAAAAAAAAAAAAAAAAQIAAgAAAgANIQANY6Eiw6nbfP+l23f7p913/6fed/+I0kj/gs5A/37KPvuL0Ev/UIYYvwIJAAsAAAIAAQIAAgAAAAABAQABAAABAAsgAA1gnh/BoNJy/5vSa/qe1W3/odhx/5/Ybv+Cy0H/fsg8/3zFOv92vjX6g8VD/0yCFL0BCAALAAABAAABAAEAAAEACRUAEmqmKcyn2Hr/n9Ry/Z3Tbv+Yz2b/mtJp/5nRZv99xDz/ecI3/3e/Nv97wT7/e78//YvKT/9Xjhy/BAwACQAAAQAAAAEAFCkAL2CUKdxhkTDXXI4o1m+mN/KWzGb/ksth/pLLX/93vTn/croz/nm9Pf9noizyVoog1lqNJtlbkx/TDyAAHwAAAQAAAAAAAAAAAAAAAAACAwEEAAAAAD5oFqeXz2X/icFY+4rDWP9ytjX/bLEu+3/CQv8+ZxSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEDBAMEAAAAAEFqFqeSyV7/g7pR+4S8Uf9usDP/aKsr+3u9Pv9AaRSnAAAAAAMEAgQBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeNxVj/fbRK+3+2Sv9rqzD/ZaYo+3m5PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeJwlT/eLBF+3qyRv9qqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeHwFD/da5B+3exQv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeEv03/cqw8+3WvPv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeCvkn/cKs4+3OuO/9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAD9oE6d+vET/bKky+2+sNf9oqCv/Y6Mm+3e3Ov8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFaeDv0v/cKw5+3OvPP9vqzX/aqcx+3+8RP9AaRSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAEAAAAADlkCox1szT/a6Yv+W2oMPxspy78aqQt+XSyMv85ZAqMAAAAAAECAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0Aconst%20falseDownloadsImg%20%3D%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg%3D%3D%22%3B%0A%0A%0A%0A/*%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u0432%20%u0442%u0430%u0431%u0435%20%u0438%u043B%u0438%20%u043F%u0435%u0440%u0435%u043C%u0435%u0441%u0442%u0438%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u0440%u044F%u0434%u043E%u043C%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%20%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u0438%20%u0443%u0436%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u044B%20%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%20..........................................*/%0Afunction%20downloadManagerInTab%28%20foregroundTab%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%0A%20%20%0A%20%20%20%20%20setTimeout%28function%28%29%20%7B%20closeDownloadManager%28%29%20%7D%2C%200%29%3B%20//%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0439%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u043A%u0440%u043E%u043C%u0435%20%u043F%u0435%u0440%u0432%u043E%u0439%20....%0A%20%20%20%20%20var%20downTab%20%3D%20null%3B%0A%20%20%20%20%20Array.slice%28%20gBrowser.tabs%20%29.forEach%28function%28tab%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.linkedBrowser.currentURI.spec%20%21%3D%3D%20downTabUrl%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%21downTab%20%3F%20downTab%20%3D%20tab%20%3A%20gBrowser.removeTab%28tab%29%3B%0A%20%20%20%20%20%7D%29%0A%20%20%20%0A%20%20%20%20%20//%20%u043F%u0435%u0440%u0435%u043C%u0435%u0441%u0442%u0438%u0442%u044C%20%u0438%u043B%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u0440%u044F%u0434%u043E%u043C%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%20....%0A%20%20%20%20%20var%20selTab%20%3D%20gBrowser.selectedTab%3B%0A%20%20%20%20%20if%20%28%20downTab%20%21%3D%3D%20selTab%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20downTab%20%26%26%20gBrowser.visibleTabs.indexOf%28%20downTab%20%29%20%3D%3D%20-1%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20TabView.moveTabTo%28%20downTab%2C%20TabView._window.GroupItems._activeGroupItem.id%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20downTab%20%3D%20downTab%20%7C%7C%20gBrowser.addTab%28%20downTabUrl%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20pos%20%3D%20selTab._tPos%20+%20%28%20downTab._tPos%20%3E%20selTab._tPos%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28%20downTab%2C%20pos%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20downTab%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%7D%3B%0A%0A%0A%0A//%20%u0410%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0434%u043B%u044F%20%u0442%u0430%u0431%u0430%20%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%20.........................................................%0AaddEventListener%28%22TabAttrModified%22%2C%20function%28e%29%20%7B%20%0A%20%20%20%20%20if%20%28%20e.target.linkedBrowser.currentURI.spec%20%3D%3D%20downTabUrl%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20tabIndex%20%3D%20gBrowser.getBrowserIndexForDocument%28%20e.target.linkedBrowser.contentDocument%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.mTabContainer.childNodes%5BtabIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20LOG%28tab.label%29%0A%20%20%20%20%20%20%20%20%20%20tab.image%20%3D%20%28%20tab.label%20%3D%3D%20%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%20%29%3F%20falseDownloadsImg%3A%20trueDownloadsImg%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%0A%7D%2C%20true%2C%20gBrowser.tabContainer%29%3B%0A%0A%0A%0A//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u0432%u0441%u0435%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%20%u0441%u0432%u044F%u0437%u043D%u044B%u0435%20%u0441%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u043E%u0439%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0442%u044C%20%u043D%u0443%u0436%u043D%u044B%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20%u0438%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%20%20........%0Afunction%20getCommand%28e%29%20%7B%0A%20%20%20%20%20var%20command%20%3D%20e.target.getAttribute%28%22oncommand%22%29%3B%0A%20%20%20%20%20if%20%28%20command%20%3D%3D%20%22performCommand%28%27cmd_removeFromList%27%29%3B%22%20%7C%7C%20command%20%3D%3D%20%27clearDownloadList%28%29%3B%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20content.document.location%20%3D%3D%20downTabUrl%29%20document.getElementById%28%22Browser%3AReload%22%29.doCommand%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%20%29%20openWebPanel%28%22Downloads%22%2C%20downTabUrl%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%09%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%20%20%20%20%20%0AaddEventListener%28%22command%22%2C%20getCommand%2C%20true%2C%20window%29%3B%0A%0A%0A%0A//%20%u0418%u0441%u043F%u0440%u0430%u0432%u043B%u044F%u0435%u043C%20%u043E%u0448%u0438%u0431%u043A%u0438%20.......................................................................................%0Afunction%20setFakeArguments%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.target.location.href%20%3D%3D%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%20%29%20%7B%0A%20%20%20%20%20var%20win%20%3D%20e.target.defaultView%3B%0A%20%20%20%20%20win%20%3D%20win.wrappedJSObject%20%7C%7C%20win%3B%0A%20%20%20%20%20win.arguments%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%7D%0A%7D%3B%0AaddEventListener%28%22TabClose%22%2C%20setFakeArguments%2C%20true%2C%20gBrowser%29%3B%0AaddEventListener%28%22DOMContentLoaded%22%2C%20setFakeArguments%2C%20true%2C%20gBrowser%29%3B%0AaddEventListener%28%22DOMContentLoaded%22%2C%20setFakeArguments%2C%20true%2C%20document.getElementById%28%27sidebar-box%27%29%29%3B%0A%0A%0A%0A%0A//%20%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0439%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20....................................................................%0Afunction%20closeDownloadManager%28%29%20%7B%0A%20%20%20%20%20var%20wm%20%3D%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.getService%28Ci.nsIWindowMediator%29%3B%0A%20%20%20%20%20var%20dm%20%3D%20wm.getMostRecentWindow%28%22Download%3AManager%22%29%3B%0A%20%20%20%20%20if%20%28%20dm%20%29%20dm.close%28%29%3B%20%20%0A%7D%3B%0A%0A%0A%09%09%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20.....................................................................................%0Athis.tooltipText%20%3D%20%22L%3A%20Download%20Manager%20in%20the%20Sidebar%5CnM%3A%20Download%20Manager%20%5CnR%3A%20Download%20Manager%20in%20the%20Tab%5CnCtrl+R%3A%20CB%20menu%20%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ................................................................
this.onclick = function(e) {

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) {
          document.getElementById('sidebar-box').getAttribute('sidebarcommand') ? toggleSidebar() : openWebPanel("Downloads", downTabUrl );         
          };
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) { 
          var windows = Components. classes ['@mozilla.org/appshell/window-mediator;1'].getService(Components. interfaces. nsIWindowMediator).getEnumerator (null);
          while( windows. hasMoreElements() ) {
                 var win = windows.getNext ();
                 if ( win.document.documentURI == "chrome://mozapps/content/downloads/downloads.xul") {    
                      win.close();
                      return;
                      }
                 };
          BrowserDownloadsUI();
          };
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();  
          downloadManagerInTab( true );
          }
};



// Объявляем переменные для этой вкладки ...................................................................
var downTabUrl = 'chrome://mozapps/content/downloads/downloads.xul';

// иконки для вкладки загрузок ....
const trueDownloadsImg = "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAIAAAMACyIAEGyoLtVqpyrVDSIADwAAAgABAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAgAAAgALHwAPZaAmwsXxnv+t63n/XpwbwAcUAA0AAAIAAQIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwADAAACAAwgAA9loyXFv+2W/7/wl/yg52b8n+Nj/1OJG8EBCAAMAAACAAECAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAIAAAIADCEADmSiI8Sx4oX/suWH+7HmhP+T3FX/i9dK+5LZUv9RhxnAAQkADAAAAgABAgACAAAAAAAAAAAAAAAAAQIAAgAAAgANIQANY6Eiw6nbfP+l23f7p913/6fed/+I0kj/gs5A/37KPvuL0Ev/UIYYvwIJAAsAAAIAAQIAAgAAAAABAQABAAABAAsgAA1gnh/BoNJy/5vSa/qe1W3/odhx/5/Ybv+Cy0H/fsg8/3zFOv92vjX6g8VD/0yCFL0BCAALAAABAAABAAEAAAEACRUAEmqmKcyn2Hr/n9Ry/Z3Tbv+Yz2b/mtJp/5nRZv99xDz/ecI3/3e/Nv97wT7/e78//YvKT/9Xjhy/BAwACQAAAQAAAAEAFCkAL2CUKdxhkTDXXI4o1m+mN/KWzGb/ksth/pLLX/93vTn/croz/nm9Pf9noizyVoog1lqNJtlbkx/TDyAAHwAAAQAAAAAAAAAAAAAAAAACAwEEAAAAAD5oFqeXz2X/icFY+4rDWP9ytjX/bLEu+3/CQv8+ZxSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEDBAMEAAAAAEFqFqeSyV7/g7pR+4S8Uf9usDP/aKsr+3u9Pv9AaRSnAAAAAAMEAgQBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeNxVj/fbRK+3+2Sv9rqzD/ZaYo+3m5PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeJwlT/eLBF+3qyRv9qqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeHwFD/da5B+3exQv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeEv03/cqw8+3WvPv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeCvkn/cKs4+3OuO/9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAD9oE6d+vET/bKky+2+sNf9oqCv/Y6Mm+3e3Ov8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFaeDv0v/cKw5+3OvPP9vqzX/aqcx+3+8RP9AaRSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAEAAAAADlkCox1szT/a6Yv+W2oMPxspy78aqQt+XSyMv85ZAqMAAAAAAECAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
const falseDownloadsImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg==";



/* Открывать загрузки в табе или переместить вкладку загрузок рядом с текущей вкладкой 
   если загрузи уже открыты и закрыть все лишние вкладки загрузок  ..........................................*/
function downloadManagerInTab( foregroundTab ) {          
  
     setTimeout(function() { closeDownloadManager() }, 0); // закрыть стандартный менеджер загрузок     
     
     // закрыть все вкладки загрузок кроме первой ....
     var downTab = null;
     Array.slice( gBrowser.tabs ).forEach(function(tab) {
           if ( tab.linkedBrowser.currentURI.spec !== downTabUrl ) return;
           !downTab ? downTab = tab : gBrowser.removeTab(tab);
     })
   
     // переместить или открыть вкладку загрузок рядом с текущей вкладкой ....
     var selTab = gBrowser.selectedTab;
     if ( downTab !== selTab ) {
          if ( downTab && gBrowser.visibleTabs.indexOf( downTab ) == -1 )
               TabView.moveTabTo( downTab, TabView._window.GroupItems._activeGroupItem.id );
          downTab = downTab || gBrowser.addTab( downTabUrl );
          var pos = selTab._tPos + ( downTab._tPos > selTab._tPos );
          gBrowser.moveTabTo( downTab, pos );
          gBrowser.selectedTab = downTab;        
          } 
};



// Автоматически меняем иконку для таба "Загрузки" .........................................................
addEventListener("TabAttrModified", function(e) { 
     if ( e.target.linkedBrowser.currentURI.spec == downTabUrl ) {
          var tabIndex = gBrowser.getBrowserIndexForDocument( e.target.linkedBrowser.contentDocument );
          var tab = gBrowser.mTabContainer.childNodes[tabIndex];
          LOG(tab.label)
          tab.image = ( tab.label == "Загрузки" )? falseDownloadsImg: trueDownloadsImg;
          }      
}, true, gBrowser.tabContainer);



// Отслеживать все команды связные с загрузкой и запускать нужные функции и команды  ........
function getCommand(e) {
     var command = e.target.getAttribute("oncommand");
     if ( command == "performCommand('cmd_removeFromList');" || command == 'clearDownloadList();') {
          if ( content.document.location == downTabUrl) document.getElementById("Browser:Reload").doCommand();
          if ( document.getElementById('sidebar-box').getAttribute('sidebarcommand') ) openWebPanel("Downloads", downTabUrl );                
          }
};     
addEventListener("command", getCommand, true, window);



// Исправляем ошибки .......................................................................................
function setFakeArguments(e) {
     if ( e.target.location.href == 'chrome://mozapps/content/downloads/downloads.xul' ) {
     var win = e.target.defaultView;
     win = win.wrappedJSObject || win;
     win.arguments = [];
     }
};
addEventListener("TabClose", setFakeArguments, true, gBrowser);
addEventListener("DOMContentLoaded", setFakeArguments, true, gBrowser);
addEventListener("DOMContentLoaded", setFakeArguments, true, document.getElementById('sidebar-box'));




// Закрыть стандартный менеджер загрузок ....................................................................
function closeDownloadManager() {
     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
     var dm = wm.getMostRecentWindow("Download:Manager");
     if ( dm ) dm.close();  
};


        
// Подсказка для кнопки .....................................................................................
this.tooltipText = "L: Download Manager in the Sidebar\nM: Download Manager \nR: Download Manager in the Tab\nCtrl+R: CB menu ";

Сохранить всю страницу как  PNG / PDF ( Firefox 24 + ) от 06.02.2017.
Сохраняет страницу как PNG-изображение( делает скриншот страницы ) или как PDF файл через сервис pdfmyurl.com  JavaScript на странице должны быть включены для сохранения страницы в PDF. Если страница слишком большая то кнопка сохранит страницу как PNG не полностью. Кнопка не работает если включен e10.

ЛКМ  => Сохранить всю страницу как PNG,
СКМ  => Контекстное меню кнопки,
ПКМ  => Сохранить страницу как PDF файл.
Ctrl + ПКМ  =>  Контекстное меню кнопки

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20%20PNG%20/%20PDF%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................%20%0Athis.onclick%20%3De%3D%3E%20%7B%20%20%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20savePageInPNG%28%29%3B%0A%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20savePageToPDF%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PDF%20%u0444%u0430%u0439%u043B%20%u0447%u0435%u0440%u0435%u0437%20%u0441%u0435%u0440%u0432%u0438%u0441%20%27pdfmyurl.com%27%20................%0Afunction%20savePageToPDF%28%29%20loadURI%28%22http%3A//pdfmyurl.com%3Furl%3D%22%20+%20content.location%29%3B%0A%0A%20%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PNG%20................%0Afunction%20savePageInPNG%28%29%20%7B%0A%20%20%20var%20canvas%20%3D%20document.createElementNS%28xhtmlns%2C%20%27canvas%27%29%3B%0A%20%20%20canvas.width%20%3D%20content.innerWidth%20+%20content.scrollMaxX%3B%20%0A%20%20%20canvas.height%20%3D%20content.innerHeight%20+%20content.scrollMaxY%3B%0A%20%20%20var%20context%20%3D%20canvas.getContext%28%222d%22%29%3B%0A%20%20%20%28%28i%20%3D%2017%29%3D%3E%20%7B%0A%20%20%20%20%20%20try%20%7B%20context.drawWindow%28content%2C%200%2C%200%2C%20canvas.width%2C%20canvas.height%2C%20%22white%22%29%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%20canvas.height%20%3D%20canvas.width*i%3B%20arguments.callee%28--i%29%3B%20%7D%3B%0A%20%20%20%7D%29%28%29%3B%0A%20%20%20var%20uri%20%3D%20makeURI%28canvas.toDataURL%28%22image/png%22%29%29%3B%0A%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22Save%20Screenshot%20As%22%2C%20fp.modeSave%29%3B%0A%20%20%20fp.appendFilter%28%22%22%2C%20%22*.png%22%29%3B%0A%20%20%20var%20title%20%3D%20gBrowser.mCurrentTab.label.replace%28/%5B%3A+.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%0A%20%20%20fp.defaultString%20%3D%20title%20+%20new%20Date%28%29.toLocaleFormat%28%22%20%20%25d.%25m.%25Y.%20%28%20%25I%3A%25M%3A%25S%20%29%22%29%20+%20%22.png%22%3B%0A%20%20%20if%20%28fp.show%28%29%20%3D%3D%20fp.returnCancel%20%7C%7C%20%21fp.file%29%20return%3B%0A%0A%20%20%20var%20wbp%20%3D%20window.makeWebBrowserPersist%28%29%3B%0A%20%20%20parseInt%28Services.appinfo.version%29%20%3C%2036%0A%20%20%20%3F%20wbp.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%0A%20%20%20%3A%20wbp.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%3B%20//%20%u0435%u0441%u043B%u0438%20FF36+%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PNG%20%5Cn%u0421%3A%20%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PDF%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ................ 
this.onclick =e=> {     
   
   if ( e.button == 0 ) savePageInPNG();
   
   if ( e.button == 1 ) gShowPopup(this);
   
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
        e.preventDefault();
        savePageToPDF();
        }
};


// Сохраняет страницу как PDF файл через сервис 'pdfmyurl.com' ................
function savePageToPDF() loadURI("http://pdfmyurl.com?url=" + content.location);

 
// Сохранить всю страницу как PNG ................
function savePageInPNG() {
   var canvas = document.createElementNS(xhtmlns, 'canvas');
   canvas.width = content.innerWidth + content.scrollMaxX;
   canvas.height = content.innerHeight + content.scrollMaxY;
   var context = canvas.getContext("2d");
   ((i = 17)=> { 
      try { context.drawWindow(content, 0, 0, canvas.width, canvas.height, "white") }
      catch(e) { canvas.height = canvas.width*i; arguments.callee(--i); };
   })();
   var uri = makeURI(canvas.toDataURL("image/png"));
   
   var fp = window.makeFilePicker();
   fp.init(window, "Save Screenshot As", fp.modeSave);
   fp.appendFilter("", "*.png");
   var title = gBrowser.mCurrentTab.label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   fp.defaultString = title + new Date().toLocaleFormat("  %d.%m.%Y. ( %I:%M:%S )") + ".png";
   if (fp.show() == fp.returnCancel || !fp.file) return;

   var wbp = window.makeWebBrowserPersist();
   parseInt(Services.appinfo.version) < 36
   ? wbp.saveURI(uri, null, null, null, null, fp.file, null)
   : wbp.saveURI(uri, null, null, null, null, null, fp.file, null); // если FF36+
};


// Подсказка для кнопки ................
this.tooltipText = "Л:  Сохранить всю страницу как PNG \nС:  CB Меню \nП:  Сохранить всю страницу как PDF";

Make bookmarklet button( Firefox 3.6+ ) от 25.08.2016.
кнопка преобразует букмарклеты в кнопки. При нажатии кнопки открывается окошко где для кнопки запускающей букмарклет можно установить название и иконку и адрес букмарклета, после вода нужных данных создаётся новая кнопка.
Автор: Anton

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMake%20bookmarklet%20button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-4%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3Evar%20XML%20%3D%20window.XML%20%7C%7C%20%7B%7D%3B%0A%0Athis.%20showBookmarkletDialog%20%3D%20function%20%28callback%29%0A%7B%0A%20%20%20%20var%20ipi%20%3D%20XML.%20ignoreProcessingInstructions%3B%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20false%3B%0A%20%20%20%20var%20dialog%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22dlg02%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Custom%20Buttons%20bookmarklet%20maker%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ondialogaccept%3D%22return%20windowController.accept%28%29%3B%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%21%5BCDATA%5B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20windowController%20%3D%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accept%3A%20function%20%28%29%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20name%20%3D%20document.%20getElementById%20%28%22nametb%22%29.%20value%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20document.%20getElementById%20%28%22urltb%22%29.%20value%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20img%20%3D%20document.%20getElementById%20%28%22imgtb%22%29.%20value%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20arguments%20%5B0%5D%20%28name%2C%20url%2C%20img%29%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%5D%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/script%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bvbox%20flex%3D%221%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bgrid%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumns%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumn/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumn%20flex%3D%221%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/columns%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brows%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Blabel%20value%3D%22Bookmarklet%20Name%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Btextbox%20id%3D%22nametb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/row%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Blabel%20value%3D%22Bookmarklet%20URL%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Btextbox%20id%3D%22urltb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/row%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Blabel%20value%3D%22Icon%20URL%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Btextbox%20id%3D%22imgtb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/row%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/rows%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/grid%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3B/dialog%26gt%3B%5Cn%5C%0A%20%20%20%20%27%3B%0A%20%20%20%20window.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cminimizable%2Cresizable%3Dyes%2Ccenterscreen%2Cdialog%3Dyes%22%2C%20callback%29%3B%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20ipi%3B%0A%7D%3B%0A%0Avar%20THIS%20%3D%20this%3B%0A%0Athis.%20makeBookmarklet%20%3D%20function%20%28bookmarkletName%2C%20bookmarkletCode%2C%20bookmarkletIcon%29%0A%7B%0A%20%20%20%20var%20bookmarklet%20%3D%20btoa%20%28bookmarkletCode%29%3B%0A%20%20%20%20custombuttons.%20cloneButton%20%28THIS%29%3B%0A%20%20%20%20var%20newButtonLink%20%3D%20custombuttons.%20makeButtonLink%20%28%22update%22%2C%20THIS.%20nextSibling.%20id%29%3B%0A%20%20%20%20var%20params%20%3D%20custombuttons.%20cbService.%20getButtonParameters%20%28newButtonLink%29.%20wrappedJSObject%3B%0A%20%20%20%20params.%20name%20%3D%20bookmarkletName%3B%0A%20%20%20%20params.%20code%20%3D%20%22getBrowser%20%28%29.%20loadURI%20%28atob%20%28%5C%22%22%20+%20bookmarklet%20+%20%22%5C%22%29%29%3B%22%3B%0A%20%20%20%20params.%20image%20%3D%20bookmarkletIcon%3B%0A%20%20%20%20params.%20wrappedJSObject%20%3D%20params%3B%0A%20%20%20%20custombuttons.%20cbService.%20installButton%20%28params%29%3B%0A%7D%3B%0A%0Athis.%20showBookmarkletDialog%20%28this.%20makeBookmarklet%29%3B%0A%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var XML = window.XML || {};

this. showBookmarkletDialog = function (callback)
{
    var ipi = XML. ignoreProcessingInstructions;
    XML. ignoreProcessingInstructions = false;
    var dialog = '\
        <?xml-stylesheet href="chrome://global/skin/"?>\n\
        <?xml-stylesheet href="resource://gre/res/html.css"?>\n\
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
                id="dlg02"\n\
                title="Custom Buttons bookmarklet maker"\n\
                ondialogaccept="return windowController.accept();">\n\
            <script type="application/x-javascript">\n\
                <![CDATA[\n\
                    var windowController =\n\
                    {\n\
                        accept: function ()\n\
                        {\n\
                            var name = document. getElementById ("nametb"). value;\n\
                            var url = document. getElementById ("urltb"). value;\n\
                            var img = document. getElementById ("imgtb"). value;\n\
                            window. arguments [0] (name, url, img);\n\
                        }\n\
                    };\n\
                ]]>\n\
            </script>\n\
            <vbox flex="1">\n\
                <grid>\n\
                    <columns>\n\
                        <column/>\n\
                        <column flex="1"/>\n\
                    </columns>\n\
                    <rows>\n\
                        <row align="center">\n\
                            <label value="Bookmarklet Name"/>\n\
                            <textbox id="nametb" flex="1"/>\n\
                        </row>\n\
                        <row align="center">\n\
                            <label value="Bookmarklet URL"/>\n\
                            <textbox id="urltb" flex="1"/>\n\
                        </row>\n\
                        <row align="center">\n\
                            <label value="Icon URL"/>\n\
                            <textbox id="imgtb" flex="1"/>\n\
                        </row>\n\
                    </rows>\n\
                </grid>\n\
            </vbox>\n\
        </dialog>\n\
    ';
    window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog, "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback);
    XML. ignoreProcessingInstructions = ipi;
};

var THIS = this;

this. makeBookmarklet = function (bookmarkletName, bookmarkletCode, bookmarkletIcon)
{
    var bookmarklet = btoa (bookmarkletCode);
    custombuttons. cloneButton (THIS);
    var newButtonLink = custombuttons. makeButtonLink ("update", THIS. nextSibling. id);
    var params = custombuttons. cbService. getButtonParameters (newButtonLink). wrappedJSObject;
    params. name = bookmarkletName;
    params. code = "getBrowser (). loadURI (atob (\"" + bookmarklet + "\"));";
    params. image = bookmarkletIcon;
    params. wrappedJSObject = params;
    custombuttons. cbService. installButton (params);
};

this. showBookmarkletDialog (this. makeBookmarklet);


Custom Buttons² Context Menu Demo( Firefox 3.6+ ) Кнопка - образец , показывающий , что кроме  модефикаторов клавиш мыши и хоткеев можно использовать контекстное меню .
Автор: nicholas
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECustom%20Buttons%B2%20Context%20Menu%20Demo%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnR0RjM1NPPtr+/LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq1sjvLysTAxsbAGQAAAAAAAAAAAAAAAAAAAACnsK8UpK2sy6Cqqr6msLEaAAAAAAAAAAAAAAAAwbS3DtDGxs6jmZnajYeEvI+LhxcAAAAAAAAAAAAAAAAAAAAAqLGxBa+5ucymsbPwtsDCxcvQ1aDV1twUuauxFK+fpayklZn3jH+A/YuBf9OOh4QaAAAAAAAAAAAAAAAAAAAAAAAAAADX4OK7u8bI+rC5vPvJzdLx3NnesdbM0rO/r7XXlIGH/Yh3evuvo6Ljt6yqGAAAAAAAAAAAAAAAAAAAAAAAAAAA6/DysLTAxP+4wMX7y87T8e3r8Ozt5urt1MbM9rWhqPeeiI7p1MHDh9bGxwcAAAAAAAAAAAAAAAAAAAAAz9reBdvk6L2qtrz/tr3E/NHU2fno5+v37OXp99zO1Pi/q7L2pIuT6su2vGHIsLYCAAAAAAAAAAAAAAAAjJmfAaGvtCGptbuzmaWt+7S7w/vX2t/86Ofr++7o7Pzg0tj8vqiw+5B0ff6pj5Xamn+FKpBzegIAAAAAkpufAoqVmyWJlpyokp+m146aof+3vsX71Njd/eno7P3v5+z93s/W/begqP17XGb9clVd9H1iaL19ZmsyemhsApCZnSSIkpbHg4+VyYuXnumLmJ//qa63/tTX3f7z8vb+9O3x/eTV3P22nab9dlZg/l1BSPtgSE3ocl9ivoJwcyaWn6O9fIWKz4aRlqaTnqTEmaat/7K4wf/W2eD+8e/0/fDp7vrj09r4uqGr8oFkbfxpT1XmUTtAw2VSVsCSgYTDAAAAAAAAAAAAAAAAq7S6U7/IztG2vcT+2Nrg8+rn7fzp3+b43s3V6ragqdWxmKCqkXh/LQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NvigdHS2fDl3uf+3tDa/s+8xuzRu8RsAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjc4wvX193A5uLo/d/U2v7Wyc/Z1sbMEAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5OPp2eDc4fLVy9H75dnfmwAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODd4hTa1tnIzsfK59rQ1Q4AAAAAAAAA/wAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+Di7NnU1gwAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAx+OcQcODnEHAA5xB4AOcQeADnEHAA5xBgAGcQQAAnEEAAJxBAACcQeAHnEH4AZxB+BecQfw7nEH8LZxB/nOcQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20Cb%20%3D%20custombuttons%3B%0A%0A//%20Two%20functions%20for%20testing%2C%20this.one%28%29%20and%20this.two%28%29%0Athis.one%20%3D%20function%28%29%20%7B%0A%20%20var%20Msg%20%3D%20createMsg%28this.label%29%3B%0A%20%20Msg.aMsg%28%22Function%201%22%29%3B%0A%7D%0A%0Athis.two%20%3D%20function%28%29%20%7B%0A%20%20custombuttons.alertSlide%28%22Function%202%22%2C%20%22It%20throws%20up%20a%20different%20alert%22%29%3B%0A%7D%0A%0A//%20Our%20menu%20items%0Athis.ss%20%3D%20%5B%0A%20%20%7B%20label%3A%20%27MenuItem%201%27%2C%20cmd%3A%20%27document.popupNode.one%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27MenuItem%202%27%20%20%2C%20cmd%3A%20%27document.popupNode.two%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%5D%3B%0A%0A//%20Our%20Initialization%20function%20for%20creating%20the%20context%20menu%2C%20setting%20up%20menuitems%20and%20telling%0A//%20custombuttons2%20extension%20to%20put%20cb%20context%20in%20a%20submenu%0Athis.mObj%20%3D%20Cb.getCbContextObj%28this%29%3B%0Athis.init%20%3D%20function%28x%29%20%7B%0A%20%20x.mObj.setSub%28%29%3B%0A%20%20var%20nItem%20%3D%20%7B%7D%2C%20mItem%20%3D%20%7B%7D%3B%0A%20%20document.getElementById%28CB2const.sCBCtxtMenu%29.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20for%28var%20i%20in%20x.ss%29%20%7B%0A%20%20%20%20nItem%20%3D%20new%20x.mObj.getItem%28%29%3B%0A%20%20%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20%20%20nItem.label%20%3D%20x.ss%5Bi%5D.label%3B%0A%20%20%20%20nItem.value%20%3D%20String%28i%29%3B%0A%20%20%20%20mItem%20%3D%20x.mObj.insertBefore%28nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%20%20%20%20this.ss%5Bi%5D.sItemId%20%3D%20mItem.id%3B%0A%20%20%20%20mItem.setAttribute%28%27oncommand%27%2Cx.ss%5Bi%5D.cmd%29%0A%20%20%7D%0A%20%20x.mObj.getItem%28%29%3B%0A%20%20nItem%20%3D%20x.mObj.getItem%28%29%3B%0A%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20this.separator%20%3D%20x.mObj.insertBefore%28%20nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%7D%0Athis.init%28this%29%3B%0A%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.gShowPopup%28this%29%3B%27%29%3B%0A%0A/*this.style.opacity%20%3D%20%27.65%27%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonBrt%28event%29%3B%22%20%29%3B%0Athis.setAttribute%28%22onmouseout%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonDim%28event%29%3B%22%20%29%3B*/%0A%0Athis.setAttribute%28%27author%27%2C%27nicholas%27%29%3B%0Athis.setAttribute%28%27version%27%2C%2720081119.00%27%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html%27%29%3B%0Athis.setAttribute%28%27dependency%27%2C%27FF3.0*%2C%20FL2.0*%2C%20TB2.0*%2C%20CB2%202.0.5*%27%29%3B%0Athis.setAttribute%28%27status%27%2C%27Complete%27%29%3B%0Athis.setAttribute%28%27public%27%2Ctrue%29%3B%0A%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html%27%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BNo%20help%20developed%20for%20%0A%3Clabel%3E%20button%0Acustombuttons-button%3Cid%3E.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

var Cb = custombuttons;

// Two functions for testing, this.one() and this.two()
this.one = function() {
  var Msg = createMsg(this.label);
  Msg.aMsg("Function 1");
}

this.two = function() {
  custombuttons.alertSlide("Function 2", "It throws up a different alert");
}

// Our menu items
this.ss = [
  { label: 'MenuItem 1', cmd: 'document.popupNode.one()', sItemId: '' },
  { label: 'MenuItem 2'  , cmd: 'document.popupNode.two()', sItemId: '' }];

// Our Initialization function for creating the context menu, setting up menuitems and telling
// custombuttons2 extension to put cb context in a submenu
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd)
  }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);


this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)');
this.setAttribute('ondblclick', 'custombuttons.gQuot.gShowPopup(this);');

/*this.style.opacity = '.65';
this.setAttribute("onmouseover", "if (custombuttons) custombuttons.ButtonBrt(event);" );
this.setAttribute("onmouseout", "if (custombuttons) custombuttons.ButtonDim(event);" );*/

this.setAttribute('author','nicholas');
this.setAttribute('version','20081119.00');
this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html');
this.setAttribute('dependency','FF3.0*, FL2.0*, TB2.0*, CB2 2.0.5*');
this.setAttribute('status','Complete');
this.setAttribute('public',true);

this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html');

Savefrom( Firefox24+ ) от 07.02.2016.
Кнопка даёт возможность сохранить видео с текущей страницы через сервис http://ru.savefrom.net/. Кнопка меняет свой цвет на зелёный, если вы находитесь на странице закачку с которой поддерживает сервис ru.savefrom.net. Тут указаны Поддерживаемые ресурсы. JavaScript для нужных сайтов должны быть включены. Пример - смотрим видео на youtube, понравилась. Нажимаем кнопку, открывается ru.savefrom.ne, выбираем ссылку для скачивание и скачиваем. Эсли кнопка не работает на Palemoon 28.0.1 то можно добавить в файл user.js параметр: user_pref("general.useragent.override.savefrom.net", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0");


ЛКМ => получить ссылку на видео.

Код кнопки и код для инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESavefrom%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFQKUABUClAAVApQAFQKUABUGmBQZBpwAHPqEUAkSrtAFErL0FPaIZBkGnAAVBpgUFQKUABUClAAVApQAFQKUABUClAAVApQAFQKUABUClBQdFqAEFOp8QAj6nnS2U6P8ymuz/BUKqqAQ5nhQIRagABT+mBQVApQAFQKUABUClAAVApQAFQKUABT+lBAdEqAAGPKAQAD+poTaW5f+H3P/4juD/+ESi6P8EQ6urBDqgEwdEqAAFP6UFBUClAAVApQAFQKUABUClAwdDpwAGPKAOAD6poDyZ5v+J3v/6fMj6/XXC+f6K3f/5Tqjq/wVEq6sEOp8TB0SnAAU/pQMFQKUABUClAwZDpwAHPaEPAD2oojmZ5f+J3P/4crz4/Vyo9/9cqPb/YKr1/XfI//hEoOn/BESrqwQ7oBQHRKcABUClAgVCpwAGPKAMADyooDOV5P+H2//4a7j3/VSk9v9bqvf/W6v3/1Wo9v9XpfP+X7b++SmM5v8AQampBjqgEAVCpwAGPKEGAEKrmS2S5v+B1f/5ZrT2/k6j9f9Xq/b/Vqv2/1Wr9v9Vq/b/Uan2/1On8/9Vsvz7H4ro/wFGrKEFPKEJBUGntgVt1P8ol/D/TaTy/0+n9v9Rqvb/Uav1/1Cs9f9QrfX/T6z1/0+s9f9Orfb/RKXw/yKW7v8HctX/BkOnwAVDqHsGQ6d2ADihlxhx0vRNsf3+UKv0/Uqr9P9MrvX/S671/0qt9P9MrPT9S7f7/hp+1PgAO6GeBkOndwVDqH4FQaUCBT+kAAE5oDkZc87iSbP8/0qr9PpGrfT/SLD1/0iw9f9FrvP/R67z+ke4+/0afNHuATqgQQU/owAFQqUDBUGlBgY/pAAAOKA8J37R51O9/f5BqvL6Qq7z/0Ox9P9DsfT/QbDz/0Kv8/xEu/v9HIDS8QE8oUQFP6QABUKlBwVBpQMFQKQAADefOzWG0eZny//+PKrx+jyu8v9BtPP/P7Pz/z2z8v8+sfH7Qr37/R2C0vABOqFDBT+kAAVCpQMGQaUDBz+kAAA2nzs2htHmg9r//ky28/ovq/D/PrX0/z638/86tvL/O7Px+z+/+/0dg9LwATuhQwU+pAAFQqUDBkGlAwc/pAAAN6A7M4bS5one//54zfr6Sbn1/zKz8v8xt/L/Mbfx/zC08fsyv/r9GoPR8AI6okMEPqQABUKlAwZBpQMHP6QAADegOziG0uaM3v/+h9L8+oTR/P9xyvr/WcP3/07A9f9KvPT7Vsz9/SuK0/ABOqFDBT+kAAVCpQMFQaUDBj+kAAA3oT0fgNHnXtP//mjO/fto0f7/cNf//3TY//9u1v7/bdX8/Gni//0nkdXzADihRQY/pAAFQqUDBUClAgU/pAAFPqQzBVO12ARqxfkHa8LsCnDD8gx1w/MMd8TzC3jE9Ap3xPAHesf8Bl635gU9pDwFQKQABUClAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis._handleClick%20%3D%28%29%3D%3E%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27http%3A//savefrom.net/%3Furl%3D%27%20+%20escape%28content.location.href%29%29%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0430%u0435%u043C%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0434%u043E%u043C%u0435%u043D%u0430%u043C%u0438%20%u0437%u0430%u043A%u0430%u0447%u043A%u0443%20%u0438%u0437%20%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20%u043F%u043E%u0434%u0435%u0440%u0436%u0438%u0432%u0430%u0435%u0442%20savefrom%20..............%0Avar%20hosts%20%3D%20self.Help.split%28%27%5Cn%27%29.filter%28%28host%29%3D%3E%20/%5CS/.test%28host%29%29.map%28%28host%29%3D%3E%20host.trim%28%29%29%3B%0A%0A%0A//%20%u0415%u0441%u043B%u0438%20%u0434%u043E%u043C%u0435%u043D%20%u0441%u0430%u0439%u0442%u0430%20%u0441%u043E%u0432%u043F%u0430%u0434%u0430%u0435%u0442%20%u0441%20%u043C%u0430%u0441%u0441%u0438%u0432%u043E%u043C%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0438%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20..............%0Avar%20%5Bimg%5D%20%3D%20document.getAnonymousNodes%28self%29%3B%0AaddEventListener%28%22TabAttrModified%22%2C%20%28e%2C%20tab%20%3D%20e.target%29%3D%3E%20%7B%0A%20%20%20if%20%28%20%21tab.selected%20%29%20return%3B%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20%7Ehosts.indexOf%28content.document.domain.replace%28%22www.%22%2C%20%22%22%29%29%20%29%20%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20%22%u0415%u0441%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0434%u043B%u044F%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20img.src%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFpUAABaVAAAWlQAAFpUAABaZBBQanQQAHoT4UAqtEtAGsRL0Foj0ZBqdBAAWmQQUFpUAABaVAAAWlQAAFpUAABaVAAAWlQAAFpUAABaVABQeoRQEFnzoQAqc+nS3olP8y7Jr/BapCqASeORQIqEUABaY/BQWlQAAFpUAABaVAAAWlQAAFpUAABaU/BAeoRAAGoDwQAKk/oTbllv+H/9z4jv/g+EToov8Eq0OrBKA6EweoRAAFpT8FBaVAAAWlQAAFpUAABaVAAwenQwAGoDwOAKk+oDzmmf+J/976fPrI/XX5wv6K/935Tuqo/wWrRKsEnzoTB6dEAAWlPwMFpUAABaVAAwanQwAHoT0PAKg9ojnlmf+J/9z4cvi8/Vz3qP9c9qj/YPWq/Xf/yPhE6aD/BKtEqwSgOxQHp0QABaVAAgWnQgAGoDwMAKg8oDPklf+H/9v4a/e4/VT2pP9b96r/W/er/1X2qP9X86X+X/62+SnmjP8AqUGpBqA6EAWnQgAGoTwGAKtCmS3mkv+B/9X5Zva0/k71o/9X9qv/Vvar/1X2q/9V9qv/Ufap/1Pzp/9V/LL7H+iK/wGsRqEFoTwJBadBtgXUbf8o8Jf/TfKk/0/2p/9R9qr/UfWr/1D1rP9Q9a3/T/Ws/0/1rP9O9q3/RPCl/yLulv8H1XL/BqdDwAWoQ3sGp0N2AKE4lxjScfRN/bH+UPSr/Ur0q/9M9a7/S/Wu/0r0rf9M9Kz9S/u3/hrUfvgAoTueBqdDdwWoQ34FpUECBaQ/AAGgOTkZznPiSfyz/0r0q/pG9K3/SPWw/0j1sP9F867/R/Ou+kf7uP0a0XzuAaA6QQWjPwAFpUIDBaVBBgakPwAAoDg8J9F+51P9vf5B8qr6QvOu/0P0sf9D9LH/QfOw/0Lzr/xE+7v9HNKA8QGhPEQFpD8ABaVCBwWlQQMFpEAAAJ83OzXRhuZn/8v+PPGq+jzyrv9B87T/P/Oz/z3ys/8+8bH7Qvu9/R3SgvABoTpDBaQ/AAWlQgMGpUEDB6Q/AACfNjs20Ybmg//a/kzztvov8Kv/PvS1/z7zt/868rb/O/Gz+z/7v/0d0oPwAaE7QwWkPgAFpUIDBqVBAwekPwAAoDc7M9KG5on/3v54+s36SfW5/zLys/8x8rf/MfG3/zDxtPsy+r/9GtGD8AKiOkMEpD4ABaVCAwalQQMHpD8AAKA3OzjShuaM/97+h/zS+oT80f9x+sr/WffD/071wP9K9Lz7Vv3M/SvTivABoTpDBaQ/AAWlQgMFpUEDBqQ/AAChNz0f0YDnXv/T/mj9zvto/tH/cP/X/3T/2P9u/tb/bfzV/Gn/4v0n1ZHzAKE4RQakPwAFpUIDBaVAAgWkPwAFpD4zBbVT2ATFavkHwmvsCsNw8gzDdfMMxHfzC8R49ArEd/AHx3r8Brde5gWkPTwFpEAABaVAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%22%3B%0A%20%20%20else%20%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20%22%u041D%u0435%u0442%20%u0432%u0438%u0434%u0435%u043E%20%u0434%u043B%u044F%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%0A%20%20%20%20%20%20%20%20img.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20%0A%7D%2C%20true%2C%20gBrowser.tabContainer%20%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bfilefactory.com%0Asendspace.com%0Ayoutube.com%0Ametacafe.com%0Abreak.com%0Adailymotion.com%0Avimeo.com%0Asevenload.com%0Amail.ru%0Asmotri.com%0Ayandex.ru%0Arambler.ru%0Atvigle.ru%0Aintv.ru%0Afacebook.com%0Alivejournal.com%0Avk.com%0Aodnoklassniki.ru%0Asoundcloud.com%0Aliveinternet.ru%0Aguitar-tube.com%0Agametrailers.com%0Atwitch.tv%0Azaycev.net%0A1tv.ru%0Arutv.ru%0Antv.ru%0Avesti.ru%0Amreporter.ru%0Akarusel-tv.ru%0Aautoplustv.ru%0Arussia.ru%0Aamik.ru%0Alife.ru%0Aa1tv.ru%0Akiwi.kz%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this._handleClick =()=> gBrowser.selectedTab = gBrowser.addTab('http://savefrom.net/?url=' + escape(content.location.href));


// Получаем из вкладки Справка массив с доменами закачку из которые подерживает savefrom ..............
var hosts = self.Help.split('\n').filter((host)=> /\S/.test(host)).map((host)=> host.trim());


// Если домен сайта совпадает с массивом меняем иконку и подсказку ..............
var [img] = document.getAnonymousNodes(self);
addEventListener("TabAttrModified", (e, tab = e.target)=> {
   if ( !tab.selected ) return;   
   
   if ( ~hosts.indexOf(content.document.domain.replace("www.", "")) ) 
        self.tooltipText = "Есть видео для загрузки",      
        img.src = "data:image/x-icon;base64,AAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFpUAABaVAAAWlQAAFpUAABaZBBQanQQAHoT4UAqtEtAGsRL0Foj0ZBqdBAAWmQQUFpUAABaVAAAWlQAAFpUAABaVAAAWlQAAFpUAABaVABQeoRQEFnzoQAqc+nS3olP8y7Jr/BapCqASeORQIqEUABaY/BQWlQAAFpUAABaVAAAWlQAAFpUAABaU/BAeoRAAGoDwQAKk/oTbllv+H/9z4jv/g+EToov8Eq0OrBKA6EweoRAAFpT8FBaVAAAWlQAAFpUAABaVAAwenQwAGoDwOAKk+oDzmmf+J/976fPrI/XX5wv6K/935Tuqo/wWrRKsEnzoTB6dEAAWlPwMFpUAABaVAAwanQwAHoT0PAKg9ojnlmf+J/9z4cvi8/Vz3qP9c9qj/YPWq/Xf/yPhE6aD/BKtEqwSgOxQHp0QABaVAAgWnQgAGoDwMAKg8oDPklf+H/9v4a/e4/VT2pP9b96r/W/er/1X2qP9X86X+X/62+SnmjP8AqUGpBqA6EAWnQgAGoTwGAKtCmS3mkv+B/9X5Zva0/k71o/9X9qv/Vvar/1X2q/9V9qv/Ufap/1Pzp/9V/LL7H+iK/wGsRqEFoTwJBadBtgXUbf8o8Jf/TfKk/0/2p/9R9qr/UfWr/1D1rP9Q9a3/T/Ws/0/1rP9O9q3/RPCl/yLulv8H1XL/BqdDwAWoQ3sGp0N2AKE4lxjScfRN/bH+UPSr/Ur0q/9M9a7/S/Wu/0r0rf9M9Kz9S/u3/hrUfvgAoTueBqdDdwWoQ34FpUECBaQ/AAGgOTkZznPiSfyz/0r0q/pG9K3/SPWw/0j1sP9F867/R/Ou+kf7uP0a0XzuAaA6QQWjPwAFpUIDBaVBBgakPwAAoDg8J9F+51P9vf5B8qr6QvOu/0P0sf9D9LH/QfOw/0Lzr/xE+7v9HNKA8QGhPEQFpD8ABaVCBwWlQQMFpEAAAJ83OzXRhuZn/8v+PPGq+jzyrv9B87T/P/Oz/z3ys/8+8bH7Qvu9/R3SgvABoTpDBaQ/AAWlQgMGpUEDB6Q/AACfNjs20Ybmg//a/kzztvov8Kv/PvS1/z7zt/868rb/O/Gz+z/7v/0d0oPwAaE7QwWkPgAFpUIDBqVBAwekPwAAoDc7M9KG5on/3v54+s36SfW5/zLys/8x8rf/MfG3/zDxtPsy+r/9GtGD8AKiOkMEpD4ABaVCAwalQQMHpD8AAKA3OzjShuaM/97+h/zS+oT80f9x+sr/WffD/071wP9K9Lz7Vv3M/SvTivABoTpDBaQ/AAWlQgMFpUEDBqQ/AAChNz0f0YDnXv/T/mj9zvto/tH/cP/X/3T/2P9u/tb/bfzV/Gn/4v0n1ZHzAKE4RQakPwAFpUIDBaVAAgWkPwAFpD4zBbVT2ATFavkHwmvsCsNw8gzDdfMMxHfzC8R49ArEd/AHx3r8Brde5gWkPTwFpEAABaVAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
   else 
        self.tooltipText = "Нет видео для загрузки",
        img.src = self.image;
        
}, true, gBrowser.tabContainer );

Anti Boss Key+ ( Firefox 3.6+ )
Сворачивает FF, удаляет все изображения на активной странице, удаляет иконку сайта и меняет названые на about:blank на активной вкладке, переключает FF на первую открытую вкладку. Изменить сочетание клавиш которые запускает Anti Boss Key можно в вкладке Настройки кнопки нажмите нужные нужные вам сочетание клавиш или одну клавишу, потом сохранит изменения.

ЛКМ => свернуть FF и спрятать активную вкладку
Ctrl + SPACE => свернуть FF и спрятать активную вкладку

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EAnti%20Boss%20Key+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAGABgBAAAFgAAACgAAAASAAAAJAAAAAEAGAAAAAAAOAQAAAAAAAAAAAAAAAAAAAAAAACqqqpGRkZNTU1MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLS0tQUFAoKCgAAOfn566urq+vr6ysrKysrKysrK2tra6urq6urq6urq6urq6urq6urq+vr62traysrLi4uExMTAAA4uLio6Ojra2tubm5tbW1tbW1tra2sbGxrq6ur6+vsLCwsbGxsLCwra2ts7Ozrq6ura2tSEhIAADi4uKqqqqRkZFSUlJjY2NdXV1LS0tNTU1ISEhGRkZDQ0M/Pz9ERERQUFBFRUWSkpK4uLhGRkYAAOHh4bCwsG5ubhYWFkRERAsLCwQEBBMTEwYGBgAAAAAAAAAAAAICAiMjIwUFBWtra76+vkVFRQAA4eHhsLCwb29vNzc3bm5uDg4ODQ0NCAgIAwMDBAQEBQUFBAQECgoKKysrBQUFZ2dnu7u7RUVFAADh4eGxsbFtbW09PT1+fn4EBAQAAAABAQEAAAAAAAAAAAAAAAAAAAAREREAAABdXV26urpFRUUAAOHh4bGxsWxsbD4+PpycnGBgYGRkZG1tbWdnZ2hoaGlpaWhoaGZmZjY2NgAAAFJSUrm5uUZGRgAA4eHhsbGxbW1tNTU1wMDAjY2NiYmJvb293Nzc3d3d1NTUsrKyrKysfX19AAAASkpKubm5RkZGAADh4eGxsbFvb28pKSnBwcFycnJ2dnbIyMjBwcGvr6/S0tLDw8OamppfX18AAABHR0e5ublGRkYAAOHh4bCwsHBwcCcnJ7a2tmtra4iIiLe3t4iIiLu7u6amptra2p+fn1BQUAAAAEhISLm5uUZGRgAA4eHhsbGxbGxsREREubm5aWlpZmZmxsbGqampu7u7vr6+ycnJkpKSSkpKAAAATExMuLi4RkZGAADh4eGxsbFubm4zMzPBwcFsbGxMTEx0dHSoqKi8vLyioqJ0dHRvb29HR0cODg5JSUm5ublGRkYAAOHh4bCwsHJycgAAALGxsXp6el5eXlxcXGxsbHx8fGlpaXh4eGBgYFBQUAYGBj8/P7q6ukVFRQAA4uLiq6urjIyMQ0NDoKCgd3d3k5OTjY2Nj4+PjY2Nl5eXpKSkdnZ2YGBgVFRUcXFxtLS0R0dHAADj4+OlpaWrq6uysrKsrKx+fn6FhYV7e3t3d3d6enp0dHRxcXFzc3OMjIy0tLStra2vr69KSkoAAOLi4qKioqWlpaOjo6WlpampqaWlpaampqioqKqqqqmpqaioqKioqKioqKOjo6Ojo62trT8/PwAA9fX14uLi4+Pj4+Pj4+Pj4uLi4+Pj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4+Pj4uLi6enppqamAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E2%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20%u0441%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20....%0AsetTimeout%28function%28%29%20%7B%20window.minimize%28%29%3B%20%7D%2C%200%29%3B%0A%0A//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20...%0Avar%20CurTab%20%3D%20document.getElementById%28%27content%27%29.selectedTab%3B%0ACurTab.removeAttribute%28%27image%27%29%3B%0ACurTab.setAttribute%28%22label%22%2C%22about%3Ablank%22%29%3B%0A%0A//%20%u0441%u043F%u0440%u044F%u0442%u0430%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20....%0Avar%20style%20%3D%20content.document.createElement%28%22style%22%29%3B%0A%20%20%20%20style.setAttribute%28%22type%22%2C%20%22text/css%22%29%3B%0A%20%20%20%20style.setAttribute%28%22id%22%2C%20%22hideImg%22%29%3B%0A%20%20%20%20style.innerHTML%20%3D%20%22img%2C%20embed%2C%20object%20%7B%20visibility%3A%20hidden%20%21important%3B%20%7D%20%22%20+%0A%20%20%20%20%20%20%22html%20*%20%7B%20background-image%3A%20none%20%21important%3B%20%7D%22%3B%0A%20%20%20%20var%20head%20%3D%20content.document.getElementsByTagName%28%22head%22%29%5B0%5D%3B%0A%20%20%20%20head.appendChild%28style%29%3B%0A%20%20%20%20%0A//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u0441%u044F%20%u043D%u0430%20%u043F%u0435%u0440%u0432%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20....%20%20%0AgBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5B0%5D%3B%20%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5BCtrl+%20%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

// свернуть ....
setTimeout(function() { window.minimize(); }, 0);

// переключить иконку и название текущей вкладки ...
var CurTab = document.getElementById('content').selectedTab;
CurTab.removeAttribute('image');
CurTab.setAttribute("label","about:blank");

// спрятать изображение на странице ....
var style = content.document.createElement("style");
    style.setAttribute("type", "text/css");
    style.setAttribute("id", "hideImg");
    style.innerHTML = "img, embed, object { visibility: hidden !important; } " +
      "html * { background-image: none !important; }";
    var head = content.document.getElementsByTagName("head")[0];
    head.appendChild(style);
    
// переключится на первую вкладку ....  
gBrowser.selectedTab = gBrowser.tabContainer.childNodes[0];

Save( Firefox 24 + ) от 07.03.2017.
Кнопка для сохранения веб-страниц и элементов веб-страниц, открывает меню из которого можно:
Сохранить закладку текущей страницы с ярлыком сайта, иконки для ярлыков хранятся в папке C:\Documents and Settings\Favicon\, можно сохранить ярлык страницы без запроса на сохранение в последнюю папку где сохранялся ярлык сайта,
Сохранить иконку сайта с диалогом сохранения,
Сохранить иконку сайта в буфере обмена как код base64.
Сохранить выделенную область страницы как PNG-изображение,
Сохранить выбранный элемент страницы как PNG-изображение,
Сохранить видимую область страницы как PNG-изображение,
Сохранить всю страницу как  PNG-изображение, если страница слишком большая то кнопка сохранит сколько возможно от страницы,
Сохранить страницу как PDF файл, через сервис pdfmyurl.com,
Добавить вверху страницы ссылку на её адрес и сохранить страницу через диалог сохранения,
Сохранить выделенный текст в текстовой txt файл, если текст не выделен сохранить весь текст на странице в txt файл,
Добавить в контекстного меню изображений новый пункт 'Запомнить изображение как base64',
Добавить в контекстного меню выделенного текста новый пункт 'Сохранить выделенный текст в файл', который позволяет сохранить выделенный текст в .txt файл на рабочем столе без запроса и с добавлением текста к тексту который уже был сохранен ранее,
Добавить в контекстного меню выделенного текста новый пункт 'Открыть выделенный текст в внешнем редакторе', который позволяет открыть выделенный текст из страницы или текстового поля в внешнем текстовом редакторе.

Скриншот меню кнопки:
http://i84.fastpic.ru/big/2016/1127/d2/13556733e69c7db6f99a662149ac61d2.png

ЛКМ => Открыть меню кнопки.
Код инициализации:

Выделить код

Код:

// Save, от 07.03.2017. .............

self.label = "Save";
self._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
self.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAADAgBEDRIXnwxQjKQNWp6pDFWXqAxXm6gMV5moDFeaqAxXmqgMV5qoDFebqAxVlqgNW5+pCkyIogwSFqgDAgBHDQoFhyszOv8hheP+IJH7/x+L8v8fjfb/H433/x+N9v8fjfb/H432/x+N9/8fi/L/IJH7/yGF5P0kLTTvDAcDgwgICIQ8Ojf/0czA+Oji1fzh18r85NzO/OTbz/zj287849vO/OPbzvzk3M/84dfK++ji1f3Sy8D5NDIvywYGB3kKCgqFQ0A8/+XXw/v979f/9uTO//rp0f/66NH/+ujR//rn0f/66NH/+ujR//bkzv/979f/5tfD/UZBPv8KCwqEDQwMhUVDQP/f08X7+OrZ/+zf0P/v5NP/8OPT/+/j0//v4tP/8OPT/+/j0//s39D/+OrZ/+DTxfxEQj//DAwMhA8PD4VKR0T/4dXG+/rr2v/v4tH/9OXU//Ll1P/z5dT/8+XU//Pl1P/05NT/7+DR//rr2v/i1cX7SkhE/w8PD4USEhKFT0xI/+XXxfv97tr/9ePR//no1P/459T/+OfU//jn1P/459T/+OfU//Xk0f/97tr/5dfF+09MSf8SEhGFFRQUhVNQTv/j2cv7+u/g//Hm2P/169v/9Orb//Tq2//06tv/9erb//br3P/x5tf/+e/g/+PZzPtTUU7/FBQUhRgXF4VXU1D/2828+/Lk0f/q2sf/7d3K/+3dyv/t3cr/7N3K/+rayP/r28n/69vI//Ll0v/azbv7VlNP/xgXF4UfHh6FTktJ/1JOTPtZVFL/Uk5L/1FNSv9RTUr/UU1K/1JPTP9YVVD/VVJP/09NSv9WUk//UU1L+05LSf8fHh2FIR8fhVVTUP9FQkD7UlBM/6Wlj/+4uJ7/sLCX/7S0mv+xsJn/oKCQ/6+vmv+hoYv/TEtH/0NCQPtVUk//IR8fhSMhIIVcWVb/SEVF+19dVv/f3sP////e//X10v///93/2di8/1lYWP+eno//5+fG/19dV/9JRkb7W1hV/yMhIYUkJCOFXltZ/0tJSPtdW1f/0NC4/+/u1P/h4cj/8PDV/7++q/8vLC7/e3lw/9fWv/9eXVf/TElJ+15bWf8lJCKEJSQjhF9cWf9LSUf5XVtX/tbVwf/5+OL/6enV//j54v/GxrX/QD0+/42Kgv/d3cr/YF5a/k5LSvlhXlv/JSUjhCkoKIZpZWT/VVJR/WNhXP/V1cT//f3s/+3t3v/8/Or/zc2//01LSf+VlIz/4eDS/2hmYv9YVVT8aWVj/ycmJoIaGRlYSEVE1DYzM8NKSUfP0dHG9/X16P/n59v+7e3g/+jo3f/X2M3+6uve/9bWzPdOTUvNOjg3y0RBQLwPDw8lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";


var pref = "CB.Shortcuts.pathToSaveShortcuts";
var faviconFolder = "C:\\Documents and Settings\\Favicon\\";   // папка для сохранения иконок для ярлыков и ярлыков сайтов
var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);


// Создать меню для кнопки .............
var array = [
   { label: "Сохранить значок веб-сайта", func: "saveFavicon()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg=="},
   { label: "Запомнить значок веб-сайта как base64", func: "copyFaviconData()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ=="},  
   { separator: ''},
   { label: "Сохранить ярлык страницы как…", func: "saveShortcuts('true')", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="},
   { label: "Сохранить ярлык страницы без запроса на сохранение", func: "saveShortcuts()", image: false},
   { separator: ''},
   { label: "Сохранить всю страницу как PNG", func: "WebScreenShot.captureAll()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить видимую часть страницы как PNG", func: "WebScreenShot.capturePage()", image: false},
   { label: "Сохранить выбранный элемент страницы как PNG", func: "WebScreenShotByClick.init()", image: "data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить выбранную область страницы как PNG", func: "WebScreenShotByClipping.init()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Сохранить всю страницу как PDF", func: "savePageToPDF()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUw4pJt3V/+Rb1D8lnFP/55zTf+VcVH/lXJS/5VyUv+VclL/lXJS/5VyUv+VclL/k3BR/J56Wv9cRzSkAAAAAJNvUKTto2L/4ppe/uehZf/Pmmr/noZv/9Scav/Wl17/1plh/9eZYf/XmWH/15lh/9eZYf/WmGD/2Jlg/suRXP9mRiuk8rWA/397dP1akKn/rqqi/3LF3f8Mntj/4dLJ///+9f/48u3/9e7n//bt5v/47+f/+O/n//jv5//rvZP/1ZJX/a9/VP9+lrD8AIvz/xOt+f8Douv/ALb6/wC28/9tmar/z8jJ//Lq5/////7//v////n9///6/P3//////+Ta0P/PjVP/pnpT/IWds/+aiXj/5efl/8Px//951/3/LMz//wCx8/8GltL/NIu3/4ycqf/l29L////+//n6+//8/v//3tXM/8+OVP+oe1P/6K57/86QWP/r6Ob////////++v/r9/z/oOb9/zDL//8Arf//AI/r/ydysv+hpqr//PTr///////d1Mz/0I5U/6h7U//osH//wo5g/+fm5P/7/f//9vf5//z7+////vv/9/r8/5Dc/P8Oqv7/AJf//wF02v9ffZ7/8Ojh/+Ha1P/NjFL/qHtT/+ewf//Ej1//7O3r///////+/v7//v7+//f5+v/6+vv////8/8Tq/f8hp/7/AJH//wB18/8/bqj/1MGu/9mXXv+leVH/569+/8iSYv+/tKn/wLew/8O5sf/P0M////////7+/v/3+fv////7/9Hv/v8hoP3/AIn//wB4/v84ZqL/w4NH/619VP/nsYD/x45c/9W5of/bv6j/0Jxt/6J/YP+spqD/2N3i//7////6+/3///76/8vr/v8Slv7/AIb+/wBz//83VH7/nW1B/+ewfv/Fjl7/7Ozr///////9+/r/9d7K/9Ghdv+jd1D/pJ6Y/+jt8f/9///////7/6fb/v8Ahv7/AYD//wRp6f95YlT/57B//8SOXv/n5uT//v7///r7/P/8/v////////XRsv/DhEv/loBu/9DX3P/9/v/////7/2O6/f8Afv//FnTU/5JtTf/nsH//xY9e/+jn5f/+/f//+fj5//n4+P/5+Pn/+/////Xbxf/Wj1D/nX1h/+Ll6P////7/3+/3/w+V//8tcbP/qHJB/+WuffzCjV7/5efn///////+/v7//////////////v7///////XRsP/TnW3/8fT3//////////z/ddD//0Nxl/+zdkH88LmH/9CRWP2+qJT/0M7N/8/Jxv/Pysf/z8rH/8/Kxv/Py8n/zsO6/7+pmP/PzMv/zsnG/9bNyP+nsK7/h4R3/b2BT/+Sb1Ck7qxw/9GSW/69hlb/wYhX/8CIV//AiFf/wIhX/8CIVv/BiVj/xI1d/8CIVv/BiFf/vYZW/9STW/7ppmv/bE80pAAAAACUd16k+sui/+7AmPzwwpr/8MKa//DCmv/wwpr/8MKa//DCmf/vwZj/8MKa//DCmv/uwJj8+cui/5N3XaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Добавить url и сохранить страницу", func: "savePage()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAyMjIzwyMjFeLi0tVS8vLlcuLy9XLS4uVywsLFUuLi5aKSkpUggICBMAAAAAAgICAQAAAAAAAAAAAAAAABQTEyOgoJ/yysvL/s3Pz/7Z293/4OPk/+bp6f/t7u7/5eXl/LOysv97e3vLFRUWJQAAAAACAgIDAAAAAAAAAAA8PDxSz9HT/83Qz/fLx8T8z7+5/M/AsPzez8n89e3r/PDx8fyusLL43dzc/52dndMWFhY2AAAAAAICAgIAAAAAODg5T8bEv/+9o476vIR1/7WDcv+uj3v/spCA/8Wqk//Gtab/rqyq/+Pk5fn19fX+np6e4BQUFCgAAAAAAAAAAC4uJU29oYj/wLao+tLDqf/Mv7P/yLik/7zEvP/F0cr/v62Y/6+Kef/Z2NP/6Ors+d3c3P97e3vNBAQEDgIDAAZhRCuYxaSb/8Gvqfu2inL/vIF0/7FmUv+ygG//waaX/8m8tP/CoIn/vqOF/9zg3//l5ef7ycnJ/zY2Nm0hFw08rGJD/6BlYf2mWUD/rW9g/7aNff+ZRyL/pmxR/7RyWv+qaEz/uYR0/69kSf/k1tD//////Ozs6/1iYmK4WTMck61mVv+Yemj8hjsg/51bQ/+wem//n084/6+pq/+3p6H/l0Ux/4lFOf+gWDr/zq2X//b7/fzo6Oj/YWBgsXpXSbnMsp//wNC8/I9jWv+WX1X/tn5w/7iKfv/Tzc7/ztXc/513bf+MSjH/rWJG/7iRd//o7Oz85OPl/2BgYLN1aFqu2tO+/7ejnvyohYD/ybGb/7q1ov/HwrX/7/Lr//T19v/Hzs3/p4V0/6hvW/+6gHf/4uDh/N3e3v9hYWC0dWNPuaVXRP6cfWv8w7Gz/8vHsv/U2dP/4OHf//b08//9/Pv/3drZ/7rBw/+0ppv/wZ2F/9zc3PzW1tj/ZWRktE1HPW2oa1f/lX1t/cTP0v/Ew8T/3Nvd/9LR0//W1tf/5OXl/+/t6v/i6vD/wK+i/8y2o//b3t/81NTU/2FhYbMMDAsPsZ2a1tDX2P++vL390c/P/+Dh4P/b29r/09PS/9rY1//6+Pf/8PP3/8Kqlf/c0sv/3N7g/NTU1P9iYmKyAAAAAEY6MmXozcP/5ezt+OHk6Pzt7Oz9+Pj4/urq6/zs7/T8+f///NXGsPzey8P87vDy/OXm5vnf39//ZWVlrgAAAAAGBQQQdFdHy8Wfhv/d18797e7w/+3t7P/y8u7/7N/G/7unff+/uqT/4+Tl/97d3v/c3Nz/sLCw+h8fH0IBAQABAAEBABEVFx8vJB1cWy8ciZNrU8itknHrkWdIxUsqFnEnJSBRMjQ3WS8uL1csLCtVMjIyXiIiIj4BAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},
   { label: "Сохранить выделенный текст как txt файл", func: "saveSelectionToTxt()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAQE6AAAAZAAAAGgAAAJmAAACZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAaQABAmYAAQEjAAAAADlVkOdVcKHxVXKi8kdklPJLZpfyU3Cg8lJvn/JRbZ7yUW+g8lFun/JRbp/yUG6e8lVyofFVdKjzLkV45wAAAFABAQEAaIzF/3y34v9wsuL/cJe0/0lpgv9bjLP/dLLh/2+v3v9sq9v/cK3d/3Gv3v9sqtv/b7Df/4G77P9VcqT2AAAAVAMDAQBnir/+ZqfU/pDB4/7a3uD+j46N/kxYXv6To6/+1er4/tXp+P7J3/D+1ej4/svg8v6Gut/9aqzd/lhxnvAAAABSAwIBAGaIvv9pptX/ocfj//f4/P/P0tX/g4CA/1xZWf+Woqr/2uz8/9Hl+f/W5fT/2Of3/5fC4v5tq93/Vm+e8QAAAFIDAgEAaYm+/3mw2/+iyeX/9Pn8/+z0+//IzNL/d3h5/0tMTv+Mkpn/xdvs/9Hp/f/O4PL/msXk/nmz4/9XcJ/xAAAAUgMDAQBti7//k7/h/6fL5v/v9fn/4u73/9Dk9P+8wMT/YGpx/zJJWv94iJf/ztzo/9Pp/P+ZwuD+gLfk/1dwnvEAAABSAwMBAHOPwf+myub/sNHp//j7/P/6/P3/8fr///r39P+sxdP/IXWq/xJJcv+NjZD/0+Lu/6TN7f6Ft+L/WXGf8QAAAFIDAwEAd5LD/7PR6/+ZxOP/0ePx/97r9f/Y5/L/3e32/8Tc7f9gseT/CHK3/zBYdv+HiY7/lL/f/pLE7/9bcJ3xAAAAUgMDAQB4k8P/xNvx/5/F5f+kyOX/qMrn/6TH5f+kyOX/sM/q/5e51P9Mm83/GHm3/xxIav9fdYf+pMvs/1x1pfIAAABTAwMBAHmSxf/O4/T/y9/y/8Hb9P/C3PX/wNv0/7vW7/+93ff/utDm/42fsf9Gjbn/EXS2/ytSbv6Fj5r/WnGc8gAAAFICAwEBepPE/tHk9f/S5PX/vMjV/7fCzP+3w8//uMPP/7XBzP+6ytf/qa+4/3h/hv9Ghaz/JoO+/jNXdP82PVnyAAAAVgACAgCBmcb/2+r3/dHh8fyPkpX/kI6N/5yam/+dnJ3/paWk/6enpf+sr6//mpSR/3Bubf9SjbD8H4C+/QsrSvcCAAB/AAAAA3yVx//j8///3u/7/52gpf6pqKf+uLm5/rq7u/7Ly8v+ycnI/paWlf6LjY/+np2f/Xh+g/5gnL7/MX+y/xcgJ80BAgNNN1OUs6W84fDA1O73mJyj/ainpv+2trb/t7e4/8fHyP/Fxsb/kZGQ/4eGhP+vucT/j6G+/W53k/NlkbnwNoOv/AgiNb8CCBsQDRo/YwsaO3B0d33arKyp9q2trfWvr6/2u7u79ru7vPawr7H1sbCt9nJ2gOQIGD6bFCFEYB0qPE1Bf6SpEz9cggAAAAMCAQEBAQAAADIyMmlDQ0ONQUFBhUFBQYVCQkGFQkJBhUhISIRNTU2OKysrZAEAAAUBAQAAAgEAAAkEAAEDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Запомнить изображение как base64, в контекстном меню", value: "CB.Save.WebScreenShotOnImage"},
   { label: "Сохранить выделенный текст в файл, в контекстном меню", value: "CB.Save.SelectionToFile" },
   { label: "Открыть выделенный текст в внешнем редакторе, в контекстном меню", value: "CB.Save.TextToEditor"},
];

var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((m,i)=> {
   if ("separator" in m) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute("class", "menuitem-iconic");
   if ("image" in m) mItem.setAttribute("image", m.image || array[i-1].image); 
   if ("value" in m) { 
       mItem.setAttribute('type', 'checkbox');
       mItem.setAttribute('checked', cbu.getPrefs(m.value) );
       mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));
       }
   if ("func" in m) mItem.addEventListener("command", ()=> eval(m.func.toString()));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");



// Сохранить как PNG страницу или части страницы .............
WebScreenShot = {
   capture: function(win, x, y, width, height) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = width;
      canvas.height = height;
      var ctx = canvas.getContext("2d");
      ((i = 17)=> { 
         try { ctx.drawWindow(win, x, y, canvas.width, canvas.height, "white") }
         catch(e) { canvas.height = canvas.width*i; arguments.callee(--i) };
      })();
      var url = makeURI(canvas.toDataURL("image/png"));
      
      var fp = window.makeFilePicker();
      fp.init(window, "Сохранить как…", fp.modeSave);
      fp.appendFilter("", "*.png");
      fp.defaultString = getTabLabel() + "  " + (new Date().toLocaleFormat("%d.%m.%Y. %H:%M:%S")) + ".png";
      if (fp.show() == fp.returnCancel || !fp.file) return;
      
      var wbp = window.makeWebBrowserPersist();
      parseInt(Services.appinfo.version) < 36
      ? wbp.saveURI(url, null, null, null, null, fp.file, null)
      : wbp.saveURI(url, null, null, null, null, null, fp.file, null); // если FF36+
   },
   captureAll: function() {
      var win = content;
      WebScreenShot.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY);
   },
   capturePage: function() {
      var win = content, doc = win.document, body = doc.body, html = doc.documentElement;
      var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft;
      var scrY = (body.scrollTop || html.scrollTop) - html.clientTop;
      WebScreenShot.capture(win, scrX, scrY, win.innerWidth, win.innerHeight);
   },
   onImage: function(image) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = image.naturalWidth;
      canvas.height = image.naturalHeight;
      var ctx = canvas.getContext('2d');
      ctx.drawImage(image, 0, 0);
      var base64 = canvas.toDataURL();
      gClipboard.write(base64);
   
      // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
      
      alertsService.showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> { 
         if (t == 'alertfinished')
             sss.unregisterSheet(uri, 0); // удалить стиль когда подсказка закрывается
      }, "");
   }
};

// Сохранить выбранную область страницы как PNG ....
WebScreenShotByClipping = {
   capture: WebScreenShot.capture,
   handleEvent: function(e) {
      if (e.button) return false;
          e.preventDefault();
          e.stopPropagation();
          switch(e.type){
                 case 'mousedown':
                    this.downX = e.pageX;
                    this.downY = e.pageY;
                    this.bs.left = this.downX + 'px';
                    this.bs.top = this.downY + 'px';
                    this.body.appendChild(this.box);
                    this.flag = true;
                    break;
                 case 'mousemove':
                    if (!this.flag) return;
                    this.moveX = e.pageX;
                    this.moveY = e.pageY;
                    if (this.downX > this.moveX) this.bs.left = this.moveX + 'px';
                    if (this.downY > this.moveY) this.bs.top  = this.moveY + 'px';
                    this.bs.width = Math.abs(this.moveX - this.downX) + 'px';
                    this.bs.height = Math.abs(this.moveY - this.downY) + 'px';
                    break;
                 case 'mouseup':
                    this.uninit();
                    break;
          }
   },
   init: function() {
      this.win = document.commandDispatcher.focusedWindow;
      if (this.win == window) this.win = content;
      this.doc = this.win.document;
      this.body = this.doc.body;
      if (!this.body instanceof HTMLBodyElement){
          alertsService.showAlertNotification(self.image, self.label, "Не удается захватить!");
          return false;
          }
      this.flag = null;
      this.box = this.doc.createElement('div');
      this.bs = this.box.style;
      this.bs.border = '#0f0 dashed 2px';
      this.bs.position = 'absolute';
      this.bs.zIndex = '2147483647';
      this.defaultCursor = getComputedStyle(this.body, '').cursor;
      this.body.style.cursor = 'crosshair';
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)];
      this.body.style.cursor = this.defaultCursor;
      this.body.removeChild(this.box);
      this.capture.apply(this, pos);
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};

// Сохранить выбранный элемент на странице как PNG ....
WebScreenShotByClick = {
   capture: WebScreenShot.capture,
   getPosition: function() {
      var html = this.doc.documentElement;
      var body = this.doc.body;
      var rect = this.target.getBoundingClientRect();
      return [
              this.win
             ,Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft
             ,Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop
             ,parseInt(rect.width)
             ,parseInt(rect.height)
          ];
   },
   highlight: function() {
      this.orgStyle = this.target.hasAttribute('style') ? this.target.style.cssText : false;
      this.target.style.cssText += 'outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;';
   },
   lowlight: function(e) {
      if (this.orgStyle) this.target.style.cssText = this.orgStyle;
      else this.target.removeAttribute('style'); 
   },
   handleEvent: function(e) {
      switch(e.type){
             case 'click':
                if (e.button) return;
                e.preventDefault();
                e.stopPropagation();
                this.lowlight();
                this.capture.apply(this, this.getPosition());
                this.uninit();
                break;
             case 'mouseover':
                if (this.target) this.lowlight();
                this.target = e.target;
                this.highlight();
                break;
      }
   },
   init: function() {
      this.win = content;
      this.doc = content.document;
      ["click", "mouseover"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      this.target = false;
      ["click", "mouseover"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};


// Сохранить страницу как PDF файл через сервис 'pdfmyurl.com' .............
function savePageToPDF(loc = content.location) {
   loc.href.startsWith("http") && loadURI("http://pdfmyurl.com?url=" + loc);
}; 

 
// Сохранить ярлык страницы в указанную папку или в последнюю папку сохранения ..............
function saveShortcuts(saveAs, shortcutName) {
   var url = content.document.location;
   cbu.isPref(pref, "C:\\");
  
   // блокируем создание ярлыков для внутренних страниц FF
   if ( ["about:", "chrome:", "jar:", "data:"].indexOf(url.protocol) !== -1 ) {   
         alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label, "Не поддерживается");
         return;
         }          
   
   // получить название ярлыка 
   if ( saveAs ) shortcutName = setPathToShortcut(shortcutName)
   else 
        shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();
   if ( saveAs && shortcutName == false ) return;
   
   // сохранить иконку таба в установленную папку
   var faviconName = "favicon" + Date.now();
   var favicon = saveFaviconToFolder(faviconName);
 
   // получить путь для сохранения ярлыка из 'about:config' 
   var pathToFolder = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var pathToShortcut = pathToFolder + shortcutName + ".url";
       
   // адрес страницы в UTF-8 если это протокол 'file' или в 'Punycode' если это .рф домен
   if ( url.protocol == 'file:' ) url = convertFromUnicode("UTF-8", url);   
   if ( url.host.slice(-3) == '.рф') url = Services.io.newURI(url, null, null).asciiSpec;
     
   // текст ярлыка из адреса страницы и пути к иконке таба    
   var text = "[InternetShortcut]" + "\r\n" + "URL=" + url;
   var pathToFavicon = "IconFile=" + faviconFolder + faviconName + ".ico" + "\r\n";
   if ( favicon == false ) var pathToFavicon = "";
   var data = text + "\r\n" + pathToFavicon + "IconIndex=0";      

   // записать текст в ярлык
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.initWithPath(pathToShortcut);
   foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(data, data.length);
   foStream.close();

   // подсказка
   var notification = 'Сохранил в: ' + pathToFolder;
   var image = (favicon == false) ? self.image : gBrowser.selectedBrowser.mIconURL;
   alertsService.showAlertNotification(image, shortcutName, notification);
};


// Установка пути и названия для сохранения ярлыка через диалог сохранения, отмена отдаст 'false' ..............
function setPathToShortcut(shortcutName) {     
   var pathToFile = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();

   // диалог создания и установки пути    
   var fp = window.makeFilePicker();
   fp.init(window, "Укажите где сохранить ярлык страницы!", fp.modeSave);
   fp.appendFilters(fp.filterAll);
   fp.defaultString = shortcutName;
     
   if ( fp.show() == fp.returnCancel ) return false;          
     
   // убрать название файла из пути к файлу и записать путь в 'about:config'
   var filePath = fp.file.path.toString();
   var fileName = fp.file.leafName.toString();
   cbu.setPrefs(pref, convertFromUnicode("UTF-8", filePath.replace(fileName, "")) );      
   return fileName;
};


// Сохранить в указанную папку иконку таба как .ico и без диалога сохранения ..............
function saveFaviconToFolder(faviconName) {
   var url = gBrowser.mCurrentTab.image.replace("#-moz-resolution=16,16","");
   if ( !url || content.document.mozSyntheticDocument ) return false;
   if ( url.startsWith("http") ) url = "moz-anno:favicon:" + url;

   var img = new Image();
   img.onload = function() {
       var tools = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
       var stream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
       var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);

       var request = img.QueryInterface(Ci.nsIImageLoadingContent).getRequest(img.CURRENT_REQUEST);
       var istrm = tools.encodeImage(request.image, "image/vnd.microsoft.icon", "format=bmp;bpp=32");
       stream.init(istrm);
       var data = stream.readBytes(stream.available());
       istrm.close(); stream.close();

       var path = faviconFolder + faviconName + ".ico";
       file.initWithPath(path);
       file.exists() && file.remove(false);
       try { file.create(file.NORMAL_FILE_TYPE, 448) } 
       catch(e) {
          setTimeout(()=> {  
             alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label,
             "Не могу сохранить иконку вкладки в " + faviconFolder + "\n" + "Укажите в начале кода кнопки другой диск!");
          }, 2500);
       };
       cbu.writeFile(path, data);
   }
   img.setAttribute("src", url);
};


// Добавить адрес наверху страницы и открыть диалог сохранения страницы .............
function savePage() {
   var sURL = gURLBar.value;
   content.document.body.innerHTML = "<table width=100%><tr><td align=left><small><a target=_blank href=" + 
                                        sURL + ">"+ sURL + "</a></small>\n</td></tr></table>" + content.document.body.innerHTML;
   saveDocument(window.content.document);
};


// Сохранить иконку текущего сайта с диалогом сохранения .............
function saveFavicon() { saveImageURL(gBrowser.mCurrentTab.image, "save", null, false, false, null, content.document) };


// Скопировать иконку текущего сайта как base64 код .............
function copyFaviconData() {
   var img = new Image();
   img.src = gBrowser.mCurrentTab.image;
   WebScreenShot.onImage(img);
};


// Сохранить выделенный текст или весь текст на странице как txt файл .............
function saveSelectionToTxt() {
   var sel = getSelect();
   !sel && document.getElementById("cmd_selectAll").doCommand(); 
     
   // создать название файла из заголовка страницы и текущего времени и сохранить текст ....
   var fileTitle = getTabLabel() + '  ' + (new Date()).toLocaleFormat("%H·%M·%S");
   saveURL("data:text/plain," + encodeURIComponent(content.location + ("\r\n\r\n" + sel)), 
                                fileTitle + ".txt", null, false, false, null, content.document);
   !sel && goDoCommand("cmd_selectNone"); 
};

 
// Добавляем в контекстного меню страницы новые пункты .............
((contextMenu, el)=> {
   // в контекстного меню изображений ....
   var baseItem = contextMenu.appendChild(document.createElement("menuitem"));
   baseItem.id = "content-baseItem";
   baseItem.setAttribute("label", "Запомнить изображение как base64");
   baseItem.onclick =()=> WebScreenShot.onImage(gContextMenu.target);

   // в контекстного меню выделенного текста ....
   var saveItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   saveItem.id = "content-saveItem";
   saveItem.setAttribute("label", "Сохранить выделенный текст в файл");
   saveItem.onclick =()=> saveSelectionToFile();

   var editorItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   editorItem.id = "content-editorItem";
   editorItem.setAttribute("label", "Открыть выделенный текст в внешнем редакторе");
   editorItem.onclick =()=> textToEditor();

   // устанавливаем где и при каких настройках показывать новые пункты ....
   addEventListener('popupshowing', e=> {
      if (e.target != e.currentTarget) return;
      var sel = gContextMenu.isTextSelected;
      saveItem.hidden = !sel || !cbu.getPrefs("CB.Save.SelectionToFile");
      editorItem.hidden = !sel || !cbu.getPrefs("CB.Save.TextToEditor"); 
      baseItem.hidden =  !gContextMenu.onImage || !cbu.getPrefs("CB.Save.WebScreenShotOnImage"); 
   }, false, contextMenu);

   // удалять новые пункти при изминениях ....
   addDestructor(()=> {
      baseItem.remove(); saveItem.remove(); editorItem.remove();
   });   
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"));


// Сохранить выделенный текст в файл на рабочем столе .............
function saveSelectionToFile() {
   // создать текст для записи
   var url = content.document.location;
   if (/\.рф/.test(url.host)) url = convertFromUnicode("UTF-8", url);
   
   var time = new Date().toLocaleFormat("%H:%M:%S");
   var text = convertFromUnicode("UTF-8", getSelect()); 
   var title = convertFromUnicode("UTF-8", getTabLabel());
   
   var text = "..............................................................\n"
            + title + " - " + time + "\n" + url + "\n\n" + text + "\n\n\n";
   var text = text.replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");

   // путь к файлу и название файла
   var file = Services.dirsvc.get("Desk", Ci.nsIFile); 
   file.append("Save - " + (new Date()).toLocaleFormat("%d.%m.%Y") + ".txt");
          
   // создать файл с текстом или добавлять текст в файл
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.exists() ? foStream.init(file, 0x02 | 0x10, 0664, 0) : foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();

   // всплывающая подсказка дает возможность открыть файл если кликнуть на подсказке
   var notification = 'Сохранил выделенный текст в файл на рабочий стол'; 
   var image = gBrowser.mCurrentTab.image || self.image;
   alertsService.showAlertNotification(image, notification, "Кликни чтобы открыть файл", true, "", (s, t)=> { 
      if (t == 'alertclickcallback') file.launch();
   }, "");
};


// Создать текстовой файл с выделенным текстом в папке профиля и открыть в редакторе .............
function textToEditor() {
   var text = convertFromUnicode("UTF-16", getSelect()); 
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.append("TextToEditor.txt");
   custombuttonsUtils.writeFile(file.path, text);
   file.launch(); 
};


// Конвертировать текст в юникод .............
function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};


// Получить название домена с заглавным первым символом и без приставок( типа .ru и .com ) ..............
function getSiteName() {
   try { var domain = content.document.domain.split('.') } catch(e) { return "" };
   domain = (domain.length == 2) ? domain[0] : domain[1]
   return domain[0].toUpperCase() + domain.slice(1).split('.')[0] + " ";  
};


// Получить название вкладки без не сохраняемых символов и лишних пробелов ..............
function getTabLabel() { 
   var label = gBrowser.mCurrentTab.label;      
   var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   return label.substring(0, 50);
};

    
// Получить выделенный текст из страницы или 'false' ..............
function getSelect() {
   var el = document.commandDispatcher.focusedElement;
   try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {};
   var sel = document.commandDispatcher.focusedWindow.getSelection();
   return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"").replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");
};


Установка кнопки: устанавливаем расширение Сustom Buttons, создаём новую кнопку, откроется окно диалога добавления кнопки, копируем в вкладку Инициализация код инициализации и нажимаем Ok, потом откроется сообщение о успешном создании кнопки, опять нажимаем Ok. Потом открываем настройку панелей инструментов, перетаскиваем кнопку в нужное место на панели и начинаем пользоваться кнопкой.

Большое спасибо Dumby за помощь с кнопкой.

Открыть внешние win приложения( Firefox24+ )от 12.12.2015.
Кнопка открывает меню с Windows приложениями и даёт возможность их запустить. В меню кнопки легко добавить для запуска другие win приложения или в системе установленные программы.

Меню кнопки:
http://i64.fastpic.ru/big/2014/0530/6a/09943b704b0c3c010a984bd3fae6c16a.jpg

ЛКМ => Показать меню.
Код кнопки и код для инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u043D%u0435%u0448%u043D%u0438%u0435%20win%20%u043F%u0440%u0438%u043B%u043E%u0436%u0435%u043D%u0438%u044F%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMAAwQAKCImDyo4IWkYaBzFQ6xI8FG/V/VCq0jcGGQbkwAQACQAAAAAAAIAAwAAAAAAAAAAAAAAAAEAAAIAAgIAQy4iYp9YOuZUah3/QMJQ/nfxgP97+Yb/f/+L/m/7ev87v0L1BzwIawAAAAAAAgADAAAAAAEAAAIAAAAAQR4Ki7pwNP//tG79aXQg/CGwM/tL3lP+SeJU/krmVf5I5lT8ROZQ/SjIMf8DQgWFAAAAAAACAAMAAAAAMRoKX5hKHP/qoVT69JtU/WVsGP8RmyP/LMAz/ynHM/4ozTP8Jc4w+x/KK/sbxyn7Daoa/wAlA1QAAAEAAgAAA2o5G9GhVyT/z305/N54Nv9eWxTyAnMR6Qp+DvsIig//CpQR/wucE/8KnQ//CpkG/QedAf8FZADWAwIACigYIklrMln7h0VB/6dcJPvBaCz/XC8RlgABAAACDgAlABUANAAfAUsAKABeAz8RlAhfUvkDZnP/CFtw+gcXKklSLEeVlUiB/6VamPykYGD7o1wl/2A4H5YAAAAAAgEBBAAAAAAAAQMEAAAAAAUoVmcHcfT/AIL5+QCK//8BOZ2rXjJRsJtOhf/SgLr9zoK++5hbW/9AKhaGAAAAAAICAQYAAQACAAMDBwAAAAABLlprD4///wqh9/oJsf//Al7M1FsxT6ucUYf/1Iq//Oyd1vzYkMf/X0FVhQAAAAADAgMEAAAAAAACBAQBAAAAAC1aYRSQ//8lpPr6Irj//wtt1t5GJT2DmlCF/82Juvz2reH/8Kbb/eej1P9jR1t+AAAAAAMCAwQBAwUGAAAAAAYkV2wjkv//PLP7+jzE//8VaMXMHhAaP5FLff+4d6b++rno//iz5P/3suP88rLg/2hPYn8AAAAAAQAAAAgPYW1bXeD/PJL0/1DB/fxSy///EkiRlwAAAABqOFzBp16S/+ev2Pz/we///b7s//u86vr7wev/dFxfcgAJYmhxeP//lJH+/juS+/5q0f/+V7n4/AASODwAAAAAHA4YP5NMgP+6fKj9/Mzw/f3H8/7/y/X/7LvU811Ywd54gPv8r6z//puZ/P1Akff5g+L//y5hmZ8AAAAAAgECAwAAAAA1Gy5vmlGG/8iOuP3/1vX/8sfe811YxNZ6g/f5ubb9/a6u+/uvrfz8TZPt/1GFvMcAAQwNAQAAAAAAAAACAQEDAAAAACoVJVh/QW3umWuP7V5fzeSMk/j9zcn//7+//v7Av///o6Pz+yU2XH0AAwYKAQAAAAAAAQEAAAAAAAAAAAEBAQMAAAAADwkHFAcCKUsJGb3VO0vn9lRf5/RdZMzXRkmTmw4OKTUAAAAAAgIDAwABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%22IE%22%2C%20%22c%3A%5C%5CProgram%20files%5C%5CInternet%20Explorer%5C%5Ciexplore.exe%22%5D%2C%0A%20%20%20%5B%22Explorer%22%2C%20%22c%3A%5C%5Cwindows%5C%5Cexplorer.exe%22%5D%2C%0A%20%20%20%5B%22separator%22%5D%2C%0A%20%20%20%5B%22Cmd%20Prompt%22%2C%20%22C%3A%5C%5Cwindows/system32%5C%5Ccmd.exe%22%5D%2C%0A%20%20%20%5B%22Media%20Player%22%2C%20%22C%3A%5C%5CProgram%20Files%5C%5CWindows%20Media%20Player%5C%5Cwmplayer.exe%22%5D%2C%0A%20%20%20%5B%22Task%20Manager%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ctaskmgr.exe%22%5D%2C%20%0A%20%20%20%5B%22Control%20Panel%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccontrol.exe%22%5D%2C%0A%20%20%20%5B%22separator%22%5D%2C%0A%20%20%20%5B%22Notepad%22%2C%20%22c%3A%5C%5Cwindows%5C%5Cnotepad.exe%22%5D%2C%0A%20%20%20%5B%22Calculator%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccalc.exe%22%5D%2C%0A%20%20%20%5B%22Virtual%20Keyboard%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5COSK.exe%22%5D%2C%0A%20%20%20%5B%22Character%20table%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccharmap.exe%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0Avar%20menuPopup%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%0Aarray.forEach%28%28m%29%3D%3E%20%7B%0A%20%20%20if%20%28m%20%3D%3D%20%22separator%22%29%20%7B%20menuPopup.appendChild%28%20document.createElement%28%22menuseparator%22%29%20%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%20%20%20%20%20%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20m%5B1%5D%29%3B%0A%20%20%20mItem.onclick%20%3De%3D%3E%20Components.Constructor%28%22@mozilla.org/file/local%3B1%22%2C%20%22nsIFile%22%2C%20%22initWithPath%22%29%28m%5B1%5D%29.launch%28%29%3B%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");

var array = [
   ["IE", "c:\\Program files\\Internet Explorer\\iexplore.exe"],
   ["Explorer", "c:\\windows\\explorer.exe"],
   ["separator"],
   ["Cmd Prompt", "C:\\windows/system32\\cmd.exe"],
   ["Media Player", "C:\\Program Files\\Windows Media Player\\wmplayer.exe"],
   ["Task Manager", "C:\\windows\\system32\\taskmgr.exe"], 
   ["Control Panel", "C:\\windows\\system32\\control.exe"],
   ["separator"],
   ["Notepad", "c:\\windows\\notepad.exe"],
   ["Calculator", "C:\\windows\\system32\\calc.exe"],
   ["Virtual Keyboard", "C:\\windows\\system32\\OSK.exe"],
   ["Character table", "C:\\windows\\system32\\charmap.exe"]
            ];
            
var menuPopup = self.appendChild( document.createElement("menupopup") );
array.forEach((m)=> {
   if (m == "separator") { menuPopup.appendChild( document.createElement("menuseparator") ); return };
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m[0]);     
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.setAttribute("image", "moz-icon://file://" + m[1]);
   mItem.onclick =e=> Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(m[1]).launch();
   menuPopup.appendChild(mItem);
});

Панель поиска на сайте(Firefox3.6-5.0)
Открывает панель с кнопками "Поиск Google на сайте","Поиск Yandex на сайте","Поиск Bing на сайте","Поиск BugMeNot - логины,пароли для сайта","Информация о браузере и открытой странице","Leader-When security matters-Информация о сайте ","Leader-When security matters-Информация об IP адресе"
В кнопке использованы фрагменты кода Lex1, Anton, Infocatcher

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043D%u0435%u043B%u044C%20%u043F%u043E%u0438%u0441%u043A%u0430%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAmBJREFUeJx9k09IVGEUxc/33pvJMZ2mxiCY2WolFANjQtDCKIIIQcOVtBDatTJo5aIyENoUroKEtrr0rXLTnxFbhIwyGg3+KZiccRQsnfHNjPNm3r23hfScl9HZfd/9nXsuF64SETTq4teBy37lG9VF69KhRYkJNtdyNteTNteeZOMzy428amwQSw9O60rr27C3sUcWCAQA0KGhBQGEJYg6O+ZG90y/p8Gj3HjTrLW4/tMpRDO1PP6nMLUiQP5cpHym/fPNqaoBAO/256eKVHLNfaEexJo7EAucR6aWh1lIIGEtAAB+6RZC3Bz93rQ9BaBfdaXvXWHI/GJlxU2RePJY8vjWJB7mX7rvtnILmLlbq3JtbMPe9sBP8xOIJQYQensV5tYHAMBQWy9QcFym5K+irmhMC6gTnXtkeRqMbk1gyfmGYshGitcBAIW6BZTIZWyDoOrSaYhI5M+2PTptYCjci+Fzg4dTrbwCtKOyKAETRwzif5gBfOx4jZ7WOFLlVQwvPcfsThII6h6GhKE5TJt6Y+u/ZGbfY3ZvAQj7gKDh/isBiGnTKHEl3YJApIiyxzicfYFQKYBMMQc0a0DAG6KqABmc1nysj4QleCw51TmJRPcbDF24C5zUj9U1i8B1GtFW42ayzo4ZplYPkLAWkNhNIrOTBXYdr3mfQWCT7ywnlYjgxtz9pjUjt15SB9GCr3JEFhygLoBPASHDNUuFcvLjoF0erFU9x3T20/VpsPSV/FXYBkGUuAtT1cOxCWzy7SXvMTXq1Ny1SyB5JiRd4nCUhEGgHClOspLHfCv1pZH/DQCsPJc3oUS/AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E/*Initialization%20Code*/%0Avar%20menu%20%3D%20%26lt%3Bpanel%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%26gt%3B%0A%20%20%20%20%20%20%20%20%26lt%3Bvbox%26gt%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Google%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVQokTWSTWhcVRhAz3fvfW/ezGQmba0ZTJvEWtNKk53UCKViNkFREH/AlSBSCqWopYtSV1oUGnGjKwV1qehGK6RgQbAFhXaitsEumhaTFtMxGWeSJp1M8mbevZ+L4OpsD5wjZyc/GnfOfdPTU+wT48gnFuNy5DLPjuo1CvN3CUkOVEEAlGwz2xCRY05VzxfscH6g8BzNWmD8RRjYZ9B/akiyDod3QW8R4giNLOI9t76u5u/cqH3qCsU4//jIBG8/m/LQkHB9Gt76UOjfW8EXK7iZKlQCOEEiC6IMjz/K/J+380YE9o56Boc9WddTm/dcPJdisKz1OO7YBWp2iUVZYiVdorPcgL/vkbbaOJ9BaZvy8vHA52eU5Vml3XYA/Dy0wIWdN+lLWkRB6FuN2b0Y8XAtxjTbuCyD5mLglaNKlAvc+MNw6PnAleaPXK5fIMoMnVaLzAjzFm4OBrp7lP7KGi7dgMnjKS8cEZ6cgJfe6GW6fpEz0yewtks52s59SYmMxWJBFRXl+0MpThXOTXWZmkp5/ajh1MeWZONB9uRHmVn+lSyyGBGc2SIKQQLBKg71HBzNmHi1zMhYCY0D+7Y/xsl4knevHmP630s8kOwEAbMVGi8BDQkuX0p457MEE/9E9941fvkuorL/GUb2j/Ha0Jvcbs5RX71LziaoBgBUlJgc9uBu3ht7qpcw9z7b5HeKoUqjNkdLdvHEIxPM1me4UvuNgknIMk/wSvDgGgVc868qpUaH/h0NolwRkTzJwiVW6geIDhwmUodPQSPQoKCAKABOg2qhdV02M8OGriPGUA6r2GSVzS74boZ2IKQQtqz/X1xNIJYvv+3g11qEtRa+U6Y9+AGFgRN8dfkTzs/+QK/JkaVdtKNoR4mWSoiKyJGnB0+L+rPi2yoiomKx5FkuOq6WV1g3GYmLEStYa3HWqjFOrDVf/AddhjkVPuJ3DwAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5Bjavascript%3Avoid%28str%3Dprompt%28%27%u041F%u043E%u0438%u0441%u043A%20%u0441%20%u043F%u043E%u043C%u043E%u0449%u044C%u044E%20Google%20%u043D%u0430%20%u044D%u0442%u043E%u043C%20%u0441%u0430%u0439%u0442%u0435%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.google.com/search%3Fas_q%3D%27+str+%27%26amp%3Bamp%3Bas_sitesearch%3D%27+document.domain%29%29%3B%7D%5D%5D%26gt%3B%3B%26amp%3B%23xA%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Yandex%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEwEgIKwpdqAAAAKSSURBVDjLjZFPaBx1FMc/MztFQ2sUSUi7JUJ2kw0psmCgUEFP3nsVpYd6EduDt4g2khaxCHrsIYVKD2m0N+kp17IQBmwyWUYsdC8ZZnelhnVlM3Tnz77Z3/PQTWyqh3zh8ePxee/x3vdn+b6/DHzLxsaGDk6dUnzfV1XFnogims2m4rqu5uu3VD+6oEmSqBOGIa999hUAf9RqWL7vKyNVq1WLLMt08HhHsyxT13XfIwxD3b90ScMw1Eajodb29vZhC2DheZ4aY/4TOzs7aozBjqKIOI6x3p55/p57iziOqVQqeJ6nTq/Xo9VqYd2+xytLS+y3e0StFgDtdvtna21t7WmpVDrNS9rd3f26VCrdtHzfbwNnX+Kr1Wr1KgD/t2Capup53uvGGGwRQURg+RPML3cRESzLwhjTExEcEQFAL1wEEfJRvrCwgOu6nzrdbheAyZVvMBMTdM+/e7hIkiRXnDiOAfi70yG9fBkZ5VEUMTMz847T7/exHz0iuXYNsgzT7x+c+cPc3BxWrVbTQqFw5Ma9vT2mpqYsAOr1enswGOhxFASB1uv1L1WVg3BE5Kxt2wyHw+fjJcN+cAfr8a/Q/RPGTjL8/gEA09PTFAqF77a2tt5cXFz8AsBO05QDL0UE+8MPyMemSJfvIhc/h/ruET45OUmxWFxyXfcnEcHOsuxIgXk2hm7/jogw/OsZ/Pb0CBcRxsfHqVQqH29ubtadJEnodDr/OnTnR169f5+TxSLJmTNkmdB9kY8UBAFJkqw6WZbRH1kPcGJlhfzJE7q1GoWHDzlx4wbpC9wYQxAE5Hn+/vz8/Ka1vr6u5XKZ4yjPc5rNJqr6Rrlc3gdw8jy/3mg0rgCnjzFjdXZ29ipw+Gv/AGlK32Dj9T2iAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%25D0%259F%25D0%25BE%25D0%25B8%25D1%2581%25D0%25BA%2520%25D1%2581%2520%25D0%25BF%25D0%25BE%25D0%25BC%25D0%25BE%25D1%2589%25D1%258C%25D1%258E%2520Yandex%2520%25D0%25BD%25D0%25B0%2520%25D1%258D%25D1%2582%25D0%25BE%25D0%25BC%2520%25D1%2581%25D0%25B0%25D0%25B9%25D1%2582%25D0%25B5%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.yandex.ru/yandsearch%3Frpt%3Drad%26amp%3Bamp%3Btext%3D%27+str+%27%26amp%3Bamp%3Bserverurl%3D%27+document.domain%29%29%3B%7D%26amp%3B%23xA%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Bing%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAAB50lEQVQokY3TP2xNYRzG8c855173ttrS1t9GakCFVBASg0TCIrGI2UBiMBoMJoOJVSIWk4FVIhESkfg7+DOIQQkGrTSlbVT1323PPa/hvbdak2d6T875Pu/7e97nJOH22kDwV4n/VQmEJXCyFE4sN/4XTjI2HaWyhl8fGH1FViXkhKLhkUWjUCwzK0nL7L5IRx+fbzL4gHILSUqpSlGQT8ZDZG1k5UXTEoGFKRQUC3TtoGtPNGvpoT7D5Cd+DTD5hdoYpbYlMycZUjYcYuNh2rcw+53aKFkrrT0kJb7e4ctNRp6QVhpwc46OvrjDy3N8f8rsOOVWVu9k62k2n6DnCC/OMvJYGtlGMNODPDvFwHWmBinmqI3z7T7Pz/DtHpVu9l+m1NqE8whPvOfHa1b2kpZjaElKdR3FPEN3mZ+gYxtJJlXkTH6OcLmdSif5b9IVDbiMOvkUXXvjNw2l6nN8vBGfuvdx4Go82tQQ8z+ZGSav0X+eLSdjuG8vkU9Lwq3uIORsOsauC3TtZnqIsTfM/mDFKjr7WbU9bvDuCgPXCHVJuL02CCHOtLKX9QfZfJz2PsJCvKqZIYYfMfwwtlBA2oCbqtcazWojq8Q1FDXymfi+mcViSZrKqrFp9ekY2uL/0Ug9a1nW7T+z2Kt7++dAvwAAAABJRU5ErkJggg%3D%3D%22%20%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%u041F%u043E%u0438%u0441%u043A%20%u0441%20%u043F%u043E%u043C%u043E%u0449%u044C%u044E%20Bing%20%u043D%u0430%20%u044D%u0442%u043E%u043C%20%u0441%u0430%u0439%u0442%u0435%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.bing.com/search%3Fq%3Dsite%3A%27+document.location.hostname+%20%27+%27%20+str+%27%26amp%3Bamp%3Bgo%3D%26amp%3Bamp%3Bform%3DQBRE%26amp%3Bamp%3Bfilt%3Dall%27%29%29%3B%7D%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20BugMeNot%20%u043B%u043E%u0433%u0438%u043D%u044B%2C%u043F%u0430%u0440%u043E%u043B%u0438%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u0430%22%20%0A%20%20%20%20%20image%3D%22data%3Aimage/x-icon%3Bbase64%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%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28window.open%28%27http%3A//www.bugmenot.com/view/%27+location.hostname%2C%27BugMeNot_%27+location.hostname%2C%27width%3D500%2Cheight%3D400%2Cleft%3D100%2Ctop%3D100%2Cscrollbars%3Dyes%2Clocation%3Dno%27%29%29%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A%20/%26gt%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%20%0A%20%20%20%20%20tooltiptext%3D%22%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0435%20%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%20%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAfpJREFUeJydk0trU0EUx/9n5ia9SbwI2lBsaUTsItbqTsGFIjbgVxBd+A1cdVNwXwi4cCGIrt121ZWYLqrdVAUfIGpbKUlqqolJSe773jnjwqp5XAp6VsP8zvmfx8whrTX67elO62LGkEuC6BwB+YgZbsRNL1bvfaUWb56Z3Oj3p36BF7udiinFtYYTwA4V+IARACkIBMBTvHr77NT8sID5aq9b7YZRvmEHOMyU1vBjbn53w8LdS6d9cZB5JSl42jIxbZkDd5IIgpC30nIFAOh5vX3ZlGLtU9sZyXZrdhIA8PBNDVZaDrCGEyBUfMVgrcsNJ7nstVobdTvAru2jeCw3wKyUxA/FZZGWYsYOVaJAreejG8SYOmKOsGxKwg7VjMGMcR56SgCYyI2hdPI4AODJh68jXBAhUDwuIubE7N/62vqYMB8AiBRDeDG3KBEfboo1Yq1bwo3UlhT/LtHyQpiG3BIh88L/VLC976IXxgviRvHEuqe4ooYGOZEb+3M+dTQzwDY7DkBUeXx9bp201nj0tmYCqApCPmP8/TBupFDt+QCAgmUim5LY7Dio94Lm8ue9QvtOyR9Ypvuvd55FrOetlEQ2JSHoV3OKNVpeiO19FyCqPCjNln7H0PA6lze+XAiVXvJjPu/FKh8pBghNInpnCFq8d7X4st//J3JK/Ibf2DGRAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3A%28function%28%29%7Bvar%20meta%3D%27%27%3Bvar%20scripts%3D%27%27%3Bvar%20embed%3D%27%27%3Bvar%20m%3Ddocument.getElementsByTagName%28%27meta%27%29%3Bfor%28var%20i%3D0%2Cmi%3Bmi%3Dm%5Bi%5D%3Bi++%29%7Bmeta+%3D%28mi.name%3Fmi.name+%27%3A%20%27%3A%28mi.httpEquiv%3Fmi.httpEquiv+%27%3A%27%3A%27%27%29%29+mi.content+%27%255Cn%27%7D%3Bvar%2520s%3Ddocument.getElementsByTagName%28%27script%27%29%3Bfor%28var%2520i%3D0%2Csi%3Bsi%3Ds%5Bi%5D%3Bi++%29%7Bif%28si.src%29scripts+%3Dsi.src+%27%255Cn%27%7D%3Bvar%2520e%3Ddocument.getElementsByTagName%28%27embed%27%29%3Bvar%2520o%3Ddocument.getElementsByTagName%28%27object%27%29%3Bvar%2520fullUrl%3Dfunction%28url%29%7Bvar%2520a%3Ddocument.createElement%28%27a%27%29%3Ba.href%3Durl%3Breturn%2520url%3Fa.href+%27%255Cn%27%3A%27%27%7D%3Bfor%28var%2520i%3D0%2Cei%3Bei%3De%5Bi%5D%3Bi++%29%7Bembed+%3DfullUrl%28ei.getAttribute%28%27src%27%29%29%7D%3Bfor%28var%2520i%3D0%2Coi%3Boi%3Do%5Bi%5D%3Bi++%29%7Bvar%2520src%3Doi.getAttribute%28%27data%27%29%7C%7Coi.getAttribute%28%27src%27%29%3Bif%28%21src%29%7Bfor%28var%2520j%3D0%2Cp%3Bp%3Doi.childNodes%5Bj%5D%3Bj++%29%7Bif%28p.tagName%26amp%3Bamp%3B%26amp%3Bamp%3Bp.tagName.toLowerCase%28%29%3D%3D%27param%27%26amp%3Bamp%3B%26amp%3Bamp%3Bp.getAttribute%28%27name%27%29.match%28/%5E%28movie%7Cdata%7Csrc%7Ccode%7Cfilename%7Curl%29%24/i%29%29%7Bsrc%3Dp.getAttribute%28%27value%27%29%3B%2520break%7D%7D%7D%3Bvar%2520lnk%3DfullUrl%28src%29%3Bif%28embed.indexOf%28lnk%29%3D%3D-1%29embed+%3Dlnk%7D%3Bvar%2520lastmod%3D%28Date.parse%28document.lastModified%29%3D%3D0%29%3F%27%27%3Adocument.lastModified%3Bvar%2520mode%3Ddocument.getElementsByTagName%28%27HTmL%27%29.length%3D%3D0%3F%27Really%2520strict%27%3A%28document.compatMode%3D%3D%27CSS1Compat%27%3F%27Normal%2520strict%27%3A%27Quirks%27%29%3Bvar%2520title%3Ddocument.title%7C%7C%28document.getElementsByTagName%28%27title%27%29%5B0%5D%26amp%3Bamp%3B%26amp%3Bamp%3Bdocument.getElementsByTagName%28%27title%27%29%5B0%5D.text%29%7C%7C%27%27%3B%2520if%28meta%29meta%3D%27%255CnMeta-%25D0%25B4%25D0%25B0%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B5%3A%255Cn%27+meta%3Bif%28scripts%29scripts%3D%27%255Cn%25D0%25A1%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BF%25D1%2582%25D1%258B%3A%255Cn%27+scripts%3Bif%28embed%29embed%3D%27%255Cn%25D0%2592%25D1%2581%25D1%2582%25D1%2580%25D0%25BE%25D0%25B5%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B5%2520%25D0%25BE%25D0%25B1%25D1%258A%25D0%25B5%25D0%25BA%25D1%2582%25D1%258B%3A%255Cn%27+embed%3B%2520alert%28%27%25D0%2598%25D0%25B4%25D0%25B5%25D0%25BD%25D1%2582%25D0%25B8%25D1%2584%25D0%25B8%25D0%25BA%25D0%25B0%25D1%2586%25D0%25B8%25D1%258F%2520%25D0%25B1%25D1%2580%25D0%25B0%25D1%2583%25D0%25B7%25D0%25B5%25D1%2580%25D0%25B0%3A%2520%27+navigator.userAgent+%27%255Cn%255Cn%25D0%2597%25D0%25B0%25D0%25B3%25D0%25BE%25D0%25BB%25D0%25BE%25D0%25B2%25D0%25BE%25D0%25BA%3A%2520%27+title+%27%255Cn%255Cn%25D0%2590%25D0%25B4%25D1%2580%25D0%25B5%25D1%2581%3A%2520%27+location.href+%27%255Cn%255Cn%25D0%25A0%25D0%25B5%25D1%2584%25D0%25B5%25D1%2580%25D1%2580%25D0%25B5%25D1%2580%3A%2520%27+document.referrer+%27%255Cn%255Cn%25D0%2594%25D0%25B0%25D1%2582%25D0%25B0%2520%25D0%25BF%25D0%25BE%25D1%2581%25D0%25BB%25D0%25B5%25D0%25B4%25D0%25BD%25D0%25B5%25D0%25B3%25D0%25BE%2520%25D0%25B8%25D0%25B7%25D0%25BC%25D0%25B5%25D0%25BD%25D0%25B5%25D0%25BD%25D0%25B8%25D1%258F%3A%2520%27+lastmod+%27%255Cn%255Cn%25D0%25A0%25D0%25B5%25D0%25B6%25D0%25B8%25D0%25BC%2520%25D0%25BE%25D1%2582%25D0%25BE%25D0%25B1%25D1%2580%25D0%25B0%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25B8%25D1%258F%3A%2520%27+mode+%27%2520mode%255Cn%27+meta+scripts+embed%29%7D%29%28%29%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22Leader-When%20security%20matters-%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u0441%u0430%u0439%u0442%u0435%20%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28open%28%27http%3A//leader.ru/secure/whoiz.html%3Fq%3D%27+document.domain%29%29%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22Leader-When%20security%20matters-%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%u0431%20IP%20%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%25D0%2592%25D0%25B2%25D0%25B5%25D1%2581%25D1%2582%25D0%25B8%2520IP%2520%25D0%25B0%25D0%25B4%25D1%2580%25D0%25B5%25D1%2581%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//leader.ru/secure/whoiz.html%3Fq%3D%27+str%29%29%3B%7D%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%0A%26lt%3B/panel%26gt%3B%3B%0Athis.%20appendChild%20%28custombuttonsUtils.%20makeXML%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20url%20%3D%20menuitem.%20getAttributeNS%20%28%22http%3A//xsms.nm.ru/custombuttons/%22%2C%20%22url%22%29%3B%0A%20%20%20%20if%20%28%21url%29%20return%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20loadURI%20%28url%29%3B%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%20%20%20%20gBrowser.%20addTab%20%28url%29%3B%0A%20%20%20%20this.%20open%20%3D%20false%3B%0A%7D%3B%0A%0A%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Инициализация:

Выделить код

Код:

/*Initialization Code*/
var menu = <panel xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
        <vbox>
        
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Google на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVQokTWSTWhcVRhAz3fvfW/ezGQmba0ZTJvEWtNKk53UCKViNkFREH/AlSBSCqWopYtSV1oUGnGjKwV1qehGK6RgQbAFhXaitsEumhaTFtMxGWeSJp1M8mbevZ+L4OpsD5wjZyc/GnfOfdPTU+wT48gnFuNy5DLPjuo1CvN3CUkOVEEAlGwz2xCRY05VzxfscH6g8BzNWmD8RRjYZ9B/akiyDod3QW8R4giNLOI9t76u5u/cqH3qCsU4//jIBG8/m/LQkHB9Gt76UOjfW8EXK7iZKlQCOEEiC6IMjz/K/J+380YE9o56Boc9WddTm/dcPJdisKz1OO7YBWp2iUVZYiVdorPcgL/vkbbaOJ9BaZvy8vHA52eU5Vml3XYA/Dy0wIWdN+lLWkRB6FuN2b0Y8XAtxjTbuCyD5mLglaNKlAvc+MNw6PnAleaPXK5fIMoMnVaLzAjzFm4OBrp7lP7KGi7dgMnjKS8cEZ6cgJfe6GW6fpEz0yewtks52s59SYmMxWJBFRXl+0MpThXOTXWZmkp5/ajh1MeWZONB9uRHmVn+lSyyGBGc2SIKQQLBKg71HBzNmHi1zMhYCY0D+7Y/xsl4knevHmP630s8kOwEAbMVGi8BDQkuX0p457MEE/9E9941fvkuorL/GUb2j/Ha0Jvcbs5RX71LziaoBgBUlJgc9uBu3ht7qpcw9z7b5HeKoUqjNkdLdvHEIxPM1me4UvuNgknIMk/wSvDgGgVc868qpUaH/h0NolwRkTzJwiVW6geIDhwmUodPQSPQoKCAKABOg2qhdV02M8OGriPGUA6r2GSVzS74boZ2IKQQtqz/X1xNIJYvv+3g11qEtRa+U6Y9+AGFgRN8dfkTzs/+QK/JkaVdtKNoR4mWSoiKyJGnB0+L+rPi2yoiomKx5FkuOq6WV1g3GYmLEStYa3HWqjFOrDVf/AddhjkVPuJ3DwAAAABJRU5ErkJggg=="
     cb-oncommand="var uri = <![CDATA[javascript:void(str=prompt('Поиск с помощью Google на этом сайте:'+document.domain,''));if(str){void(open('http://www.google.com/search?as_q='+str+'&amp;as_sitesearch='+document.domain));}]]>;&#xA;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;&#xA;    loadURI(uri);"
/>     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Yandex на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEwEgIKwpdqAAAAKSSURBVDjLjZFPaBx1FMc/MztFQ2sUSUi7JUJ2kw0psmCgUEFP3nsVpYd6EduDt4g2khaxCHrsIYVKD2m0N+kp17IQBmwyWUYsdC8ZZnelhnVlM3Tnz77Z3/PQTWyqh3zh8ePxee/x3vdn+b6/DHzLxsaGDk6dUnzfV1XFnogims2m4rqu5uu3VD+6oEmSqBOGIa999hUAf9RqWL7vKyNVq1WLLMt08HhHsyxT13XfIwxD3b90ScMw1Eajodb29vZhC2DheZ4aY/4TOzs7aozBjqKIOI6x3p55/p57iziOqVQqeJ6nTq/Xo9VqYd2+xytLS+y3e0StFgDtdvtna21t7WmpVDrNS9rd3f26VCrdtHzfbwNnX+Kr1Wr1KgD/t2Capup53uvGGGwRQURg+RPML3cRESzLwhjTExEcEQFAL1wEEfJRvrCwgOu6nzrdbheAyZVvMBMTdM+/e7hIkiRXnDiOAfi70yG9fBkZ5VEUMTMz847T7/exHz0iuXYNsgzT7x+c+cPc3BxWrVbTQqFw5Ma9vT2mpqYsAOr1enswGOhxFASB1uv1L1WVg3BE5Kxt2wyHw+fjJcN+cAfr8a/Q/RPGTjL8/gEA09PTFAqF77a2tt5cXFz8AsBO05QDL0UE+8MPyMemSJfvIhc/h/ruET45OUmxWFxyXfcnEcHOsuxIgXk2hm7/jogw/OsZ/Pb0CBcRxsfHqVQqH29ubtadJEnodDr/OnTnR169f5+TxSLJmTNkmdB9kY8UBAFJkqw6WZbRH1kPcGJlhfzJE7q1GoWHDzlx4wbpC9wYQxAE5Hn+/vz8/Ka1vr6u5XKZ4yjPc5rNJqr6Rrlc3gdw8jy/3mg0rgCnjzFjdXZ29ipw+Gv/AGlK32Dj9T2iAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Yandex%20%D0%BD%D0%B0%20%D1%8D%D1%82%D0%BE%D0%BC%20%D1%81%D0%B0%D0%B9%D1%82%D0%B5:'+document.domain,''));if(str){void(open('http://www.yandex.ru/yandsearch?rpt=rad&amp;text='+str+'&amp;serverurl='+document.domain));}&#xA;&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Bing на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAAB50lEQVQokY3TP2xNYRzG8c855173ttrS1t9GakCFVBASg0TCIrGI2UBiMBoMJoOJVSIWk4FVIhESkfg7+DOIQQkGrTSlbVT1323PPa/hvbdak2d6T875Pu/7e97nJOH22kDwV4n/VQmEJXCyFE4sN/4XTjI2HaWyhl8fGH1FViXkhKLhkUWjUCwzK0nL7L5IRx+fbzL4gHILSUqpSlGQT8ZDZG1k5UXTEoGFKRQUC3TtoGtPNGvpoT7D5Cd+DTD5hdoYpbYlMycZUjYcYuNh2rcw+53aKFkrrT0kJb7e4ctNRp6QVhpwc46OvrjDy3N8f8rsOOVWVu9k62k2n6DnCC/OMvJYGtlGMNODPDvFwHWmBinmqI3z7T7Pz/DtHpVu9l+m1NqE8whPvOfHa1b2kpZjaElKdR3FPEN3mZ+gYxtJJlXkTH6OcLmdSif5b9IVDbiMOvkUXXvjNw2l6nN8vBGfuvdx4Go82tQQ8z+ZGSav0X+eLSdjuG8vkU9Lwq3uIORsOsauC3TtZnqIsTfM/mDFKjr7WbU9bvDuCgPXCHVJuL02CCHOtLKX9QfZfJz2PsJCvKqZIYYfMfwwtlBA2oCbqtcazWojq8Q1FDXymfi+mcViSZrKqrFp9ekY2uL/0Ug9a1nW7T+z2Kt7++dAvwAAAABJRU5ErkJggg==" 
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('Поиск с помощью Bing на этом сайте:'+document.domain,''));if(str){void(open('http://www.bing.com/search?q=site:'+document.location.hostname+ '+' +str+'&amp;go=&amp;form=QBRE&amp;filt=all'));}&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск BugMeNot логины,пароли для сайта" 
     image="data:image/x-icon;base64,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"
     cb-oncommand="var uri = <![CDATA[ javascript:void(window.open('http://www.bugmenot.com/view/'+location.hostname,'BugMeNot_'+location.hostname,'width=500,height=400,left=100,top=100,scrollbars=yes,location=no'))&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
 /> 
           
   <toolbarbutton id="custombuttons-button" 
     tooltiptext="Информация о браузере и открытой странице" 
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAfpJREFUeJydk0trU0EUx/9n5ia9SbwI2lBsaUTsItbqTsGFIjbgVxBd+A1cdVNwXwi4cCGIrt121ZWYLqrdVAUfIGpbKUlqqolJSe773jnjwqp5XAp6VsP8zvmfx8whrTX67elO62LGkEuC6BwB+YgZbsRNL1bvfaUWb56Z3Oj3p36BF7udiinFtYYTwA4V+IARACkIBMBTvHr77NT8sID5aq9b7YZRvmEHOMyU1vBjbn53w8LdS6d9cZB5JSl42jIxbZkDd5IIgpC30nIFAOh5vX3ZlGLtU9sZyXZrdhIA8PBNDVZaDrCGEyBUfMVgrcsNJ7nstVobdTvAru2jeCw3wKyUxA/FZZGWYsYOVaJAreejG8SYOmKOsGxKwg7VjMGMcR56SgCYyI2hdPI4AODJh68jXBAhUDwuIubE7N/62vqYMB8AiBRDeDG3KBEfboo1Yq1bwo3UlhT/LtHyQpiG3BIh88L/VLC976IXxgviRvHEuqe4ooYGOZEb+3M+dTQzwDY7DkBUeXx9bp201nj0tmYCqApCPmP8/TBupFDt+QCAgmUim5LY7Dio94Lm8ue9QvtOyR9Ypvuvd55FrOetlEQ2JSHoV3OKNVpeiO19FyCqPCjNln7H0PA6lze+XAiVXvJjPu/FKh8pBghNInpnCFq8d7X4st//J3JK/Ibf2DGRAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:(function(){var meta='';var scripts='';var embed='';var m=document.getElementsByTagName('meta');for(var i=0,mi;mi=m[i];i++){meta+=(mi.name?mi.name+': ':(mi.httpEquiv?mi.httpEquiv+':':''))+mi.content+'%5Cn'};var%20s=document.getElementsByTagName('script');for(var%20i=0,si;si=s[i];i++){if(si.src)scripts+=si.src+'%5Cn'};var%20e=document.getElementsByTagName('embed');var%20o=document.getElementsByTagName('object');var%20fullUrl=function(url){var%20a=document.createElement('a');a.href=url;return%20url?a.href+'%5Cn':''};for(var%20i=0,ei;ei=e[i];i++){embed+=fullUrl(ei.getAttribute('src'))};for(var%20i=0,oi;oi=o[i];i++){var%20src=oi.getAttribute('data')||oi.getAttribute('src');if(!src){for(var%20j=0,p;p=oi.childNodes[j];j++){if(p.tagName&amp;&amp;p.tagName.toLowerCase()=='param'&amp;&amp;p.getAttribute('name').match(/^(movie|data|src|code|filename|url)$/i)){src=p.getAttribute('value');%20break}}};var%20lnk=fullUrl(src);if(embed.indexOf(lnk)==-1)embed+=lnk};var%20lastmod=(Date.parse(document.lastModified)==0)?'':document.lastModified;var%20mode=document.getElementsByTagName('HTmL').length==0?'Really%20strict':(document.compatMode=='CSS1Compat'?'Normal%20strict':'Quirks');var%20title=document.title||(document.getElementsByTagName('title')[0]&amp;&amp;document.getElementsByTagName('title')[0].text)||'';%20if(meta)meta='%5CnMeta-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5:%5Cn'+meta;if(scripts)scripts='%5Cn%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B:%5Cn'+scripts;if(embed)embed='%5Cn%D0%92%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B:%5Cn'+embed;%20alert('%D0%98%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0:%20'+navigator.userAgent+'%5Cn%5Cn%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA:%20'+title+'%5Cn%5Cn%D0%90%D0%B4%D1%80%D0%B5%D1%81:%20'+location.href+'%5Cn%5Cn%D0%A0%D0%B5%D1%84%D0%B5%D1%80%D1%80%D0%B5%D1%80:%20'+document.referrer+'%5Cn%5Cn%D0%94%D0%B0%D1%82%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F:%20'+lastmod+'%5Cn%5Cn%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC%20%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F:%20'+mode+'%20mode%5Cn'+meta+scripts+embed)})()]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Leader-When security matters-Информация о сайте "
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(open('http://leader.ru/secure/whoiz.html?q='+document.domain));&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Leader-When security matters-Информация об IP "
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('%D0%92%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20IP%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81'));if(str){void(open('http://leader.ru/secure/whoiz.html?q='+str));};&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
       </vbox>
</panel>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";

this. handleClick = function (event)
{
    var menuitem = event. target;
    var url = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "url");
    if (!url) return;
    if (event. button == 0)
        loadURI (url);
    else if (event. button == 1)
        gBrowser. addTab (url);
    this. open = false;
};


                       *Добавлено "Leader-When security matters-Информация об IP адресе" 21.07.2011
24-05-2011 22:46:54
Открыть в Opera(Ubuntu)(Firefox3.6-5.0)
Открывает текущую страницу в Opera
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EOpera%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFFBMkGw0H7zIAAAL9SURBVDjLbZJfTJtlFMZ/30cLS6lS/pWWtBKyBruyLSSyEBMn88q5BC/0yi1uckWWeOENN2Yak116IUY3wWhkM8HFxERF1DlD3KLAHDrKhM0ULHzCJhUKtHVroXyPF7AKcefqvO95znPe5zkvbI/oYw0qHAxJmn//DAbA/MBXylqzbJhFm5A/wuV29tvPdSPIfz3vlG8l57xmfDk6Jkmb1e/r3br53GFJUn8NY1wP4LdXV7V08kUNB7bazldDb6gqnrEs+95CQuNnu9TtwV8YcOXIIVuSYq+/qvETxyRJ0+++rQuV9PG1Dy7XIntjQ3PtbYrVG5KkYT8arKWtwBI52Np5qcG9HGsJ5E417Y4279vr2mFEQceDotuDf/xsl+4tJJSxLLs3VBk/X70NEOvptiVp+r0zWo6Oaf6bAZ3zmnEA80IlfeZa1gD4Z2SIxc8+pfbwEeqbn6wDcJQ6iBQXOwDQb9fIp5cAyN0cNQDM0iJem3vjZQBcyRgPlTlA4MxlGPABI0G4EUTJjmPKXvxCdiql6Uc99mhgm5PN+/a6TjXtjk63BHKXGtzLjQdbOwur3y63pxI6lqDLSRvwQkVjfQQgORGfBD55ZZ3++5gdBB9VgcDvrgvdfuLNHjnLyoyK/fvJJhIg2FVTQ3I8yvrqqn7s7DBSs1O1RXCnfREcfV6wbdq8TS1f+g604jv0lGEYBn9+3Evm91sAuBvCBI+/BJIRfvp57vz8w+3E2NVn+7z0m0cT4DI5XZzOULFnD4axqSpzeZC10RHWRkfIXBnceq9BRThMSTqDy+D00QSYAKUmk3lrQumfLha0FS9ZOGeiOGeilCxZhfv08HfkrQmVFjG5478MBYj/GsC2jj8jSUp92KW5IJoLotQHb0mSrPY2/RLAHgoQf+AWusNVkcdzK9fq6iMu5yONclbXGADrfy9ofXbCmJmZvDtc4jlw8tbi5P8IPB4PKysrhEIhR4Wn3Jsq3uW7azrKAFx2fvXhtexfyZXlxNTUVP4+FuBfs3VpxpzbeVsAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E1%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20page%20%3D%20gBrowser.currentURI%3B%0Avar%20browser%20%3D%20%22/usr/bin/opera%22%3B%0A%0Avar%20file%20%3D%20%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Afile.initWithPath%28browser%29%3B%0A%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Bpage.spec%5D%2C%201%29%3B%0Areturn%20true%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%22Opera%22%20%u0434%u043B%u044F%20Linux%20OS%0A%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var page = gBrowser.currentURI;
var browser = "/usr/bin/opera";

var file =  Components.classes["@mozilla.org/file/local;1"]
                      .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(browser);

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, [page.spec], 1);
return true;



Открыть в Midori(Ubuntu)(Firefox3.6-5.0)
Открывает текущую страницу в Midori
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMidori%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKTSURBVDiNlZHPb1RVHMU/90dnXqHtDLaNtWIpnfAj0IKEAAsXmBgXxo0u3MkfYEwIC2GBGxO3sHHLzh2NEkw0JkCUxBAWZmwhKEjjD8SpkynpS2d4zpt37/deF61DTBMMZ39Ozucc9f78sddD4JxS+gDPoBjDba35wHrH+YP7Ds9Vhir/b+qWka6Cob/Jis6BWz/Vz9sQ4lxbLdNcu7vZ4AwvrB1loryLldYjfuks4F58wLApscVWCCHOWVcUdHqr/3UWlun8OK/sfIut24f57MYFHgxeZ3h6gLG/DjP0cJzG5FVcUWBdIXiRvndLq8abtffYMz1Lr8j55MuzZFN3SKxhsvEabxw6wbe3L+NFcIVgnfN48QCo5ihvz55ix2SNGCNf3ZgnnVhgJK1xfPQE+48dQilFs/07/jmPcx4rXhAReFzmnR1nGKtMkGUZSilqz88ynn3I3pcPkiRJv+VyZ4kBEcQL1vmAD8JM9io7t+/euCgCMPPSrk3DZllGW7eohIDzAe03EPaOH8EYQ5qmT71yudlAjeR48Xjn0d4JrucZKlex1lKv16lWqxhj6PV6hBAwxvQDVtdW0IPr2N4J2nvBec9qu0We54QQANBas7i4SKVSoVQq9QN+bd2FgbDewAtafCCawNf3PuXhn39gre3v8C+OUgqAzuMON1uXkCj4IIgP6w1EhPbUHT7+5l2+X7pOt9tFREiShEajQVEUAFy8dgEzkyKygeAFM3kk+WhkyhAJlEaFdPg+C9/dI+aGNFvhys0vaHfWuFL/nB8G5rFbIcRAiIH0twJ19GT157H95d3JNt3nDC7iuhFtwA5qfB6wZY16siV5Gnj0Y+++1ZbTzVvdc1HYfPpTpAxLpUSf/gcI2lvMWbR5vAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20page%20%3D%20gBrowser.currentURI%3B%0Avar%20browser%20%3D%20%22/usr/bin/midori%22%3B%0A%0Avar%20file%20%3D%20%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Afile.initWithPath%28browser%29%3B%0A%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Bpage.spec%5D%2C%201%29%3B%0Areturn%20true%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%22Opera%22%20%u0434%u043B%u044F%20Linux%20OS%0A%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var page = gBrowser.currentURI;
var browser = "/usr/bin/midori";

var file =  Components.classes["@mozilla.org/file/local;1"]
                      .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(browser);

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, [page.spec], 1);
return true;

Текстовые смайлы(Firefox3.6-5.0)
Вставка текстовых смайлов.В основе кнопки код Infocatcher

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0Athis.appendChild%28parseFromXML%28%0A%20%20%20%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.insertText%28event.target.getAttribute%28%27cb_text%27%29%29%3B%22%3E%0A%20%3Cmenu%20label%3D%22%u042D%u043C%u043E%u0446%u0438%u044F%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%29%22%20label%3D%22%3A-%29%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%28%22%20label%3D%22%3A-%28%20%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%7C%22%20label%3D%22%3A-%7C%20%u0437%u0430%u0434%u0443%u043C%u0447%u0438%u0432%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-D%22%20label%3D%22%3A-D%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22X-D%22%20label%3D%22X-D%20%u0441%u043C%u0435%u0445%20%u0441%20%u0437%u0430%u0436%u043C%u0443%u0440%u0435%u043D%u043D%u044B%u043C%u0438%20%u0433%u043B%u0430%u0437%u0430%u043C%u0438%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-C%22%20label%3D%22%3A-C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u043E%u0433%u043E%u0440%u0447%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-/%22%20label%3D%22%3A-/%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5C%22%20label%3D%22%3A-%5C%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-0%22%20label%3D%22%3A-0%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228-O%22%20label%3D%228-O%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D-O%22%20label%3D%22%3D-O%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%20%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5B%20%5D%22%20label%3D%22%3A-%5B%20%5D%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5B%22%20label%3D%22%3A-%5B%20%u0441%u043C%u0443%u0449%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%250%22%20label%3D%22%250%20%u0441%u0431%u0438%u0442%20%u0441%20%u0442%u043E%u043B%u043A%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3E%3A-D%22%20label%3D%22%3E%3A-D%20%u0437%u043B%u043E%u0440%u0430%u0434%u043D%u044B%u0439%20%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%7D%3A-%3E%22%20label%3D%22%7D%3A-%3E%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%3E%22%20label%3D%22%5D%3A-%3E%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27-%29%22%20label%3D%22%3A%27-%29%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27-D%22%20label%3D%22%3A%27-D%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22D-%3A%22%20label%3D%22D-%3A%20%u0441%u0438%u043B%u044C%u043D%u0430%u044F%20%u0437%u043B%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/%3A-%28%22%20label%3D%22/%3A-%28%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/%3A-%5D%22%20label%3D%22/%3A-%5D%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3B-%29%22%20label%3D%22%3B-%29%20%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-*%22%20label%3D%22%3A-*%20%u0446%u0435%u043B%u043E%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A_%28%22%20label%3D%22%3A_%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%7E%28%22%20label%3D%22%3A%7E%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27%28%22%20label%3D%22%3A%27%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A*%28%22%20label%3D%22%3A*%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%7B%7D%22%20label%3D%22%3A-%7B%7D%20%u0441%u0442%u0440%u0430%u0441%u0442%u043D%u044B%u0439%20%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-@%22%20label%3D%22%3A-@%20%u043A%u0440%u0438%u0447%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-X%22%20label%3D%22%3A-X%20%u0440%u043E%u0442%20%u043D%u0430%20%u0437%u0430%u043C%u043A%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%21%22%20label%3D%22%3A-%21%20%u043E%u0442%u0432%u0440%u0430%u0449%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-P%22%20label%3D%22%3A-P%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-p%22%20label%3D%22%3A-p%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3Alol%3A%22%20label%3D%22%3Alol%3A%20%u0433%u0440%u043E%u043C%u043A%u0438%u0439%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228-%29%22%20label%3D%228-%29%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22B-%29%22%20label%3D%22B-%29%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22O%3A-%29%22%20label%3D%22O%3A-%29%20%u0430%u043D%u0433%u0435%u043B%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%25%29%22%20label%3D%22%25%29%20%u0441%u0443%u043C%u0430%u0441%u0448%u0435%u0434%u0448%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A*%29%22%20label%3D%22%3A*%29%u043F%u044C%u044F%u043D%u044B%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/b/%22%20label%3D%22/b/%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Co/%22%20label%3D%22%5Co/%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u0413%u0433Y%22%20label%3D%22%u0413%u0433Y%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%7B%3A%u20AC%22%20label%3D%22%7B%3A%u20AC%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3AE%22%20label%3D%22%3AE%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B%2C%3B%29%22%20label%3D%22%28%3B%2C%3B%29%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22*%3AO%29%22%20label%3D%22*%3AO%29%20%u043A%u043B%u043E%u0443%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-E%22%20label%3D%22%3A-E%20%u043E%u0441%u043A%u0430%u043B%u0435%u043D%u043D%u044B%u0439%20%20%u0432%u0430%u043C%u043F%u0438%u0440%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-F%22%20label%3D%22%3A-F%20%u0432%u0430%u043C%u043F%u0438%u0440%20%u0431%u0435%u0437%20%u043A%u043B%u044B%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%3A-%29%22%20label%3D%22%3A%3A-%29%20%u043C%u0443%u0442%u0430%u043D%u0442/%u043F%u0440%u0438%u0448%u0435%u043B%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D%22%20label%3D%22%5B%3A%5D%20%u0440%u043E%u0431%u043E%u0442%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22-%3D%3C%3A-%29%22%20label%3D%22-%3D%3C%3A-%29%20%u0432%u043E%u043B%u0448%u0435%u0431%u043D%u0438%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%2C%u2019-/%22%20label%3D%22%2C%u2019-/%20%u043A%u0438%u0442%u0430%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3C%7C-%29%22%20label%3D%22%3C%7C-%29%20%u043A%u0438%u0442%u0430%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u043E-%29%22%20label%3D%22%u043E-%29%20%u0446%u0438%u043A%u043B%u043E%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22O-%29%22%20label%3D%22O-%29%20%u0446%u0438%u043A%u043B%u043E%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5D%5B%22%20label%3D%22%3A-%5D%5B%20%u0447%u0435%u0440%u0435%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%3F%22%20label%3D%22%3A-%3F%20%u043A%u0443%u0440%u044F%u0449%u0438%u0439%20%u0442%u0440%u0443%u0431%u043A%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u042D%3A-%29%22%20label%3D%22%u042D%3A-%29%20%u043E%u043B%u0435%u043D%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3C3%22%20label%3D%22%3C3%20%u0441%u0435%u0440%u0434%u0446%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22@%7D-%3E--%22%20label%3D%22@%7D-%3E--%20%u0440%u043E%u0437%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Cm/%22%20label%3D%22%5Cm/%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Cm/_%22%20label%3D%22%5Cm/_%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%7C%7C%7C%3A%5D%22%20label%3D%22%5B%3A%7C%7C%7C%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D/%5C/%5C/%5C%5B%3A%5D%22%20label%3D%22%5B%3A%5D/%5C/%5C/%5C%5B%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D%7C%7C%7C%5B%3A%5D%22%20label%3D%22%5B%3A%5D%7C%7C%7C%5B%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28_%21_%29%22%20label%3D%22%28_%21_%29%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%29%28%29%22%20label%3D%22%28%29%28%29%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%20%20%20%3C/menupopup%3E%0A%29%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.insertText%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28command%29%3B%0A%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28command%29%29%20%7B%0A%20%20%20%20%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Afunction%20parseFromXML%28xml%29%20%7B%0A%20%20%20%20var%20pp%20%3D%20XML.prettyPrinting%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20false%3B%0A%20%20%20%20var%20elt%20%3D%20new%20DOMParser%28%29.parseFromString%28xml.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20pp%3B%0A%20%20%20%20return%20elt%3B%0A%7D%0A%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0Athis.hideDropMarker%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Инициализация:

Выделить код

Код:

/*Initialization Code*/
this.appendChild(parseFromXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        oncommand="this.parentNode.insertText(event.target.getAttribute('cb_text'));">
 <menu label="Эмоция">
            <menupopup>
        <menuitem cb_text=":-)" label=":-) улыбка" />
        <menuitem cb_text=":-(" label=":-( грусть" />
        <menuitem cb_text=":-|" label=":-| задумчивость" />
        <menuitem cb_text=":-D" label=":-D смех" />
        <menuitem cb_text="X-D" label="X-D смех с зажмуренными глазами" />
        <menuitem cb_text=":-C" label=":-C сильное огорчение" />
        <menuitem cb_text=":-/" label=":-/ недовольство/озадаченность" />
        <menuitem cb_text=":-\" label=":-\ недовольство/озадаченность" />
        <menuitem cb_text=":-0" label=":-0 удивление" />
        <menuitem cb_text="8-O" label="8-O сильное удивление" />
        <menuitem cb_text="=-O" label="=-O сильное удивление" /> 
        <menuitem cb_text=":-[ ]" label=":-[ ] сильное удивление" />
        <menuitem cb_text=":-[" label=":-[ смущение" />
        <menuitem cb_text="%0" label="%0 сбит с толку" />
        <menuitem cb_text=">:-D" label=">:-D злорадный  смех" />
        <menuitem cb_text="}:->" label="}:-> коварная  улыбка" />
        <menuitem cb_text=":->" label="]:-> коварная  улыбка" />
        <menuitem cb_text=":'-)" label=":'-) сильный смех(до слёз)" />
        <menuitem cb_text=":'-D" label=":'-D сильный смех(до слёз)" />
        <menuitem cb_text="D-:" label="D-: сильная злость" />
        <menuitem cb_text="/:-(" label="/:-( «едет крыша»" />
        <menuitem cb_text="/:-]" label="/:-] «едет крыша»" />
          </menupopup>
             </menu>
 <menu label="Действие">
            <menupopup>
        <menuitem cb_text=";-)" label=";-) подмигивать" />
        <menuitem cb_text=":-*" label=":-* целовать" />
        <menuitem cb_text=":_(" label=":_( плакать" />
        <menuitem cb_text=":~(" label=":~( плакать" />
        <menuitem cb_text=":'(" label=":'( плакать" />
        <menuitem cb_text=":*(" label=":*( плакать" />
        <menuitem cb_text=":-{}" label=":-{} страстный поцелуй" />
        <menuitem cb_text=":-@" label=":-@ кричать" />
        <menuitem cb_text=":-X" label=":-X рот на замке" />
        <menuitem cb_text=":-!" label=":-! отвращение" />
        <menuitem cb_text=":-P" label=":-P показывать язык" />
        <menuitem cb_text=":-p" label=":-p показывать язык" />
        <menuitem cb_text=":lol:" label=":lol: громкий смех" />
        
        
          </menupopup>
             </menu>
 <menu label="Персонаж">
            <menupopup>
        <menuitem cb_text="8-)" label="8-) человек в очках" />
        <menuitem cb_text="B-)" label="B-) человек в очках" />
        <menuitem cb_text="O:-)" label="O:-) ангел" />
        <menuitem cb_text="%)" label="%) сумасшедший" />
        <menuitem cb_text=":*)" label=":*)пьяный" />
        <menuitem cb_text="/b/" label="/b/ Медвед/«Превед!" />
        <menuitem cb_text="\o/" label="\o/ Медвед/«Превед!»" />
        <menuitem cb_text="ГгY" label="ГгY Медвед/«Превед!»" />
        <menuitem cb_text="{:€" label="{:€ Ктулху" />
        <menuitem cb_text=":E" label=":E Ктулху" />
        <menuitem cb_text="(;,;)" label="(;,;) Ктулху" />
        <menuitem cb_text="*:O)" label="*:O) клоун" />
        <menuitem cb_text=":-E" label=":-E оскаленный  вампир" />
        <menuitem cb_text=":-F" label=":-F вампир без клыка" />
        <menuitem cb_text="::-)" label="::-) мутант/пришелец" />
        <menuitem cb_text="[:]" label="[:] робот" />
        <menuitem cb_text="-=<:-)" label="-=<:-) волшебник" />
        <menuitem cb_text=",’-/" label=",’-/ китаец" />
        <menuitem cb_text="<|-)" label="<|-) китаец" />
        <menuitem cb_text="о-)" label="о-) циклоп" />
        <menuitem cb_text="O-)" label="O-) циклоп" />
        <menuitem cb_text=":-][" label=":-][ череп" />
        <menuitem cb_text=":-?" label=":-? курящий трубку" />
        <menuitem cb_text="Э:-)" label="Э:-) олень" />
        <menuitem cb_text="<3" label="<3 сердце" />
        <menuitem cb_text="@}->--" label="@}->-- роза" />
        <menuitem cb_text="\m/" label="\m/ коза (жест)" />
        <menuitem cb_text="\m/_" label="\m/_ коза (жест)" />
        <menuitem cb_text="[:|||:]" label="[:|||:] баян" />
        <menuitem cb_text="[:]/\/\/\[:]" label="[:]/\/\/\[:] баян" />
        <menuitem cb_text="[:]|||[:]" label="[:]|||[:] баян" />
        <menuitem cb_text="(_!_)" label="(_!_) задница" />
        <menuitem cb_text="()()" label="()() задница" />
       
        
          </menupopup>
             </menu>
    </menupopup>
));
this.type = "menu";
this.orient = "horizontal";
this.insertText = function(str) {
    var command = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(command);
    if(controller && controller.isCommandEnabled(command)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(command, params);
    }
};
function parseFromXML(xml) {
    var pp = XML.prettyPrinting;
    XML.prettyPrinting = false;
    var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement;
    XML.prettyPrinting = pp;
    return elt;
}

var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else {
    setTimeout(that.hideDropMarker, 10);
  }
}
this.hideDropMarker();



25-05-2011 22:09:28
Текстовые смайлы(Азия)(Firefox3.6-5.0)
Вставка текстовых смайлов.В основе кнопки код Infocatcher
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%28%u0410%u0437%u0438%u044F%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0Athis.appendChild%28parseFromXML%28%0A%20%20%20%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.insertText%28event.target.getAttribute%28%27cb_text%27%29%29%3B%22%3E%0A%20%3Cmenu%20label%3D%22%u042D%u043C%u043E%u0446%u0438%u044F%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28n_n%29%22%20label%3D%22%28n_n%29%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_%5E%29%22%20label%3D%22%28%5E_%5E%29%u0440%u0430%u0434%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3C_%3E%29%22%20label%3D%22%28%3C_%3E%29%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28v_v%29%22%20label%3D%22%28v_v%29%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E%20%5E%29%22%20label%3D%22%28%5E%20%5E%29%u0443%u043B%u044B%u0431%u043A%u0430%20%u0447%u0435%u0440%u0435%u0437%20%u0441%u0438%u043B%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E_%3C%29%22%20label%3D%22%28%3E_%3C%29%u0437%u043B%u043E%u0441%u0442%u044C/%u043A%u0430%u0442%u0435%u0433%u043E%u0440%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E_%3E%29%22%20label%3D%22%28%3E_%3E%29%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3C_%3C%29%22%20label%3D%22%28%3C_%3C%29%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%A8%29%22%20label%3D%22%28-_-%A8%29%u0441%u043A%u043E%u043D%u0444%u0443%u0436%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E_%5E%A8%22%20label%3D%22%5E_%5E%A8%u0441%u043C%u0443%u0449%u0451%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22*%5E_%5E*%22%20label%3D%22*%5E_%5E*%u0441%u043C%u0443%u0449%u0435%u043D%u043D%u043E%u0441%u0442%u044C%20%u0441%20%u043F%u043E%u043A%u0440%u0430%u0441%u043D%u0435%u043D%u0438%u0435%u043C%22%20/%3E%20%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%23%29%22%20label%3D%22%28-_-%23%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%A4%29%22%20label%3D%22%28-_-%A4%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-+%29%22%20label%3D%22%28-_-+%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o_o%29%22%20label%3D%22%28o_o%29%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%280_0%29%22%20label%3D%22%280_0%29%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28O_o%29%22%20label%3D%22%28O_o%29%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o_O%29%22%20label%3D%22%28o_O%29%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28V_v%29%22%20label%3D%22%28V_v%29%u043D%u0435%u043F%u0440%u0438%u044F%u0442%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28@_@%29%22%20label%3D%22%28@_@%29%u043E%u0431%u0430%u043B%u0434%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%25_%25%29%22%20label%3D%22%28%25_%25%29%u0443%u0441%u0442%u0430%u043B%u043E%u0441%u0442%u044C%20%u0433%u043B%u0430%u0437%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28u_u%29%22%20label%3D%22%28u_u%29%u0434%u0435%u043F%u0440%u0435%u0441%u0441%u0438%u044F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3Ex%3C%21%29%22%20label%3D%22%28%3Ex%3C%21%29%u0447%u0435%u0440%u0442%21%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228%28%3E_%3C%298%22%20label%3D%228%28%3E_%3C%298%u0440%u0435%u0432%u043D%u0438%u0432%u044B%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E%3E%29%22%20label%3D%22%28%3E%3E%29%u043A%u043E%u0441%u043E%u0439%20%u0432%u0437%u0433%u043B%u044F%u0434%2C%20%u043D%u0435%u0434%u043E%u0432%u0435%u0440%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%280_%3C%29%22%20label%3D%22%280_%3C%29%u043D%u0435%u0440%u0432%u043D%u044B%u0439%20%u0442%u0438%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28*_*%29%22%20label%3D%22%28*_*%29%u0444%u0430%u043D%u0430%u0442%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22-__-%22%20label%3D%22-__-%u0444%u043B%u0435%u0433%u043C%u0430%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C/%AB%u043C%u0434%u0430-%u0430-%u0430%u2026%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%289_9%29%22%20label%3D%22%289_9%29%u043D%u0435%20%u0441%u043F%u0430%u043B%20%u0432%u0441%u044E%20%u043D%u043E%u0447%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D__%3D%22%20label%3D%22%3D__%3D%u0441%u043E%u043D%u043D%u044B%u0439%20%u0438%u043B%u0438%20%AB%u0434%u043E%u0441%u0442%u0430%u043B%u0438%u2026%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-.-%29Zzz.%22%20label%3D%22%28-.-%29Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%29Zzz.%22%20label%3D%22%28-_-%29Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%3B%29%22%20label%3D%22%28-_-%3B%29%u0431%u043E%u043B%u0435%u0437%u043D%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%u0425_%u0445%29%22%20label%3D%22%28%u0425_%u0445%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28+_+%29%22%20label%3D%22%28+_+%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%u0445_%u0445%29%22%20label%3D%22%28%u0445_%u0445%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_%7E%29%22%20label%3D%22%28%5E_%7E%29%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_-%29%22%20label%3D%22%28%5E_-%29%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B_%3B%29%22%20label%3D%22%28%3B_%3B%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28T_T%29%22%20label%3D%22%28T_T%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28TT.TT%29%22%20label%3D%22%28TT.TT%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28ToT%29%22%20label%3D%22%28ToT%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22Q__Q%22%20label%3D%22Q__Q%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3DX%3D%22%20label%3D%22%3DX%3D%u0440%u0443%u043A%u043E%u043F%u043E%u0436%u0430%u0442%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E%7D%7B%5E%22%20label%3D%22%5E%7D%7B%5E%u043B%u044E%u0431%u043E%u0432%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E3%5E%29%22%20label%3D%22%28%5E3%5E%29%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3D%5E.%5E%3D%29%22%20label%3D%22%28%3D%5E.%5E%3D%29%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D%5E_%5E%3D%22%20label%3D%22%3D%5E_%5E%3D%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28O%2Co%29%22%20label%3D%22%28O%2Co%29%u0441%u043E%u0432%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E..%5E%22%20label%3D%22%5E..%5E%u0441%u0432%u0438%u043D%u044C%u044F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22///_%u0422%22%20label%3D%22///_%u0422%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22T_%5C%5C%5C%22%20label%3D%22T_%5C%5C%5C%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22///_%5E%22%20label%3D%22///_%5E%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E_%5C%5C%5C%22%20label%3D%22%5E_%5C%5C%5C%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%A8%5C%28%u043E_%u041E%29/%A8%29%22%20label%3D%22%28%A8%5C%28%u043E_%u041E%29/%A8%29%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28jIj%29%22%20label%3D%22%28jIj%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B%2C%3B%29%22%20label%3D%22%28%3B%2C%3B%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o%2C.%2CO%29%22%20label%3D%22%28o%2C.%2CO%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22Y%28O%2C%2C%2C%2CO%29Y%22%20label%3D%22Y%28O%2C%2C%2C%2CO%29Y%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28x%28x_%28x_x%28%u041E_%u043E%29x_x%29_x%29x%29%22%20label%3D%22%28x%28x_%28x_x%28%u041E_%u043E%29x_x%29_x%29x%29%u0436%u0438%u0432%u043E%u0439%20%u0441%u0440%u0435%u0434%u0438%20%u0437%u043E%u043C%u0431%u0438%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-%28-_%28-_-%28%u041E_%u043E%29-_-%29_-%29-%29%22%20label%3D%22%28-%28-_%28-_-%28%u041E_%u043E%29-_-%29_-%29-%29%u043F%u0440%u043E%u0441%u043D%u0443%u043B%u0441%u044F%20%u0432%20%u043C%u0435%u0442%u0440%u043E%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22@-_-@%22%20label%3D%22@-_-@%u043E%u0432%u0435%u043D%2C%20%u0431%u0430%u0440%u0430%u0448%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%20%20%20%3C/menupopup%3E%0A%29%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.insertText%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28command%29%3B%0A%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28command%29%29%20%7B%0A%20%20%20%20%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Afunction%20parseFromXML%28xml%29%20%7B%0A%20%20%20%20var%20pp%20%3D%20XML.prettyPrinting%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20false%3B%0A%20%20%20%20var%20elt%20%3D%20new%20DOMParser%28%29.parseFromString%28xml.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20pp%3B%0A%20%20%20%20return%20elt%3B%0A%7D%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0Athis.hideDropMarker%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Инициализация:

Выделить код

Код:

/*Initialization Code*/
this.appendChild(parseFromXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        oncommand="this.parentNode.insertText(event.target.getAttribute('cb_text'));">
 <menu label="Эмоция">
            <menupopup>
        <menuitem cb_text="(n_n)" label="(n_n)улыбка" />
        <menuitem cb_text="(^_^)" label="(^_^)радость" />
        <menuitem cb_text="(<_>)" label="(<_>)грусть" />
        <menuitem cb_text="(v_v)" label="(v_v)грусть" />
        <menuitem cb_text="(^ ^)" label="(^ ^)улыбка через силу" />
        <menuitem cb_text="(>_<)" label="(>_<)злость/категоричность" />
        <menuitem cb_text="(>_>)" label="(>_>)скептичность" />
        <menuitem cb_text="(<_<)" label="(<_<)скептичность" />
        <menuitem cb_text="(-_-¨)" label="(-_-¨)сконфуженность" />
        <menuitem cb_text="^_^¨" label="^_^¨смущённость" />
        <menuitem cb_text="*^_^*" label="*^_^*смущенность с покраснением" /> 
        <menuitem cb_text="(-_-#)" label="(-_-#)ярость" />
        <menuitem cb_text="(-_-¤)" label="(-_-¤)ярость" />
        <menuitem cb_text="(-_-+)" label="(-_-+)ярость" />
        <menuitem cb_text="(o_o)" label="(o_o)удивление" />
        <menuitem cb_text="(0_0)" label="(0_0)сильное удивление" />
        <menuitem cb_text="(O_o)" label="(O_o)очень сильное удивление" />
        <menuitem cb_text="(o_O)" label="(o_O)очень сильное удивление" />
        <menuitem cb_text="(V_v)" label="(V_v)неприятное удивление" />
        <menuitem cb_text="(@_@)" label="(@_@)обалдение" />
        <menuitem cb_text="(%_%)" label="(%_%)усталость глаз" />
        <menuitem cb_text="(u_u)" label="(u_u)депрессия" />
        <menuitem cb_text="(>x<!)" label="(>x<!)черт!" />
        <menuitem cb_text="8(>_<)8" label="8(>_<)8ревнивый" />
        <menuitem cb_text="(>>)" label="(>>)косой взгляд, недоверие" />
        <menuitem cb_text="(0_<)" label="(0_<)нервный тик" />
        <menuitem cb_text="(*_*)" label="(*_*)фанатение" />
        <menuitem cb_text="-__-" label="-__-флегматичность/«мда-а-а…»" />
        <menuitem cb_text="(9_9)" label="(9_9)не спал всю ночь" />
        <menuitem cb_text="=__=" label="=__=сонный или «достали…»" />
        <menuitem cb_text="(-.-)Zzz." label="(-.-)Zzz.спящий" />
        <menuitem cb_text="(-_-)Zzz." label="(-_-)Zzz.спящий" />
        <menuitem cb_text="(-_-;)" label="(-_-;)болезненность" />
        <menuitem cb_text="(Х_х)" label="(Х_х)труп" />
        <menuitem cb_text="(+_+)" label="(+_+)труп" />
        <menuitem cb_text="(х_х)" label="(х_х)труп" />
          </menupopup>
             </menu>
 <menu label="Действие">
            <menupopup>
        <menuitem cb_text="(^_~)" label="(^_~)подмигивать" />
        <menuitem cb_text="(^_-)" label="(^_-)подмигивать" />
        <menuitem cb_text="(;_;)" label="(;_;)плакать" />
        <menuitem cb_text="(T_T)" label="(T_T)плакать" />
        <menuitem cb_text="(TT.TT)" label="(TT.TT)плакать" />
        <menuitem cb_text="(ToT)" label="(ToT)плакать" />
        <menuitem cb_text="Q__Q" label="Q__Qплакать" />
        <menuitem cb_text="=X=" label="=X=рукопожатие" />
        <menuitem cb_text="^}{^" label="^}{^любовь" />
        <menuitem cb_text="(^3^)" label="(^3^)поцелуй" />
          </menupopup>
             </menu>
 <menu label="Персонаж">
            <menupopup>
        <menuitem cb_text="(=^.^=)" label="(=^.^=)кошка(ня)" />
        <menuitem cb_text="=^_^=" label="=^_^=кошка(ня)" />
        <menuitem cb_text="(O,o)" label="(O,o)сова" />
        <menuitem cb_text="^..^" label="^..^свинья" />
        <menuitem cb_text="///_Т" label="///_Тэмо-кид" />
        <menuitem cb_text="T_\\\" label="T_\\\эмо-кид" />
        <menuitem cb_text="///_^" label="///_^эмо-кид" />
        <menuitem cb_text="^_\\\" label="^_\\\эмо-кид" />
        <menuitem cb_text="(¨\(о_О)/¨)" label="(¨\(о_О)/¨)Медвед/«Превед!»" />
        <menuitem cb_text="(jIj)" label="(jIj)Ктулху" />
        <menuitem cb_text="(;,;)" label="(;,;)Ктулху" />
        <menuitem cb_text="(o,.,O)" label="(o,.,O)Ктулху" />
        <menuitem cb_text="Y(O,,,,O)Y" label="Y(O,,,,O)YКтулху" />
        <menuitem cb_text="(x(x_(x_x(О_о)x_x)_x)x)" label="(x(x_(x_x(О_о)x_x)_x)x)живой среди зомби" />
        <menuitem cb_text="(-(-_(-_-(О_о)-_-)_-)-)" label="(-(-_(-_-(О_о)-_-)_-)-)проснулся в метро" />
        <menuitem cb_text="@-_-@" label="@-_-@овен, барашка" />
          </menupopup>
             </menu>
    </menupopup>
));
this.type = "menu";
this.orient = "horizontal";
this.insertText = function(str) {
    var command = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(command);
    if(controller && controller.isCommandEnabled(command)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(command, params);
    }
};
function parseFromXML(xml) {
    var pp = XML.prettyPrinting;
    XML.prettyPrinting = false;
    var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement;
    XML.prettyPrinting = pp;
    return elt;
}
var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else {
    setTimeout(that.hideDropMarker, 10);
  }
}
this.hideDropMarker();

Прокрутка страницы( Firefox 3.6+ )
Даёт возможность прокрутить страницу налево или направо до края и прокрутить страницу верх в самое начало или вниз до конца. Колёсиком мыши на кнопке можно прокручивать страницу верх - вниз, скорость прокрутки можно менять в коде инициализации кнопки.

ЛКМ => Прокрутить страницу налево до края,
Длинный ЛКМ => Прокрутить страницу на самый вверх,
СКМ => Контекстное меню кнопки,
ПКМ => Прокрутить страницу направо до края,
Длинный ПКМ => Прокрутить страницу на самый вниз,
Колёсиком мыши => Прокручивать страницу верх - вниз.

Код кнопки и инициализация:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAFBIAAAEAIAAQBgAAFgAAACgAAAAUAAAAJAAAAAEAIAAAAAAA6AUAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A+Pj4DP///wCRkZGwmJiYpfLy8hT///8A/Pz8BPz8/AT///8A8vLyFJiYmKWRkZGw////APj4+Az///8A////AP///wD///8A////AP///wD4+PgM////AJGRkbCYmJil8vLyFP///wD8/PwE/Pz8BP///wDy8vIUmJiYpZGRkbD///8A+Pj4DP///wD///8A////AP///wD///8A+vr6Cf///wClpaWVOzs7/52dnYv8/PwJ////AP39/QT9/f0E////APz8/AmdnZ2LOzs7/6WlpZX///8A+vr6Cf///wD///8A/f39AP///wB9fX0JVFRUAF5eXpVfX1//aGhoi0tLSwl9fX0A7u7uBO7u7gR9fX0AS0tLCWhoaItfX1//Xl5elVRUVAB9fX0J////AP39/QD9/f0A////B319fQBUVFS5Xl5e/19fX/9oaGjzS0tL/319fcDu7u4f7u7uH319fcBKSkr/ampq81xcXP9TU1P/jIyMuf///wD7+/sH////AP39/QD///8HfX19AFRUVLleXl7/X19f/2hoaPNLS0v/fX19wO7u7h/u7u4ffX19wEpKSv9qamrzXFxc/1NTU/+MjIy5////APv7+wf///8A/f39Av///wB9fX3RVFRU/15eXv1fX1//aGho9EtLS/99fX3A7u7uH+7u7h99fX3AS0tL/2hoaPRfX1//Xl5e/VRUVP99fX3R////AP39/QL9/f0C////AH19fdFUVFT/Xl5e/V9fX/9oaGj0S0tL/319fcDu7u4f7u7uH319fcBLS0v/aGho9F9fX/9eXl79VFRU/319fdH///8A/f39Av39/QD///8HfX19AFRUVLleXl7/X19f/2hoaPNLS0v/fX19wO7u7h/u7u4ffX19wEpKSv9qamrzXFxc/1NTU/+MjIy5////APv7+wf///8A/f39AP///wd9fX0AVFRUuV5eXv9fX1//aGho80tLS/99fX3A7u7uH+7u7h99fX3ASkpK/2pqavNcXFz/U1NT/4yMjLn///8A+/v7B////wD9/f0A////AH19fQlUVFQAXl5elV9fX/9oaGiLS0tLCX19fQDu7u4E7u7uBH19fQBKSkoJampqi1xcXP9TU1OVjIyMAP///wn7+/sA////AP39/QD///8AfX19CVNTUwBoaGiVR0dH/6CgoIv6+voJ////AP39/QT9/f0E////APr6+gmioqKLRUVF/11dXZWLi4sA////Cfv7+wD///8A////AP///wD///8A+Pj4DP///wCRkZGwmJiYpfLy8hT///8A/Pz8BPz8/AT///8A8vLyFJiYmKWRkZGw////APj4+Az///8A////AP///wD///8A////AP///wD4+PgM////AJGRkbCYmJil8vLyFP///wD8/PwE/Pz8BP///wDy8vIUmJiYpZGRkbD///8A+Pj4DP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20........%0Aself.onclick%20%3D%20this.onmousedown%20%3De%3D%3E%20%7B%0A%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27mousedown%27%20%26%26%20%21e.button%20%29%20%20%20%20%20%20//%20%u0434%u043B%u0438%u043D%u043D%u044B%u0439%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20self.taimer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20delete%20self.taimer%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%27cmd_scrollTop%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27mousedown%27%20%26%26%20e.button%20%3D%3D%202%20%29%20%20//%20%u0434%u043B%u0438%u043D%u043D%u044B%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20self.taimer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20delete%20self.taimer%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%27cmd_scrollBottom%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%20%20%20%20%20%20%20%20%20//%20%u0441%u0440%u0435%u0434%u043D%u0438%u0439%20%u043A%u043B%u0438%u043A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27click%27%20%26%26%20self.taimer%20%29%20%7B%20%20%20%20%20%20//%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20clearTimeout%28self.taimer%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20content.scrollTo%280%2C%20content.scrollY%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27click%27%20%26%26%20e.button%20%3D%3D%202%20%29%20%7B%20%20%20%20//%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20content.scrollTo%28content.scrollMaxX%2C%20content.scrollY%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043F%u0440%u043E%u043A%u0440%u0443%u0447%u0438%u0432%u0430%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0435%u0440%u0445%20-%20%u0432%u043D%u0438%u0437%20........%0Avar%20speed%20%3D%2014%3B%20//%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%0Athis.onwheel%20%3De%3D%3E%20e.deltaY%20%3C%200%20%3F%20content.scrollBy%280%2C%20-speed%29%20%3A%20content.scrollBy%280%2C%20speed%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20........%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043D%u0430%u043B%u0435%u0432%u043E%20%5Cn%u0414%u041B%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0432%u0435%u0440%u0445%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043D%u0430%u043F%u0440%u0430%u0432%u043E%20%5Cn%u0414%u041F%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u043D%u0438%u0437%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u043E%u0436%u043D%u043E%20%u043F%u0440%u043E%u043A%u0440%u0443%u0447%u0438%u0432%u0430%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0435%u0440%u0445%20-%20%u0432%u043D%u0438%u0437%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ........
self.onclick = this.onmousedown =e=> {

   if ( e.type == 'mousedown' && !e.button )      // длинный левый клик
        self.taimer = setTimeout(()=> {         
           delete self.taimer;

           goDoCommand('cmd_scrollTop');
        }, 500);
        
   if ( e.type == 'mousedown' && e.button == 2 )  // длинный правый клик
        self.taimer = setTimeout(()=> {         
           delete self.taimer;
           
           goDoCommand('cmd_scrollBottom');
        }, 500);
        
   if ( e.button == 1 ) gShowPopup(this);         // средний клик           
        
   if ( e.type == 'click' && self.taimer ) {      // левый клик
        clearTimeout(self.taimer);
                  
        content.scrollTo(0, content.scrollY);
        }
 
   if ( e.type == 'click' && e.button == 2 ) {    // правый клик
        e.preventDefault();
          
        content.scrollTo(content.scrollMaxX, content.scrollY);
        }
};


// Колёсиком мыши на кнопке прокручивать страницу верх - вниз ........
var speed = 14; // скорость прокрутки
this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed);


// Подсказка для кнопки ........
this.tooltipText = "Л: Прокрутить страницу налево \nДЛ: Прокрутить страницу вверх\
                    \nП: Прокрутить страницу направо \nДП: Прокрутить страницу вниз\
                    \nКолёсиком мыши на кнопке можно прокручивать страницу верх - вниз";

BB: Color Menu ( Firefox24 + ) от 13.01.2015.
Кнопка открывает меню с подборкой BB цветов(кодов) для форумов. Выделите текст в поле текстового ввода и нажмите в меню нужный цвет.

Пример как добавлять новые цвета в кнопку:
Добавляем в кнопку новый пункт Neon Green за White
В коде инициализации добавляем за:

Выделить код

Код:

"#ffffff,White",

новую строку:

Выделить код

Код:

"#affe31,Neon Green",

Нажать Ok или Сохранить


Код кнопки и инициализация:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EBB%3A%20Color%20Menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADU0lEQVR4Xk3OW0ybBRyH4fc7lLZQyqGwclqLG5hFbvCAxpvFEBPkwkkWFo3ZlW43CxckapZ44Y0XvXAbFwaSiWJGoiFzHjKzicJ0w4XJQZfpaORQDqVdO6At9GP03L9NRtQ3efK7/SmXLD+RR4jqxUS1A+xZnaURq/2VrFM5ul1Mc4kbKppYdDQyUV7PqLUSw1wFajmIAir/pgB5t0mX86XFuYsq9CQTdERidGzE6InscTEP53UVt/BfqoJGARnZa6su08cP1xafdtVqFTXVUFsDNjukNVgyqJiMcjquMm7TacsLiICakgjxXMhVby8eaXM1NjXWFeGqU3C7wH0QGhvhiUPQ4IJMKfycpilaxEi5CZfFBHjUD2wD1o8Hg8/GJdQlcv+UyO2zIlc9Ip+cEzn3qYjnmsjZKZFT8yIdD0W6EjkZkezgFUna1KSEO5+sqDxR5zBRZc/Q4ICDNeCqL3CD2wX1BTUN4KgTDlQniFk28RI5AXudXLC83b/81GWR1+ZFzgREPHFJDWclOiYyPyNyd1XkRlxkOJMRj0TljCxLh8zKyYIhWenns7KTo8ZzQyLdP4r0Tor0eUW+CYn8kZCIb1du/HZXJhOb8p2EpE/+lF6ZkC75Vjrlsnwk06NqTrbIyDoQ2OeH/CqoAfL4mZu+hX/8FsbGPVSCwDoKQdKFfcQGaiQZ8AV3vZBdg/QKJHyPN71KlTNFy9NOaq1OlOkt4lteUvhIFpQQQ8PwqUbm4c2F2P0dHi3AoyXIBkAJgVZQeNL6vMIDZZbm8iPUzdhRtsNk8WMhthPFf1PVxPhhLrr8VXD7b9A3920AQcitYikKc+SlPX5Pf02r4xkq+ysoGjMoIzMcz65f13U9tZsR+fD7sK/9zRbrIbtZAS0N7IKYyAMmNY27Pcn1oS/4/MIVLC0KL4Rf9B22NSVVNEE34V9PGG986Z1bCkaXQQ2DHgQtgMpjOg/Qjk7R8lZZ3vfrGtf6Ro/fGZuqUdnPrDMTNOIvX7rjHbx6+15sYWme7cgKqZSfaGyNgH8pZpj/Gmg/3tr5bs/7A73v9Xq6X+8O6fwvk8ZaMpt9Z3ZxY2wxuXPUETQ3mxt0wuQW4yW5iV1natShmIxjrx77xVZdlEmn0/wDi3q+iH+UAK0AAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20........................%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20........................%0Avar%20colors%20%3D%20%5B%0A%09%22%23000000%2CBlack%22%2C%0A%09%22%23808080%2CGray%22%2C%0A%09%22%23000066%2CD-Blue%22%2C%0A%09%22%233366ff%2CM-Blue%22%2C%0A%09%22%2333ccff%2CL-Blue%22%2C%0A%09%22%23ff0000%2CRed%22%2C%0A%09%22%23006600%2CD-Green%22%2C%0A%09%22%2333cc00%2CM-Green%22%2C%0A%09%22%2399FF99%2CL-Green%22%2C%0A%09%22%23ffff00%2CYellow%22%2C%0A%09%22%23964B00%2CBrown%22%2C%0A%09%22%23FF4F00%2COrange%22%2C%0A%09%22%23FFC0CB%2CPink%22%2C%0A%09%22%23ffffff%2CWhite%22%2C%0A%09%0A%20%20%20%09%22separator%22%2C%0A%0A%09%22%23006600%2Csome%201%22%2C%0A%09%22%23ff0000%2Csome%202%22%2C%0A%09%22%23e30077%2Csome%203%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Acolors.forEach%28%28str%29%3D%3E%20%7B%20%0A%20%20%20if%20%28%20str%20%3D%3D%20%22separator%22%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20color%20%3D%20str.split%28%22%2C%22%29%5B0%5D%2C%20label%20%3D%20str.split%28%22%2C%22%29%5B1%5D%2C%0A%20%20%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20insertBBcode%28color%29%3B%20%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%20%20%20%0A%20%20%20//%20%u0434%u043B%u044F%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u044F%20%u0446%u0432%u0435%u0442%u043D%u044B%u0445%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0432%20%u043C%u0435%u043D%u044E%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u043C%20CSS%20%u043A%u043E%u0434%20%u043A%20%u0432%u0441%u0435%u043C%20%u043F%u0443%u043D%u043A%u0442%u0430%u043C%20%u043C%u0435%u043D%u044E%20....%0A%20%20%20%28function%28css%29%20%7B%0A%20%20%20%20%20%20var%20pi%20%3D%20document.createProcessingInstruction%28%27xml-stylesheet%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27type%3D%22text/css%22%20href%3D%22data%3Atext/css%3Butf-8%2C%27%20+%20encodeURIComponent%28css%29%20+%20%27%22%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20document.insertBefore%28pi%2C%20document.documentElement%29%3B%20%20%20%0A%20%20%20%20%7D%29%28%27menuitem%5Blabel%3D%22%27%20+%20label%20+%20%27%22%5D%3E%20.menu-iconic-left%20%3E%20.menu-iconic-icon%20%7B%20background-color%3A%27%20+%20color%20+%20%27%21important%3B%7D%27%29%3B%0A%20%20%20%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20bb%20%u043A%u043E%u0434%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%20........................%0Afunction%20insertBBcode%28color%29%20%7B%0A%20%20%20var%20textBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20var%20text%20%3D%20textBox.value.substring%28textBox.selectionStart%2C%20textBox.selectionEnd%29%3B%0A%20%20%0A%20%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20%22%5Bcolor%3D%22%20+%20color%20+%20%22%5D%22%20+%20text%20+%20%22%5B/color%5D%22%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши ........................
this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); 


// Создать меню ........................
var colors = [
    "#000000,Black",
    "#808080,Gray",
    "#000066,D-Blue",
    "#3366ff,M-Blue",
    "#33ccff,L-Blue",
    "#ff0000,Red",
    "#006600,D-Green",
    "#33cc00,M-Green",
    "#99FF99,L-Green",
    "#ffff00,Yellow",
    "#964B00,Brown",
    "#FF4F00,Orange",
    "#FFC0CB,Pink",
    "#ffffff,White",
    
       "separator",

    "#006600,some 1",
    "#ff0000,some 2",
    "#e30077,some 3"
            ];
                        
var menuPopup = self.appendChild(document.createElement("menupopup"));
colors.forEach((str)=> { 
   if ( str == "separator" ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var color = str.split(",")[0], label = str.split(",")[1],
   mItem = document.createElement("menuitem");
   mItem.setAttribute("label", label);
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.onclick =()=> insertBBcode(color); 
   menuPopup.appendChild(mItem);
   
   // для создания цветных иконок в меню добавляем CSS код к всем пунктам меню ....
   (function(css) {
      var pi = document.createProcessingInstruction('xml-stylesheet',
              'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
               return document.insertBefore(pi, document.documentElement);   
    })('menuitem[label="' + label + '"]> .menu-iconic-left > .menu-iconic-icon { background-color:' + color + '!important;}');
   
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


// Добавить bb код в текстовое поле ........................
function insertBBcode(color) {
   var textBox = document.commandDispatcher.focusedElement;
   var text = textBox.value.substring(textBox.selectionStart, textBox.selectionEnd);
  
   var cmd = "cmd_insertText";
   var controller = document.commandDispatcher.getControllerForCommand(cmd);
   var controller = controller.QueryInterface(Ci.nsICommandController);
   var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
   params.setStringValue("state_data", "[color=" + color + "]" + text + "[/color]");
   controller.doCommandWithParams(cmd, params);
};


Спасибо Dumby за помощь с кнопкой.

userChrome.css ( Firefox 3.6+ )
открывает файл userChrome.css в внешнем текстовом редакторе по умолчанию.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EuserChrome.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyhJREFUOMtdk11oW3UYh59zzj8nyUnz2TSmaWfT2lY3nWvRi7KBX3gxxBsHguKY84OyG9ErL7yQgdfFKYKI4gQvnKDI5kVRkNWqGyg6R9utpraNXWzztTRZ0pPk5Jz/8aJbaf3Be/e+Dw8v76twO2ff63uj0ejMBHziRZ9P/VEX6uvArCYCj0i5VbXcePr5yT/G+V80gOnpqx9n5+tv9QYap2rWSxNJY/G5n+ZPpwe6jUfrzvF0NNR/n99uJOPpl080LJlNpcfq3eGDzVLpmhQA5ZvtsSdPvIOz/Db37nsFf3sUbd8ghycmKOVWGThwjFuVAlkuhX6+EjsiPCKTCOmVhQVsASClVHtSAazUGVzHReNp9g+DL+xhqHsYAFuEmZuf8wmhJhXXjhCwjMmHJrcBruuqEoiHPQhgy7RxJSgKWLnz5ItVPp0u4JjrXe+/sHz0yoqSPXfZX92M5231zjIcYL3WIVux2GxJGpZEupD/5Qzh1iz3jw4imxuEjXwiHmoe99B5rGLKxA7gjkFvTCcV00lFFNT5N4mnoijqdlvHktRKdYYTq0NTp5iqNZ0hsdvg6pqJZUl8msLdMZ3fP/mMo8cO47SzjChfwoEStgVW1WXpekV37OCzewyWNlrMrZk0O5KFf5scfGYKUDC32vQaOcZHW3SnwnhDI3z9vafasTB2DGxgsNeHZUk0VSER0tjsPMyv776GHhzniadUfrvUplG0IWHLa6aRi6jOithtkIh6QIK0JfmyRfKuISInZ3ngwf18dbKfizdj9loleqtLc6qGRgbUi3sALQk4Ll26ynCfn6ihcU/yEB7g1QtF2h+ctRc//Gheuu5MROssK5Dds0QJuIBhCHyasgN2AAXQhGYHE31FT6d52WM3Mk67XtwDiNw+JHYN7S7TbJtC91Z0n1EM+nvKhzbXTAGQ+eufC4+3RsYMj8NW3WTp71U7v1G084WyvZhZaeVubDT+nLteFkKsj46kl1Upqj09mnX6m5ntZ/r2uy8+P//DuVq+UDjiujLk9epqOBS0DMNver16VVWV9fRA/416w1xstzp51+etpFIpC+A/x3JsuL3cxBcAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Components.interfaces.nsIProperties%29.get%28%22UChrm%22%2C%20Components.interfaces.nsIFile%29%3B%20%0Afile.append%28%22userChrome.css%22%29%3B%20%20%20%20%20%0Afile.launch%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile); 
file.append("userChrome.css");     
file.launch();


userContent.css ( Firefox 3.6+ )
открывает файл userContent.css в внешнем текстовом редакторе по умолчанию.
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EuserContent.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM08tJDdQK3IgOROtHzcSuyY9Gb00Sii3PlMyrUVZOZ1HWjuDQ1c3ZjdNKj5FWjomTWZAEICAgAIAAAAAAAAAAHqoeoHo7OH/9fTr/+jq4P/Eybv7q7Oj95Sfi/NufWPrUWRH3yQ7F8soPxuxTV9BdktjRiJmZmYIAAAAAAAAAAChx6DP8PfK////1f///9n////d////4v///+b////r////7/////P/jZqH6UZZPZlIXEQyUV5RDkBAgAIAAAAAocegz/D3zf/w+sX/7fnE//z+3f///+X////q////7v////L////2/5ehkfNAUjmrO0k+SDc9QyIwMEAMAAAAAKHHoM/w99D/8PrH/+35x//y+tP/8/vZ//3+6v////D////1////+f+Tno73KjcswSo2NIErMTxeKzE9IgAAAAChx6DP8PfS//L6z//w+s//7PjN/9jytf/n983/v9Cx/+353f9NFZX/OidU+ygxNu0rLkLdKDMsqSgyMkIAAAAAocegz/D31P/h9bn/2/Oz/930uf/n98z/0NXG/18Oof9sP6f/tjnp/20gpv9XGJr/bSma/SUzIs8nMDKDAAAAAKHHoM/w99j/yO2Y/73piv/Z8rb/1fGy/72h1/++T/L/sD3k/7U36P+nJ9v/pRzZ/5wty/8vKkzrKjIspQAAAAChx6DP8Pfa/+H1vf/b87f/3vS///D63f9sFKr/vk7y/7tE7v+rU8//gS+q/4sNxv+OCMT/dSWf+zAyMZsAAAAAocegz/D33f///+z////v////9P/9+vj/0HT7/8JR9f/HZPH/qqqq/1dEYf+RDcr/ngnR/6k30/U0NDRGAAAAAKHHoM/w99//8PrY/+351v/t+dr/7fne//z++f+oQOH/xWLw/6qqqv9dRmb/phrZ/4gqrd1BN0ZoPTdDJAAAAAChx6DP8Pfi////8v////b/9fvr//P76v/9/vv/47D5/82g4f+EiX//Zl9o/5wyyul6M5mBQTxBKEc5VQ4AAAAAosihzfD35P/w+t7/7fnd/+354P/t+eH//P76////////////7O/q/3B5a/NBVTihQVM5OFFRRhIzZmYEAAAAAKTKo8vW7M//s2rM/9Dqz//Jrdj/tM64/+zb8v/Qut3/+vf8/+jg7v+cppjrPVM0iUJXOChGXUYIAAAAAAAAAAC30bebeGmL/4kzqP+Fh5T/lym1/2yjc/+Vaq7/lqWh/6Z9uP+cS7j/bodw3TFBLE44UDAaK1UrBAAAAAAAAAAAAAAAAJEbn3CFFpMwjRqej5UcplCZHqy/mR6sgZ0pr7+bHq2vmjKnzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Components.interfaces.nsIProperties%29.get%28%22UChrm%22%2C%20Components.interfaces.nsIFile%29%3B%20%0Afile.append%28%22userContent.css%22%29%3B%20%20%20%20%20%0Afile.launch%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile); 
file.append("userContent.css");     
file.launch();


Предварительно эти файлы должны быть созданы пользователем.

Просмотр и сохранение иконок сайтов(Firefox3.6-5.0)
При нажатии на кнопку любой клавишей мыши открывается меню: Показать иконку сайта - иконка кнопки заменяется на иконку текущего сайта
Сохранить иконку сайта - Появляется диалог сохранения, в котором следует указать место сохранения и название иконки. После этого происходит сохранение. Восстановить иконку кнопки - первоначальный вид иконки кнопки. Меню - контекстное меню кнопки. Важно: Если уже установлена любая другая кнопка, сохраняющая иконку сайта, то работать не будет до удаления этой(другой) кнопки и перезапуска браузера.

скрытый текст
Код кнопки::

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%20%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u0435%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0441%u0430%u0439%u0442%u043E%u0432%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAADMklEQVQ4y22SS2hcZRzFz/e4r5k7rySTJs3EajVtbDomtBpKRKiFYretz4VuFDfFpYhuxI3rplRBSqGGVgtuAtXaLFUEkSJiM0mjNIZhJqnDzZ2Z3Ll37vO7n4umItrf6n/gnD9ncQgewqVLC2CMEdve5o1mE6urK4mu6/Lr64v/8/IHx+cLi5iZnoRI04yuKids2zplGNq4lKn0/f7GnbU7S8XS4A+5fN5v1Df+ecAA4P0Pz6N6+AlYdmcsn8ueU1X+kdsP5sJEHsyY+cm9o6PHSsX8aSHEeN8Lb41Vxt227SBNYxAAuHxlEX4QFQ/sr1yMkuTl23cttH0NoaDwgwhpKlEpRBg2PNzb2rpqtZyzuqH25s9/DHLukwXMHjmEHcd9q+cFnzW6hD82MQmmGrC6PbRsFy1XwUbThuI1cObpTKQS8qamq1/Ulv8AnXumiuGhkiGEeLETKvzkiWPYVylB0SmoAjAVUHMcSSaDn9pDWFoJ1HzRPDPz1JPqyReeA02SGG3bPmQ7wezs0SkMFAyAElCFgmkMTGdgBodDAFow8Eu3gPW/3LlOx54QiQB1XQ/tjjPJNGOgMlKCJBKEE1CVgWkM3OBwOYWjUOglDYFhotlD2dlxDnqeB+77AWSaZplaJJwzkDgF4RRUlSCpD8eqo9ZK4Xf6kDEFaAahECwIomwoJLgQCZCm21EiEj8WnFAKxgi4SuFlsrhtlOEOE2TNGIknIH2JgplESRxtx4KAx1EMBrEsUm/zT8vZ9+hIEV2R4lY3wI9dwMoNQctKcF8g2Ikw1PewN4t6GISrMShoFMXobDbvqpF7bWW9jgvLFuZ/7+D6lgsrTEClBCUAUykyGsGzJV+asn/l9Ksv1aNwd0ifXrgImYQjQje/7DxSfb63ZwyaxkHSFAAgCIXnRxiyNjHYqC3JoP8GU7Tts++8fX/KN5e+wY2bN9zXX3uFlRP36JFy3pweMMlUjmO/kmIwcKCv18Tat181rl29PD/x+MTP733wLgDcb/AvCrqmHz88VT1enZ45UN4zWgIkWve22su//bpWW619F0XR9wB6DwIED0cDYAIwdrW/G4r+a/wbqOd9YAmWl1IAAAAldEVYdGNyZWF0ZS1kYXRlADIwMDktMDktMjhUMTE6Mjc6NTUtMDQ6MDDs/LGJAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5LTA3LTAzVDEwOjAwOjI0LTA0OjAwYkMTwQAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20Cb%20%3D%20custombuttons%3B%0Avar%20orgImg%3Dthis.image%3B%0A//%20Three%20functions%20for%20testing%2C%20this.one%28%29%20and%20this.two%28%29%20and%20this.three%28%29%0Athis.one%20%3D%20function%28%29%0A%7B%0A%09this.image%3Ddocument.getElementById%28%22page-proxy-favicon%22%29.src%3B%0A%7D%3B%0A%0Athis.two%20%3Dfunction%28%29%0A%7B%0A%09this.image%3Ddocument.getElementById%28%22page-proxy-favicon%22%29.src%3B%0A%09openUILinkIn%28this.image%2C%22save%22%29%3B%0A%7D%3B%0A%0Athis.three%20%3Dfunction%28%29%0A%7B%0A%09this.image%3DorgImg%3B%0A%7D%3B%0A//%20Our%20menu%20items%0Athis.ss%20%3D%20%5B%0A%20%20%7B%20label%3A%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0441%u0430%u0439%u0442%u0430%27%2C%20cmd%3A%20%27document.popupNode.one%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0441%u0430%u0439%u0442%u0430%27%20%20%2C%20cmd%3A%20%27document.popupNode.two%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27%u0412%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%27%20%20%2C%20cmd%3A%20%27document.popupNode.three%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%5D%3B%0A%0A//%20Our%20Initialization%20function%20for%20creating%20the%20context%20menu%2C%20setting%20up%20menuitems%20and%20telling%0A//%20custombuttons2%20extension%20to%20put%20cb%20context%20in%20a%20submenu%0Athis.mObj%20%3D%20Cb.getCbContextObj%28this%29%3B%0Athis.init%20%3D%20function%28x%29%20%7B%0A%20%20x.mObj.setSub%28%29%3B%0A%20%20var%20nItem%20%3D%20%7B%7D%2C%20mItem%20%3D%20%7B%7D%3B%0A%20%20document.getElementById%28CB2const.sCBCtxtMenu%29.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20for%28var%20i%20in%20x.ss%29%20%7B%0A%20%20%20%20nItem%20%3D%20new%20x.mObj.getItem%28%29%3B%0A%20%20%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20%20%20nItem.label%20%3D%20x.ss%5Bi%5D.label%3B%0A%20%20%20%20nItem.value%20%3D%20String%28i%29%3B%0A%20%20%20%20mItem%20%3D%20x.mObj.insertBefore%28nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%20%20%20%20this.ss%5Bi%5D.sItemId%20%3D%20mItem.id%3B%0A%20%20%20%20mItem.setAttribute%28%27oncommand%27%2Cx.ss%5Bi%5D.cmd%29%0A%20%20%7D%0A%20%20x.mObj.getItem%28%29%3B%0A%20%20nItem%20%3D%20x.mObj.getItem%28%29%3B%0A%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20this.separator%20%3D%20x.mObj.insertBefore%28%20nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%7D%0Athis.init%28this%29%3B%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.gShowPopup%28this%29%3B%27%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041B%u041A%u041C%3D%u041F%u041A%u041C%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

var Cb = custombuttons;
var orgImg=this.image;
// Three functions for testing, this.one() and this.two() and this.three()
this.one = function()
{
    this.image=document.getElementById("page-proxy-favicon").src;
};

this.two =function()
{
    this.image=document.getElementById("page-proxy-favicon").src;
    openUILinkIn(this.image,"save");
};

this.three =function()
{
    this.image=orgImg;
};
// Our menu items
this.ss = [
  { label: 'Показать иконку сайта', cmd: 'document.popupNode.one()', sItemId: '' },
  { label: 'Сохранить иконку сайта'  , cmd: 'document.popupNode.two()', sItemId: '' },
  { label: 'Восстановить иконку кнопки'  , cmd: 'document.popupNode.three()', sItemId: '' }];

// Our Initialization function for creating the context menu, setting up menuitems and telling
// custombuttons2 extension to put cb context in a submenu
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd)
  }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);

this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)');
this.setAttribute('ondblclick', 'custombuttons.gQuot.gShowPopup(this);');



17-06-2011 16:21:42
Ffolders+(Ubuntu) (Firefox5.0)
При нажатии на кнопку появляется меню из которого можно открыть: папку установки Firefox, папку текущего профиля, папку chrome текущего профиля, папку custombuttons текущего профиля, папку extensions текущего профиля.
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFfolders+%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADIklEQVQ4jXWSy2tcVRzHP79zzn3MI5km5tXG8TE10EiCaEWtTQuCaAW7cFFBqgi6EQRFBP8DsTsXLnRTUVxUECniC6Mo2CAuaqWtqEk176bNw0kyyczcufeec1wEl372X/h84SPzn51hcqap01azVK2YxvBQL6FtEfgMj+A9GAU/L7Rlrml6EdFGcH3lsH5itOzkwQOGI0P2bFa58/C5+eCN16rTD03uHFyeyXtWIskDEYWDfLPR6T0zvvxW7RZVVJ74/OXmh1dW7cvSW9S1z18YvjhVe6nneHjJZwsL8vrYJ0RDA8QuI3WQO4spVDjx/as8L+c93X2ysr67+eg7c/cba23sYsPp5H10ve7e7n7Fi/ZS3lqShIAst5QNbCUps6WD0mx4r10ubecAFysP6ACVhjE75UH1bPSF+bR+Uj9ZP6uuN5WSrKPqzVRJe1v9MfiI/G3ukFKUo0KlPGA8oEIlYQQZmr64wexyi6kkpms8odNuAwpcQNLYpBSlSKTRoRXvQQGoUOOjgP1Dngvrt/Lixpv8Vj2J7K6TJR0kS0gaW2RSYLE0QhxbfGgAMCBIKMRdmqszGRc7o8joISJbx9oQbzMyPLsu5nH5gVplhSwuYKIOexc8EBrKhZRfOMxHa0cJzTalqINK6ySqgvIdENgJAg7tW8XG3egw/c8ATCS0dYHT916jp/ot13e6ONb3F+P9dd6dfoD3Fo8jqkWtcgNdCnFaI6HaMwCPCgQdK5LEc+q2y0RFT952fDmZ8OvcKnIgYbcjHBmbw8QapxQqUODBIIIKxKOFoKj5c97x1Y+aSzf38Z2boN1fZbDZ4rmRWY7uX6KZR8SB39sIGJt5XKB83BPS3M189a6IiShkbXqYh51ipHKFU7UZxvo3cCZEW3zUFYi70fIuB2MdfvrCstw+0AeqIGGsZOIeOHbfTVDrYBw+EzqtAbLU4TNLsmm59tOKWIc3mZLFDyb/+SZpXX0qrJRaYVErUzAEBUMQKxyC7VhskpO1LGkrd+l2q/jx1MZkpmRJnnligHNfr/Uqxd3O74WF5/8RUIJzjt+ffqy//i8xcmhqNgdQTAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A%0Avar%20menu%20%3D%20%3Cmenupopup%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20onclick%3D%22this.parentNode.menuClick%28event%29%22%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22installation%20folder%22%20%20%20%20%20%20%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.FinstallFolder%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22profile%22%20%20%20%20%20%20%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fprofile%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22chrome%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fchrome%28event%29%22%7D/%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20label%3D%22custombuttons%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fcustombuttons%28event%29%22%7D/%3E%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20label%3D%22extensions%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fextensions%28event%29%22%7D/%3E%0A%0A%3C/menupopup%3E%3B%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Avar%20el%20%3D%20new%20DOMParser%28%29.parseFromString%28menu.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Athis.appendChild%28el%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.menuClick%20%3D%20function%28event%29%20%7B%0A%20%20event.preventDefault%28%29%3B%0A%20%20event.stopPropagation%28%29%3B%0A%20%20this.open%20%3D%20false%3B%0A%7D%0A%0Athis.FinstallFolder%20%3D%20function%28event%29%20%7B%0AstartProcess%28%22/usr/bin/nautilus%22%2C%5B%22/usr/lib/firefox-5.0%22%5D%29%3B%0Afunction%20startProcess%28path%2C%20args%29%20%0A%7B%0A%20%20%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20%20%20process.init%28file%29%3B%0A%20%20%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%3B%0A%7D%0A%0Athis.Fprofile%20%3D%20function%28event%29%20%7B%0A%20%20let%20propertiesService%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29%3B%0A%20%20let%20currProfD%20%3D%20propertiesService.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20let%20profileDir%20%3D%20currProfD.path%3B%0A%20%20let%20nsLocalFile%20%3D%20Components.Constructor%28%22@mozilla.org/file/local%3B1%22%2C%20%22nsILocalFile%22%2C%20%22initWithPath%22%29%3B%0A%20%20new%20nsLocalFile%28profileDir%29.reveal%28%29%3B%0A%7D%0A%0Athis.Fchrome%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22chrome%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.Fcustombuttons%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22custombuttons%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.Fextensions%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22extensions%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BID%3D%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

/*Initialization Code*/


/*Initialization Code*/


var menu = <menupopup
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  onclick="this.parentNode.menuClick(event)">
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="installation folder"      
       onclick={"document.getElementById('" + this.id + "').FinstallFolder(event)"}/>
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="profile"      
       onclick={"document.getElementById('" + this.id + "').Fprofile(event)"}/>
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="chrome"
       onclick={"document.getElementById('" + this.id + "').Fchrome(event)"}/>            
    <menuitem
      class="menuitem-iconic"
      image="chrome://global/skin/dirListing/folder.png"
      label="custombuttons"
      onclick={"document.getElementById('" + this.id + "').Fcustombuttons(event)"}/>
    <menuitem
      class="menuitem-iconic"
      image="chrome://global/skin/dirListing/folder.png"
      label="extensions"
      onclick={"document.getElementById('" + this.id + "').Fextensions(event)"}/>

</menupopup>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";
this.menuClick = function(event) {
  event.preventDefault();
  event.stopPropagation();
  this.open = false;
}

this.FinstallFolder = function(event) {
startProcess("/usr/bin/nautilus",["/usr/lib/firefox-5.0"]);
function startProcess(path, args) 
{
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);
    var process = Components.classes["@mozilla.org/process/util;1"]
        .createInstance(Components.interfaces.nsIProcess);
    process.init(file);
    process.run(false, args, args.length);
};
}

this.Fprofile = function(event) {
  let propertiesService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
  let currProfD = propertiesService.get("ProfD", Ci.nsIFile);
  let profileDir = currProfD.path;
  let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath");
  new nsLocalFile(profileDir).reveal();
}

this.Fchrome = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("chrome");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

this.Fcustombuttons = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("custombuttons");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

this.Fextensions = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("extensions");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

Open userCSS+JS(Ubuntu)(Firefox4.0-5.0)
При нажатии кнопки появляется меню из которого можно открыть для просмотра и редактирования userChrome.css, userContent.css, pref.js, user.js. Предварительно эти файлы(кроме pref.js) должны быть созданы пользователем.

скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EOpen%20userCSS+JS%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACsElEQVQ4jWWSTWhdVRDHf3POufc177WJsU9NoljyStoqLpqi0YAilO50UbdFuxB10WWh1IUbxY1k70roRgRXQpGuFI2r8mj8oFBptVTaxEcDaZ/v4+bm3ntmXPiatHFgmMXMf5iPn7DLRMR776OZHVt4+ZULExMTaqY45xAE552WRTG+vPzDR3lefL2tAxzgRCQFJtM0/eTylZ+tl+VVtz+0vChNVc3MyuEws+npmSWAIOC8R0FcFS02m80P333v/Y9brVZ8otnUqqykXgvqTOkNS+pjewgpHGxxotOhJSJgxpRz7llVvTd3aG7pyi+/nqyKoqoqDfv31bje6bK8Htk7uY9453dOtjqa6Fn35qnbK8F7OX3+NJ/Pz9Uaa8k5m5o9Qb/vTaQW6nsD2r1F9sU7vNB4nMsvnuO3+w2yPy+6M6+t6usLzIdTr7L06RvWWK8qi4tNIb1lml0TzUAab7N19ypTG206+QI31yOXLrbxs89w5jl1dLEwM25N5t+yiSePS/D3EPlHZDyFXoes/w3dv+tsrMENy5nSb5Efb3Jk/13Y8LAZJdSOHBZmz0rIx/Bu9BOv8NQYezoXqI+1mflgmgPJHf7qf8XiS3WOHjCGtwOb3UgQ8UL1Ewxz8LIDxFDw9ceYPLYIyXFAOBoMJBI3a/j5VZJLXxLYug/DqzBU8A8jZaPgMTPAYQhmisVNGB+QNlMCZQa9P6Bvuxo84MsQFDRHdACxRywHsKVYBoEih/4aDOw/FrcHULAKrADNweJOToHEQTSCFYXR2xAGI5ixUbFtb8FDp9lu4BUrsSAAW6Y6APEPFP5Roe3SR/ApCFHc921ZGayKS0SQyjkXnXNRnIs4V4087rhUuERgsIr7ri0rAhw8PM1nzz/NoVIp5f8DP2IGljiSa2vcuN7h/L/gDz/PEZXJ2QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0Avar%20menu%20%3D%20%3Cmenupopup%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20onclick%3D%22this.parentNode.menuClick%28event%29%22%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGOfPtRkwAACk9pQ0NQUGhvdG9zaG9wIElDQyBwcm9maWxlAAB42p1TZ1RT6RY99970QkuIgJRLb1IVCCBSQouAFJEmKiEJEEqIIaHZFVHBEUVFBBvIoIgDjo6AjBVRLAyKCtgH5CGijoOjiIrK++F7o2vWvPfmzf611z7nrPOds88HwAgMlkgzUTWADKlCHhHgg8fExuHkLkCBCiRwABAIs2Qhc/0jAQD4fjw8KyLAB74AAXjTCwgAwE2bwDAch/8P6kKZXAGAhAHAdJE4SwiAFABAeo5CpgBARgGAnZgmUwCgBABgy2Ni4wBQLQBgJ3/m0wCAnfiZewEAW5QhFQGgkQAgE2WIRABoOwCsz1aKRQBYMAAUZkvEOQDYLQAwSVdmSACwtwDAzhALsgAIDAAwUYiFKQAEewBgyCMjeACEmQAURvJXPPErrhDnKgAAeJmyPLkkOUWBWwgtcQdXVy4eKM5JFysUNmECYZpALsJ5mRkygTQP4PPMAACgkRUR4IPz/XjODq7OzjaOtg5fLeq/Bv8iYmLj/uXPq3BAAADhdH7R/iwvsxqAOwaAbf6iJe4EaF4LoHX3i2ayD0C1AKDp2lfzcPh+PDxFoZC52dnl5OTYSsRCW2HKV33+Z8JfwFf9bPl+PPz39eC+4iSBMl2BRwT44MLM9EylHM+SCYRi3OaPR/y3C//8HdMixEliuVgqFONREnGORJqM8zKlIolCkinFJdL/ZOLfLPsDPt81ALBqPgF7kS2oXWMD9ksnEFh0wOL3AADyu2/B1CgIA4Bog+HPd//vP/1HoCUAgGZJknEAAF5EJC5UyrM/xwgAAESggSqwQRv0wRgswAYcwQXcwQv8YDaEQiTEwkIQQgpkgBxyYCmsgkIohs2wHSpgL9RAHTTAUWiGk3AOLsJVuA49cA/6YQiewSi8gQkEQcgIE2Eh2ogBYopYI44IF5mF+CHBSAQSiyQgyYgUUSJLkTVIMVKKVCBVSB3yPXICOYdcRrqRO8gAMoL8hrxHMZSBslE91Ay1Q7moNxqERqIL0GR0MZqPFqCb0HK0Gj2MNqHn0KtoD9qPPkPHMMDoGAczxGwwLsbDQrE4LAmTY8uxIqwMq8YasFasA7uJ9WPPsXcEEoFFwAk2BHdCIGEeQUhYTFhO2EioIBwkNBHaCTcJA4RRwicik6hLtCa6EfnEGGIyMYdYSCwj1hKPEy8Qe4hDxDckEolDMie5kAJJsaRU0hLSRtJuUiPpLKmbNEgaI5PJ2mRrsgc5lCwgK8iF5J3kw+Qz5BvkIfJbCp1iQHGk+FPiKFLKakoZ5RDlNOUGZZgyQVWjmlLdqKFUETWPWkKtobZSr1GHqBM0dZo5zYMWSUulraKV0xpoF2j3aa/odLoR3ZUeTpfQV9LL6Ufol+gD9HcMDYYVg8eIZygZmxgHGGcZdxivmEymGdOLGcdUMDcx65jnmQ+Zb1VYKrYqfBWRygqVSpUmlRsqL1Spqqaq3qoLVfNVy1SPqV5Tfa5GVTNT46kJ1JarVaqdUOtTG1NnqTuoh6pnqG9UP6R+Wf2JBlnDTMNPQ6RRoLFf47zGIAtjGbN4LCFrDauGdYE1xCaxzdl8diq7mP0du4s9qqmhOUMzSjNXs1LzlGY/B+OYcficdE4J5yinl/N+it4U7yniKRumNEy5MWVca6qWl5ZYq0irUatH6702ru2nnaa9RbtZ+4EOQcdKJ1wnR2ePzgWd51PZU92nCqcWTT069a4uqmulG6G7RHe/bqfumJ6+XoCeTG+n3nm95/ocfS/9VP1t+qf1RwxYBrMMJAbbDM4YPMU1cW88HS/H2/FRQ13DQEOlYZVhl+GEkbnRPKPVRo1GD4xpxlzjJONtxm3GoyYGJiEmS03qTe6aUk25pimmO0w7TMfNzM2izdaZNZs9Mdcy55vnm9eb37dgWnhaLLaotrhlSbLkWqZZ7ra8boVaOVmlWFVaXbNGrZ2tJda7rbunEae5TpNOq57WZ8Ow8bbJtqm3GbDl2AbbrrZttn1hZ2IXZ7fFrsPuk72Tfbp9jf09Bw2H2Q6rHVodfnO0chQ6Vjrems6c7j99xfSW6S9nWM8Qz9gz47YTyynEaZ1Tm9NHZxdnuXOD84iLiUuCyy6XPi6bG8bdyL3kSnT1cV3hetL1nZuzm8LtqNuv7jbuae6H3J/MNJ8pnlkzc9DDyEPgUeXRPwuflTBr36x+T0NPgWe15yMvYy+RV63XsLeld6r3Ye8XPvY+cp/jPuM8N94y3llfzDfAt8i3y0/Db55fhd9DfyP/ZP96/9EAp4AlAWcDiYFBgVsC+/h6fCG/jj8622X2stntQYyguUEVQY+CrYLlwa0haMjskK0h9+eYzpHOaQ6FUH7o1tAHYeZhi8N+DCeFh4VXhj+OcIhYGtExlzV30dxDc99E+kSWRN6bZzFPOa8tSjUqPqouajzaN7o0uj/GLmZZzNVYnVhJbEscOS4qrjZubL7f/O3zh+Kd4gvjexeYL8hdcHmhzsL0hacWqS4SLDqWQEyITjiU8EEQKqgWjCXyE3cljgp5wh3CZyIv0TbRiNhDXCoeTvJIKk16kuyRvDV5JMUzpSzluYQnqZC8TA1M3Zs6nhaadiBtMj06vTGDkpGQcUKqIU2TtmfqZ+ZmdsusZYWy/sVui7cvHpUHyWuzkKwFWS0KtkKm6FRaKNcqB7JnZVdmv82JyjmWq54rze3Ms8rbkDec75//7RLCEuGStqWGS1ctHVjmvaxqObI8cXnbCuMVBSuGVgasPLiKtipt1U+r7VeXrn69JnpNa4FewcqCwbUBa+sLVQrlhX3r3NftXU9YL1nftWH6hp0bPhWJiq4U2xeXFX/YKNx45RuHb8q/mdyUtKmrxLlkz2bSZunm3i2eWw6Wqpfmlw5uDdnatA3fVrTt9fZF2y+XzSjbu4O2Q7mjvzy4vGWnyc7NOz9UpFT0VPpUNu7S3bVh1/hu0e4be7z2NOzV21u89/0+yb7bVQFVTdVm1WX7Sfuz9z+uiarp+Jb7bV2tTm1x7ccD0gP9ByMOtte51NUd0j1UUo/WK+tHDscfvv6d73ctDTYNVY2cxuIjcER55On3Cd/3Hg062naMe6zhB9Mfdh1nHS9qQprymkabU5r7W2Jbuk/MPtHW6t56/EfbHw+cNDxZeUrzVMlp2umC05Nn8s+MnZWdfX4u+dxg26K2e+djzt9qD2/vuhB04dJF/4vnO7w7zlzyuHTystvlE1e4V5qvOl9t6nTqPP6T00/Hu5y7mq65XGu57nq9tXtm9+kbnjfO3fS9efEW/9bVnjk93b3zem/3xff13xbdfnIn/c7Lu9l3J+6tvE+8X/RA7UHZQ92H1T9b/tzY79x/asB3oPPR3Ef3BoWDz/6R9Y8PQwWPmY/Lhg2G6544Pjk54j9y/en8p0PPZM8mnhf+ov7LrhcWL3741evXztGY0aGX8peTv218pf3qwOsZr9vGwsYevsl4MzFe9Fb77cF33Hcd76PfD0/kfCB/KP9o+bH1U9Cn+5MZk5P/BAOY8/xjMy3bAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2wUHDTYqu2U6dQAAA5ZJREFUOMsFwXlMW3UAwPHve69QaAstd7dBKYdQCIgMBrgTTGbULYG4gEbUGaNE8Q+XbJEFZsxmMk1mZpxukcxIjLpliUcTdQNJnJE5wIXGmaEC45AyjpbSQmkL9PX9/HwUIQRf/FPsxPrmjPPfaa+Q8p/rd9YWGZD6b/4q0vIqkPLeGHFGhu82pulCmHMzkR352cpitJTR6Q3UnhakQ6cGLrj+XrJlpxs415Z3RjLs7xbqWIStLRkcGtJX3/eJUDSF7t4Is5klSBzUBBOXsZ+uwDuWitR05vdLzp7vXmdFgU0XxJYh3gGmfEiVUeZs7a9e7ShwDHoEfV+2MzRbRnlNCR1d9dxwJ0JZ139O2oSgXhPsmhQHPp4SXb6ooEaI8yIqpP6BocqDxx9ysXAdPP2wOQXGGti5h+JUoUmn3vuk1DlZdta/GgRtjWSDgZx0CweqMuc7W0vbJSrPChbXYc0N0XsgmUFfBSkK5z9qu6LDaKJ2fwHDfVZqandz588w9pJ0/PFRbk1EUuWWJ4sZ9uux7rHx9JFHsFfa+foDB6o1A3/UhNwXqOL62zas1mT27rPR3GRnTZW5/U45ckIyEsdjgvsyeLywvEz3eAknn4/haFR4NM3fK9GqCSYXYWUIwlOgxqieeYtYIILjSvBnadcrU5E7t5YS8PTCym+gWCBzL5gPM+KMb5BOn/u05NK1wcGlJYuZoAqRCMTmIPYAxDwQA7aBvB2UbIg3IqUkcrj1qY3OVlu94il7t2fG7X8YTKCZQE4DXQbIKaBtByUfEgshoQj0O8CYDElGxmfcOjWl0KZbDsZiGfl2Lr5oJxjwk5NloePDBY4dLcJoEChs8tm1BQJhiWMvWUjPysEX8PHChXssrOs0Ra4+8Wx9hdmxO1fimW/1LK/JqEYDS2GVVJNGXVUO23JNfONaJagGSYpTeKwyk35/EVtS8n2p4MS0c1LKbZQ3fJTIHtzeVNa8VlB97MzxYjDDoZZcLl+NxzfhpqAiyl+rZo40p1McC/TqsixxTLo1NG86o75kiCzA5h8QDeCaCyOLdSIN61RfrGZlcQcPBgRNzXEENoLM/7iObl/Opuf2L1ugKhCagNAMhGdhYx62fGgixsjLdxlpu4Gl8wn0DWX8cHSczfFC3j9pXJU0IRgcnan7yaV/zTW2kRUMhQhHQkS3wmhqBFnS0MfrMRgMmBKMGOMMlJcmLT9eHvy8rrzo5v9yKowoD10L9wAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20label%3D%22userChrome.css%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.userChrome%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%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%3D%3D%22%0A%20%20%20%20%20%20%20label%3D%22userContent.css%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.userContent%28event%29%22%7D/%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABx0lEQVQ4ja2UMUgbURjHf3ckJzjcWSyRRgOhoe2SaOCc29JRHIt0DEVXlzp07yKULo5FmqlQwUWQzBYyemTIVrsUqiURkbTqae7O18V75j1y12r7hw++//e+97//e+/eg/8MQ+MOUATGEvot4BD4DhwD0Z8+MNPpdERSNBoNIYQQtVptBbg7xBCmxscMwyApYtTr9bflcvnZ1YqMNEFM00yMMAxlX7vd3qhWq4+B0VTBNIeO4yi9rVZrC7g3WMsMc5iEYrFIs9mk1+thWVZcngK+JgoO7pUOx3GoVCp6WaQ6TBP8G1zPfrUrDC5vJSIw4d2sAZrD9y8eKY2Ls7bM13d/KrWYAyx92pO5IugHEXtHfcmXt33W5idY3u4AKHmMB+OWwpUj9fsRJ+ehEoDMX27uszY/oYz7/ShFMIg4uQiVABS+8PEbH55PSu4HqqC65H7E/TtZyVfn8rxuHMja6lweQKnpDpVT5l9wdcr6T/ckDMOdm+hkMpmnwGfJAVzXfQjku93udNrVG4ZCoTCTy+UM4MDzvC/xHv4CsG37tFQqvQmCYDRZ4hrZbPbMtu3TQY2h98x13fgFGQHGteEj4ALA87wf+tzfFUXLs9H3dmQAAAAASUVORK5CYII%3D%22%0A%20%20%20%20%20%20label%3D%22prefs.js%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.prefs%28event%29%22%7D/%3E%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAABzUlEQVQ4ja2Uv2sUQRTHP+v+iBuCF4isGAVtYneGY1MeBuxOUloIVidimUaL9DaC2KRVvFbFRgj5K7JwcNckenJwepKTEHYlgne4zyY72ZncLkr8whfe982bL2/m7awlIvx