yup
debugger eval code:3:15
Content-Security-Policy: Параметры страницы заблокировали выполнение inline-скрипта (script-src-elem), поскольку он нарушает следующую директиву: «script-src chrome: moz-src: resource: 'report-sample'». Попробуйте использовать хеш ('sha256-YIxGJWzWSKvijAUTGmpRvAFA8o16x0PGy2kwg6nJSVk=') или одноразовый номер.
debugger eval code:4:1
Uncaught ReferenceError: HelloWord is not defined
<anonymous> debugger eval code:4
getEvalResult resource://devtools/server/actors/webconsole/eval-with-debugger.js:306
evalWithDebugger resource://devtools/server/actors/webconsole/eval-with-debugger.js:218
evaluateJS resource://devtools/server/actors/webconsole.js:895
evaluateJSAsync resource://devtools/server/actors/webconsole.js:788
makeInfallible resource://devtools/shared/ThreadSafeDevToolsUtils.js:103
Отсутствует
Только сегодня заметил, что ещё один скрипт в 139 бетке работает некорректно.
У меня скрыто главное меню, а вместо него кнопка. Должно быть так:
А в 139 бетке это выглядит так:
То есть, все вложенные менюшки показывает нормально, а главное меню не показывает.
Может кто сможет оказать помощь в правке кода?
// // Compact Menu .......... // (async icons => CustomizableUI.createWidget({ id: "ucf_CompactMenu", label: "Compact Menu", tooltiptext: "Compact Menu", // defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onCreated(btn) { btn.type = "menu"; btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAD1SURBVHjaYvz//z8DJYARZABjzDuGBaEv/rOwshCjhYGTg40heB4v4/8lQgxgHWHih/4/f68EZP0h0t7vDOVmr4FOF2IEG6CtxMOgJMXMcOP2M7gSDVUpBk0gBoH1286gaAfJfeTng3BAXmicsuv/l++/ScKTV177D9KL4ul7zz+j2KQkyYtXHARYcEkQI45hwKgLMG3SVRLCqTEHRIQz/Mfrgq/ffzNwc7LCEgwwFTMiaHCiZmBkgsj9g7sAGcMMgahG1dy/9CpqZmq2vfqfiYkVp5Or0izh7N5FFxhK4gwY4QbgzHdQ22AAqPI/I9jlCAAQYADPi5zKAPTwLwAAAABJRU5ErkJggg=="); var doc = btn.ownerDocument; var menupopup = doc.createXULElement("menupopup"); menupopup.toggleAttribute("context"); btn.ownerGlobal.AutoHideMenubar._setActive = () => {}; btn.setAttribute("popup", menupopup.id = "main-menubar-popup"); var bar = doc.getElementById("main-menubar"); bar.append(menupopup); for(var menu of Array.from(bar.querySelectorAll(":scope > menu"))) { var popup = menu.menupopup; popup.remove(); // menu.textContent = menu.renderedOnce = ""; menu.renderedOnce = ""; var img = icons[menu.id]; if (img) { menu.className = "menu-iconic", menu.setAttribute("image", img); } menupopup.append(menu); menu.render(); menu.append(popup); menu.disabled = false; } } }))({ "file-menu": "data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADTUlEQVR42l2Tf2gURxTH38zO3q/c3l0Sk7RNYpDWVKPRQim2JaFCRYiiIgkFqxEbf5VWBCuxm6AphJgFDU0REkprSPxFpbFS0IJCYg3+iCY5UfpHTYsoeJaLichdesnd7cxs3+5aQzu7s/ODeZ/3fW/eEgIAKlNyslykqqur2+vr65symYzp8XhUxhioqgqUUrAsy4xEImpHR4cxNDTUzBQlhwuRIuUay23cUP1j+btV7/+RkOB/fVkgkhMAj9cLPq8PwpEwTExMwNjoKNSs2wD3LvXPLPBnreHBX6NHL97aQT6qeKW1p/+HQ8GKd/iVywPsweMpKCqYBwp6twGhcAhisRgMD9+ENWvXA+MJqPrwPfl85DrdsXXXL6S2srT91M/nm5immQPXoiw+LUjRvDxgqgd8flQQCkM8HofonTFYtboGkk/Graq3F0k5k1K21X0cJbVLS9r7fjrb5MvN51duRNlvD+IQCQWBYNxODhjmQKGg4DqdFVAYtGDliiUy/WyKNmz6ZITULS0x+s6d0WUgzIVpskw2aycMLClxnOsgBb4CAgE/qmOSziRpw+bdo6ig2DjRf1pPzjzjZjLOmOp1AHazb8iyH8kRgB1BZmYWiOqR4VAJ3bX9AAKWvGb0nu3Vp56O86LKtcyjFYIlMngYDS3hjOCoEUARaJppeDJySublv0E/3X3IBXx/oktPJGO8eMUWxvwhkFn0gpItYaKxidIxLG7iHo7MB49un5SR4Kv08z1tLqD72zY9Of0XL/vgMyY5x8OzqBa9C1e6hYbu3AQlWACPbvZJzZ9H937ROUrqKkuNb47s0ZOpp3zhmhYEZPBc2o3ZNhausYXGgIoUDPHhte9k0JdL933ZbQPmG1+3b8ckTvI317Uxy0QATztZt43dMFwAeQH482qX1BCwv7kHAcvKjKOt9fp0apIv3niEidnESwWud9OB4K+AgCyouWUwPngMAWHa+NVpBCxfcNg4WNuMOchW1HUyBSsQ7Dw4NyBcJS/qwF5LwuD+hRap5RSxpsPnR8im5fONzrad+t+Zaa56NQb/NvLygwOZ27RrIZ2QQa9G9x08PkYW5/s3vlVSoJsWJY5HcKoH/jf5b6OqpRLhuRub/P0fNpy5eTq5HCsAAAAASUVORK5CYII=", "edit-menu": "data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC+0lEQVR42k2TX2hbZRiHn/Od75w0TZpTu3btak2IdWwqXZmw6dShOOcGinqhVxPxelebeuPAq+5GYSAUdejECy0M/AMy0bKColvUtUyLm0tXXVqbruuWNlmaJjk5f/2E0OUHv8vn+V7el0+GYQjAa1/ldwPv3dvZtqfmBqjiBgF1LygDFWAF8IESsAp8BpyVNBN43sPDffE9bzzRQ2uqTmDVVEu2P+C4UGn4zK+s8/216n7gSKugN2FqAORv+xiahtRAlxAxBMmIQBcCQ4edA1H6rVjXx5NLJzYEvusmYhK8ACqOhi5AD0F6oOsgNCD0udvSeWtsgXcOpfg1Z/S0Cro6TEG1AVXbRyhC0oRVdZRUgwDQ/DV+y5X4faG8dEfgOL1WVKdc96g1QiUI0QUIvzkNIW1rP/L3xKcc7h6iev4nXnL7xjYEnuOkehMGZTvEAwhBV7DygA+Jyhm6ipNEh17BSu/k9tw26mdPvdoyQSPVZ0XI3vTRBAj+h0EA7ZVxksZl4lsfo3gti6k5dCT6iG9KWhLg4Mh4VOrCVNvG8X0EIaiGQKSaIS2n1KsHaNw4jdmu8e/0DK7trNr19UclgNdwemKxNkRzSYSgaRCtnOM+4wesweexr59EmB5GPIW7/k/g1tynd70+MSub47fLmIkUoCuLH6gunCHZMYl1/4sK/hBheDhraW5lphld3D/z0fGj0wBy75GxbmBk9/Yky2sh82oHidI4W/ULbH7wOZzlU+hmiF1OsZL5g/yOEbJXsjmakep8+4BnL2bnKNUlxuJ3vDxUwAv6uXFplLs2m9jFe8hnriD2fcBi3kYxhTsC133ohSd3RI8degSAL949zAOPf8LV028ye+4XIslhtFqRi1ve5mBnP5XsZRSz2iqYW14p8/lEls54lNlcAeevb0kP76VcWOX6pRxPHfuGLeYgEQmFYgXFLG4I1Cf68vzUzIBqCtg0mF86cOLk+9qu7Wlt3usOv248o40e/5lEbIrORDt/Xs3PAhma+Q+beVW+tK7UBAAAAABJRU5ErkJggg==", "view-menu": "data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII=", "history-menu": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACpklEQVR42qXT3U+SYRgG8P6kOqjW1lEnHVkubalbbrY2W+mBioIgJRZmZgkmSpCigin4PZ2IhR+IJAoi+AkCr4D5BeILCOhrevXqAc3lPPHg2q49z57fc3Lf1wBcKf8djLZX3jN0vNaa+1m7c0McyjzApvTKvC1NQ15v71f2nUsBnaq8zjbMOvTZp7Cz6UIoFARJBrC+ZoNN346hb9n7yuoc7oXAWDtf6DTVI+j3wO4JonOEQF3XImpUC5CrnZh1bIGwGzAofQEZ/3nhOUAjr7hr6mdQgW0COssGukcJOH0hBEIR+EP7sHtDkA870TPuxopFDcXbtKi0/OWNBPCzmTm4Sl8sr+1CpXUDAIIkCcfvTcSBs0ROAPGAE3qrBz8UBRCXpMsTwEhL7uaGZx4KzSqW6J+jRyeIRKMQNcqwTUPhgwN0aUagc5D42GbF/LQSUk4KkQC0zTnxYGAdla1WbMcoBA+OcQiguJQHRXcfmG94GDYYMU9SyBcZ4SWMaOSkxhLAkCQ7HthxgSezwBuhaOQYPjKMd1Wfzh7rLDb4jwBTgEKu4Bc8rnE0FKf8A7o+Z7pd82oIVFaMr5LYiAO+MIXBsUm4d0PY+gMQUaBnYQ8cqRFzuhqICpO9CaCJnykbU7JgsDpQobLDfwIEKSB8TIfuezTgpztbbofGMIO+2jQIGKmqBNDw/tX1lrInsRVTC1rVZnxQrcBC7CESoxCJUrDSnd+2DHHnBGa1ZajNS4oLOc9unhskCS+L9b3iMZam6jA6bUK5bApFNZMoEOhRKtFDo5+AWcuFmHkf1cyM0gtHWVTylCthJUf66jPon/hwLyngXmzCjIaDjqqHqM1P2q8uSi+7dJlE3KxbwsKUti/5Dzz1jKTYaU67gPFIKWRn3r5oma6Uvxi8C+ZZVBH3AAAAAElFTkSuQmCC", "bookmarksMenu": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB80lEQVR42o1QO2hUURA9b3efgShIsFHUIltoAkYxRRoR10YLBRs7CwM2llq74NrZ2QgiWARsFCQoEm0jKqKNsqZYG9WgmE4Q8+5n7n3X47APMb6QDBxmhnvPmTOTpZTQ7XaPAeiIyJk8zw8z4+u2STgfYAnjhVm0dhLgiRBLfLzXy1qARofonZq9jIPjO7GZmJ7taa4EtFuYu4Hbm5g8d/UiNCqBZrOJlEo0sgztiSn4EEmIQxGSVUDgnGCw9FaJXP2vgHivTYwRzTKh5JRIkRAj68Cak4NovzYaBDwFRAgReE6WEIiIA3t3kMie5CgqopP/E7DOwFpLi5b2hYgqdvbIBFpZokPRnkPqHThjYY0hCngncHR0crqN0ZEc545PYUsLdEYXFFobegNDYja8QWdyN07P7EMVM/v3KB486+PxqyV8/1YjUBS/KNDQ/RZeD/Di/Wdcv3ACVVy58wRvBl/0oLUr2KJQ+6ZYhbEO20dzfZx/3tc8vmsMQbwet34Fa3WFsiwRKDC2dQSXbj7Eh+UVzC++w9FDbQSS+V4roA70BmWCGIdHL/sQCYi0vExXd5+uKHldAWeNNikBwVklxvCHEKGIwzqtIxBEAFrQdy/8HCqSTk1EmSJzUtL53q1/BfhxkQId8H315w9sFJ/uX8uq+jcV934PuHAGCwAAAABJRU5ErkJggg==", "tools-menu": "data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAAAAAAAAAHqZRakAAADGElEQVQ4y22SXWgcZRSGn49+MTa7yY5VYkW009KghOJOiKHVSlwhmAt/+gNeeNVJZQg0OEmWCmZa8qPLpF50dzMi0o6Q1ItW8SY2/Umkxo1YmjTUzCJKS71IkGhNbLLbarZG6udFdqWI793hwHt43vdIipIA6gZKAli2uyxVkmWx0jUsAU6PTamRs18OA4ZUSZ7nxTSvNp/awydKSct2e3zP6bNsd5/vOSckMGzZ7uDxgS5z6xM1Q9L3nKxS7ea7V27T3faakGoVRWog6F5J61tn1Nrd6eC6mv72ew7s3y0s221/P9WVfrOzXwN0CdBg1AgAlUSx/TsWbhd4bmdD7puL06YsLpbpfEeD97h09HOeXTlJa3MT/vWmmCyyaqS6AxGnbm0UHEuoZULsLrFHfc/JlpKxbPcrYNb3nBZZYgJ6fc/pGxmdVKfPjQe+57RYtpuSvue0hEOhWGPjjl7foy/6VA2VWsiIVEVU/lY+LQFS/e2bv+7bOKiOoZa0CEszV5Fl6/A9p7NEEaW13qTiJhtSkr2VCnp2CgCpkkQ5sDegfBXOTbLuMUXTDrjwgVK0CSGpLQsoz/XyxXgv19D+XkG/sEpALZBQSvLDXyY/jw+RQxNx8iCyJJTBAgFglHIY3N5gmLNz87lfFxY7fM85wT2ybHewvm6bWf3wg5wfnQiAmO85+X+/CeiYmg6MI/0HjXBF2dD6+9enC3cKuu85ect2e44k4iZC8PahowEQA/S2t1KZ1T8LgQQoutX5noNlu+2PbKxO14bv5jYf3Df76NP1+obKcgAGkl3GtR9/yv2ycJPRMxkAU/IfHdedDABvNENFlc6pZhbPvE5yJsbHv9cEL92Z7CjWPHcvwloXkKF1l0ZFLTAFfAZhuDE/Rq7zJG1hjEMfvpBhiSFwWko9RYBZdgmNLWHgLvARnF+EqwTVhZGORfXyMGfRuA82PQNPPoQ5VqVMbpGWgE4IjS2NwDa4/Clc/C0AYmu1vQLwAAkVBTJzebQ5CTwOzBOTIk4WEOqPiU0woYs4E/yfDots0SgCGEDAYZH/B7PBR1+ulWDyAAAAAElFTkSuQmCC", "helpMenu": "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' version='1.0' width='16' height='16' viewBox='0 0 16 16'><circle fill='rgba(0,145,220,0.99)' cx='8' cy='8' r='8'/><circle fill='rgba(255,255,255,0.99)' cx='8' cy='4' r='1.25'/><rect x='7' y='7' width='2' height='6' rx='1' ry='1' fill='rgba(255,255,255,0.99)'/></svg>" });
ADD. Отбой. Мне помогли исправить скрипт на ru-board. Под спойлером теперь рабочая версия.
Отредактировано unter_officer (13-05-2025 01:58:52)
«The Truth Is Out There»
Отсутствует
unter_officer
Может это подойдет.
appbutton.js
appbutton.css
Отредактировано _zt (12-05-2025 19:48:21)
Отсутствует
Почитал я одно свежее интересное обсуждение на GitHub и кое-что на Багзилле.
В переписке на GitHub поучаствовал, как я понял, один из разработчиков Firefox. (Он там о Firefox пишет: "Мы решим, мы запретим, мы изменим".)
Из его слов выходит, что у них там как раз сейчас "разброд и шатание": "Мы полностью запретили любые виды eval везде (даже в нашем собственном коде)" (а создание script и Function приводит к вызову eval в потрохах браузера), "Используйте evalInSandbox", "Наверное, мы сделаем исключение для userChromeJS", "Используйте security.allow_unsafe_dangerous_privileged_evil_eval".
Ну, и в довершение там в переписке обнаружили, что добавление нового скрипта через Services.scriptloader.loadSubScript() тоже работает.
В общем, почитайте обсуждение и поэкспериментируйте с их вариантами решения проблемы - они как раз на 139-й версии упражнялись.
Попробуйте использовать хеш ('sha256-YIxGJWzWSKvijAUTGmpRvAFA8o16x0PGy2kwg6nJSVk=') или одноразовый номер.
Насколько я понимаю, дозволенные hash или nonce должны быть изначально прописаны в параметрах окна.
------
Да, и все обработчики событий, прописанные в свойствах элементов как "onсобытие = код", теперь тоже запретили - они тоже "eval".
Отредактировано yup (12-05-2025 20:25:27)
Отсутствует
unter_officer
Может это подойдет.
Ещё бы понять, что это такое.
Я попытался подключить, в левом верхнем углу появилось како-то синее пятно и все. В консоли все чисто.
Судя по всему, конфликт с моими стилями или скриптами. Разбираться не стал т.к. сейчас со временем напряг.
ADD. Разобрался, действительно конфликтует с моими стилями.
В общем, альтернатива так себе. Мне точно не подойдет. Не вписывается в мое оформление от слова совсем.
Отредактировано unter_officer (12-05-2025 21:14:20)
«The Truth Is Out There»
Отсутствует
А в 139 бетке это выглядит так...
Только сегодня победил что и где не хватает, обновил Appmenu.uc.js
Жизнь иногда такое выкидывает, что хочется подобрать...
Отсутствует
DEL
Отредактировано unter_officer (13-05-2025 00:01:12)
«The Truth Is Out There»
Отсутствует
Dobrov
Да, судя по вышеупомянутым прочитанным перепискам, изменения начали вносится в браузер примерно два месяца назад и процесс всё ещё продолжается.
Особенно порадовал диалог разработчиков:
- Что мы творим?! У нас же полно мест, где eval применяется, и мы практически не представляем, в каких файлах они находятся.
- Ну и что, что не представляем? Браузер, вроде, работает - значит, те места для него не очень важны.
Отсутствует
Только сегодня победил что и где не хватает, обновил Appmenu.uc.js
Помнится, еще есть т.н. скрипт-mover строчек на 15 кода, позволяющий перемещать рыжую кнопку. Только инфо, мне не нужно.
Отсутствует
обновил Appmenu.uc.js
На 140 только в TabsToolbar работает.
Перевел, исправил, дополнил. Теперь работает во всех панелях. Тест на 140 Nightly
// ==UserScript== // @name Appmenu.uc.js // @namespace https://forum.mozilla-russia.org/viewtopic.php?pid=817093#p817093 // @description Восстановление оранжевой кнопки Fx // @include main // @version update for Firefox ~140+ by zt // @author defpt // @charset UTF-8 // @version 2019.08.04 // @version 2020.05.27 // @version 2020.07.13 Weitere Menüs und Funktionen ergänzt by bege // @version 2024.08.10 alle Einstellungen im Abschnitt Konfiguration vornehmen // @version 2025.05.12 https://forum.mozilla-russia.org/viewtopic.php?pid=817078#p817078 // @version 2025.05.14 перевод, исправление, дополнение. Тест 140 Nightly // @shutdown window.Appmenu.uninit(); // ==/UserScript== (this.Appmenu = { // Начало настройки ------------------ // Что бы использовать свой редактор укажите путь editor: 'C:\\Windows\\System32\\notepad.exe', // или используйте системную ассоциацию // расширения css, js, mjs, json, ini должны быть ассоциированы // editor: Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).getCharPref('view_source.editor.path'), // Что бы использовать свой файловый менеджер укажите путь, // с ('') используется системный файловый менеджер fileManager: '', // fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe', // Параметры для файлового менеджера или пусто ('') FMParameter: '/T', // Скрывать субменю без содержимого autohideEmptySubDirs: true, // Переместить пункты главного меню вниз moveSubDirstoBottom: false, // Настройка положения и вида isNavbar: 1, // 0: TabsToolbar, 1: nav-bar, 2: menubar-items isButton: 1, // 0: Hamburger, 1: Firefox legacy isEditMenu: 0, // Переместить главное меню в Appmenu // Горячая клавиша для открытия Appmenus или пусто ('') hotkey: 'z', hotkeyModifier: 'alt', // Конец настройки -------------------- style: ` /* appbutton */ #main-window #AppMenuButton { margin-inline-start: 1px !important; /* для системной обводки окна */ padding-inline-start: 2.5em !important; /* оригинал 1.6em, со значком (32px, 2rem) из FullTeme - 2.5em */ padding-inline-end: 2em !important; border-radius: 0 0 4px 4px !important; border-top: none !important; border-right: 1px solid !important; border-left: 1px solid !important; border-bottom: 1px solid !important; max-height: 2.5em !important; /* оригинал 2.5em, если высота баров изменена подобрать свое */ color: light-dark(gold, white) !important; font-weight: bold !important; } #main-window #AppMenuButton .toolbarbutton-icon { display: none !important; } /* 'ESR' title */ #main-window #AppMenuButton[label="firefox esr"]::after, #main-window #AppMenuButton:not([label="firefox release"],[label="firefox default"],[label="firefox aurora"],[label="firefox nightly"],[label="Tor Browser"],[label="Tor-Browser"])::after { content: "ESR" !important; } /* 'Firefox' title */ #main-window #AppMenuButton[label="firefox release"]::after, #main-window #AppMenuButton:not([label="firefox esr"],[label="firefox default"],[label="firefox aurora"],[label="firefox nightly"],[label="Tor Browser"],[label="Tor-Browser"])::after { content: "Firefox" !important; } /* 'DevFox' title */ #main-window #AppMenuButton[label="firefox aurora"]::after { content: "DevFox" !important; } /* 'Nightly' title */ #main-window #AppMenuButton:is([label="firefox nightly"])::after { content: "Nightly" !important; } /* 'Unbranded' title */ #main-window #AppMenuButton:is([label="firefox default"])::after { content: "Unbranded" !important; } /* 'Tor-Browser' title */ #main-window #AppMenuButton:-moz-any([label="Tor Browser"],[label="Tor-Browser"])::after { content: "TorFox" !important; } /* orange (default) */ #main-window #AppMenuButton { background-image: linear-gradient(rgb(247,182,82), rgb(215,98,10) 95%) !important; border-right-color:hsla(214,89%,21%,.5) !important; border-left-color: hsla(214,89%,21%,.5) !important; border-bottom-color: hsla(214,89%,21%,.5) !important; box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset, 0 0 2px 1px hsla(0,0%,100%,.25) inset, 0 1px 0 0px rgba(255,255,255,.6), 0 0px 0 0px rgba(255,255,255,.6), 1px 0 0 0px rgba(255,255,255,.6), -1px 0 0 0px rgba(255,255,255,.6) !important; } #main-window #AppMenuButton:hover:not(:active):not([open]) { background-image: radial-gradient(farthest-side at center bottom, rgba(252,240,89,.5) 10%, rgba(252,240,89,0) 70%), radial-gradient(farthest-side at center bottom, rgb(236,133,0), rgba(255,229,172,0)), linear-gradient(rgb(246,170,69), rgb(209,74,0) 95%) !important; border-color: rgba(83,42,6,.9) !important; box-shadow: 0 1px 0 hsla(0,0%,100%,.15) inset, 0 0 2px 1px hsla(0,0%,100%,.5) inset, 0 -1px 0 hsla(0,0%,100%,.2), 0 1px 0 0px rgba(255,255,255,.6), 0 0px 0 0px rgba(255,255,255,.6), 1px 0 0 0px rgba(255,255,255,.6), -1px 0 0 0px rgba(255,255,255,.6) !important; } #main-window #AppMenuButton:is(:hover:active,[open]) { background-image: linear-gradient(rgb(246,170,69), rgb(209,74,0) 95%) !important; box-shadow: 0 2px 3px rgba(0,0,0,.4) inset, 0 1px 1px rgba(0,0,0,.2) inset, 0 1px 0 0px rgba(255,255,255,.6), 0 -1px 0 0px rgba(255,255,255,.6), 1px 0 0 0px rgba(255,255,255,.6), -1px 0 0 0px rgba(255,255,255,.6) !important; } /* ESR */ #main-window #AppMenuButton[label="firefox esr"] { background-image: linear-gradient(to right, hsl(208,95%,30%), hsl(208,95%,20%), hsl(208,95%,10%)) !important; } #main-window #AppMenuButton[label="firefox esr"]:hover:not(:active):not([open]) { background-image: radial-gradient(farthest-side at center bottom, hsla(0,0%,100%,.5) 10%, hsla(0,0%,100%,0) 70%), radial-gradient(farthest-side at center bottom, hsla(0,0%,100%,.7), hsla(0,0%,100%,0)), linear-gradient(to right, hsl(208,95%,30%), hsl(208,95%,20%), hsl(208,95%,10%)) !important; } #main-window #AppMenuButton[label="firefox esr"]:is(:hover:active,[open]) { background-image: linear-gradient(to right, hsl(208,95%,20%), hsl(208,95%,30%), hsl(208,95%,40%)) !important; } /* Dev */ #main-window #AppMenuButton[label="firefox aurora"] { background-image: linear-gradient(hsl(208,99%,37%), hsl(214,90%,23%) 95%) !important; } #main-window #AppMenuButton[label="firefox aurora"]:hover:not(:active):not([open]){ background-image: radial-gradient(farthest-side at center bottom, hsla(202,100%,85%,.5) 10%, hsla(202,100%,85%,0) 70%), radial-gradient(farthest-side at center bottom, hsla(205,100%,72%,.7), hsla(205,100%,72%,0)), linear-gradient(hsl(208,98%,34%), hsl(213,87%,20%) 95%) !important; } #main-window #AppMenuButton[label="firefox aurora"]:is(:hover:active,[open]) { background-image: linear-gradient(hsl(208,95%,30%), hsl(214,85%,17%) 95%) !important; } /* Nightly - изменил цвета наведения на нормальные, др. версий сейчас нет */ #main-window #AppMenuButton:is([label="firefox nightly"],[label="firefox default"]) { background-image: linear-gradient(hsl(211,33%,32%), hsl(209,53%,10%) 95%) !important; } #main-window #AppMenuButton:is([label="firefox nightly"],[label="firefox default"]):hover:not(:active):not([open]){ background-image: radial-gradient(farthest-side at center bottom, hsla(209, 100%, 50%,.5) 10%, hsla(209, 100%, 50%,0) 70%), radial-gradient(farthest-side at center bottom, rgba(36,169,255,.7) 50%, rgba(36,169,255,0) 95%), linear-gradient(rgba(43,42,53,0.5), rgb(43,42,53) 80%) !important; } #main-window #AppMenuButton:is([label="firefox nightly"],[label="firefox default"]):is(:hover:active,[open]) { background-image: linear-gradient(hsl(211,33%,26%), hsl(209,53%,6%) 95%) !important; } /* Tor-Browser */ #main-window #AppMenuButton:is([label="Tor Browser"],[label="Tor-Browser"]) { background-image: linear-gradient(rgb(153,38,211), rgb(105,19,163) 95%) !important; } #main-window #AppMenuButton:is([label="Tor Browser"],[label="Tor-Browser"]):hover:not(:active):not([open]){ background-image: radial-gradient(farthest-side at center bottom, rgba(240,193,255,.5) 10%, rgba(240,193,255,0) 70%), radial-gradient(farthest-side at center bottom, rgb(192,81,247), rgba(236,172,255,0)), linear-gradient(rgb(144,20,207), rgb(95,0,158) 95%) !important; } #main-window #AppMenuButton:is([label="Tor Browser"],[label="Tor-Browser"]):is(:hover:active,[open]) { background-image: linear-gradient(rgb(144,20,207), rgb(95,0,158) 95%) !important; } /* private browsing - purple */ #main-window[privatebrowsingmode=temporary] #navigator-toolbox #AppMenuButton { background-image: linear-gradient(rgb(153,38,211), rgb(105,19,163) 95%) !important; } #main-window[privatebrowsingmode=temporary] #navigator-toolbox #AppMenuButton:hover:not(:active):not([open]), #main-window[privatebrowsingmode=temporary] #navigator-toolbox #PanelUI-button #PanelUI-menu-button:hover:not(:active):not([open]){ background-image: radial-gradient(farthest-side at center bottom, rgba(240,193,255,.5) 10%, rgba(240,193,255,0) 70%), radial-gradient(farthest-side at center bottom, rgb(192,81,247), rgba(236,172,255,0)), linear-gradient(rgb(144,20,207), rgb(95,0,158) 95%) !important; } #main-window[privatebrowsingmode=temporary] #navigator-toolbox #AppMenuButton:is(:hover:active,[open]) { background-image: linear-gradient(rgb(144,20,207), rgb(95,0,158) 95%) !important; } /* Неперемещаемый с nav-bar интервал, только при вертикальных вкладках */ #TabsToolbar[collapsed="true"] + #nav-bar .titlebar-spacer[type="pre-tabs"] { display: flex !important; width: 10px !important; } } `, sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), subdirPopupHash: [], subdirMenuHash: [], handleCommands: [], iconsMenu: { "file-menu": `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path fill-rule="evenodd" d="M1.25 10.255V14c0 .414.336.75.75.75h12a.75.75 0 0 0 .75-.75v-3.745h-3.534c-.46 0-.868.292-1.016.727-.716 2.1-3.684 2.1-4.4 0a1.074 1.074 0 0 0-1.016-.727H1.25Zm13.5-1.25h-3.534c-.995 0-1.879.633-2.2 1.574-.33.97-1.702.97-2.032 0a2.324 2.324 0 0 0-2.2-1.574H1.25V2A.75.75 0 0 1 2 1.25h12a.75.75 0 0 1 .75.75v7.005ZM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Z" clip-rule="evenodd"/><path d="M3 3.625C3 3.28 3.28 3 3.625 3h8.75a.625.625 0 1 1 0 1.25h-8.75A.625.625 0 0 1 3 3.625ZM3 6.625C3 6.28 3.28 6 3.625 6h8.75a.625.625 0 1 1 0 1.25h-8.75A.625.625 0 0 1 3 6.625Z"/></svg>')`, "edit-menu": 'url("chrome://global/skin/icons/edit.svg")', "view-menu": `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path fill-rule="evenodd" d="M14 1.25H2a.75.75 0 0 0-.75.75v12c0 .414.336.75.75.75h12a.75.75 0 0 0 .75-.75V2a.75.75 0 0 0-.75-.75ZM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Z" clip-rule="evenodd"/><path fill-rule="evenodd" d="M4.25 4.25v3.5h7.5v-3.5h-7.5ZM4 3a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H4ZM10.25 11.25v.5h1.5v-.5h-1.5ZM10 10a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1h-2Z" clip-rule="evenodd"/><path d="M3 10.375c0-.345.28-.625.625-.625h3.75a.625.625 0 1 1 0 1.25h-3.75A.625.625 0 0 1 3 10.375ZM3 12.375c0-.345.28-.625.625-.625h3.75a.625.625 0 1 1 0 1.25h-3.75A.625.625 0 0 1 3 12.375Z"/></svg>')`, "history-menu": 'url("chrome://browser/skin/history.svg")', "bookmarksMenu": 'url("chrome://browser/skin/bookmark.svg")', "profiles-menu": 'url("chrome://global/skin/icons/info.svg")', "tools-menu": `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path fill-rule="evenodd" d="M1 6a2 2 0 0 1 2-2h1V3a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1h1a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V6Zm3-.75H3a.75.75 0 0 0-.75.75v2H4v-.375a.625.625 0 1 1 1.25 0V8h5.5v-.375a.625.625 0 1 1 1.25 0V8h1.75V6a.75.75 0 0 0-.75-.75H4ZM2.25 13c0 .414.336.75.75.75h10a.75.75 0 0 0 .75-.75V9.25H12v1.125a.625.625 0 1 1-1.25 0V9.25h-5.5v1.125a.625.625 0 1 1-1.25 0V9.25H2.25V13ZM10 2.25H6a.75.75 0 0 0-.75.75v1h5.5V3a.75.75 0 0 0-.75-.75Z" clip-rule="evenodd"/></svg>')`, "helpMenu": 'url("chrome://global/skin/icons/help.svg")', }, toolbar: { // Настройка субменю // Если нужен разделитель то {name: 'separator'} // в субменю {name: 'separator', subdir: 'имя_субменю'}, subdirs: [{ name: 'Папки', id: 'AMfolders', image: "chrome://browser/skin/save.svg" }, { name: 'Файлы', id: 'AMprofiles', image: "chrome://devtools/skin/images/folder.svg" }, { name: 'Возможности', id: 'AMfeatures', image: "chrome://branding/content/about-logo.svg" }, { name: 'Страницы about:', id: 'AMabout', image: "chrome://global/skin/icons/developer.svg" }], apps: [{ // Подменю "Файлы" name: 'userChrome.css', root: 'ProfD', path: '\\chrome\\userChrome.css', subdir: 'Файлы', image: 'data:image/svg+xml;utf8,<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M725.333333 85.333333l213.333334 213.333334v170.666666h-85.333334v-135.253333L689.92 170.666667H170.666667v298.666666H85.333333V85.333333zM256 768v42.666667a42.666667 42.666667 0 0 1-85.333333 0v-170.666667a42.666667 42.666667 0 0 1 85.333333 0v42.666667h85.333333v-42.666667a128 128 0 0 0-256 0v170.666667a128 128 0 0 0 256 0v-42.666667z m256-85.333333a42.666667 42.666667 0 1 1 42.666667-42.666667h85.333333a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z m298.666667 0a42.666667 42.666667 0 1 1 42.666666-42.666667h85.333334a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z" p-id="7385"/></svg>' }, { name: 'userContent.css', root: 'ProfD', path: '\\chrome\\userContent.css', subdir: 'Файлы', image: 'data:image/svg+xml;utf8,<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M725.333333 85.333333l213.333334 213.333334v170.666666h-85.333334v-135.253333L689.92 170.666667H170.666667v298.666666H85.333333V85.333333zM256 768v42.666667a42.666667 42.666667 0 0 1-85.333333 0v-170.666667a42.666667 42.666667 0 0 1 85.333333 0v42.666667h85.333333v-42.666667a128 128 0 0 0-256 0v170.666667a128 128 0 0 0 256 0v-42.666667z m256-85.333333a42.666667 42.666667 0 1 1 42.666667-42.666667h85.333333a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z m298.666667 0a42.666667 42.666667 0 1 1 42.666666-42.666667h85.333334a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z" p-id="7385"/></svg>' }, { name: 'CustomStylesScripts.mjs', root: 'ProfD', path: '\\chrome\\user_chrome_files\\CustomStylesScripts.mjs', subdir: 'Файлы', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'userChrome.js', root: 'ProfD', path: '\\chrome\\userChrome.js', subdir: 'Файлы', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'separator', subdir: 'Файлы' }, { name: 'prefs.js', root: 'ProfD', path: '\\prefs.js', subdir: 'Файлы', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'user.js', root: 'ProfD', path: '\\user.js', subdir: 'Файлы', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'separator', subdir: 'Файлы' }, { name: 'policies.json', root: 'GreD', path: '\\distribution\\policies.json', subdir: 'Файлы', image: 'chrome://branding/content/about-logo.svg' }, { name: 'config.js', root: 'GreD', path: '\\config.js', subdir: 'Файлы', image: 'chrome://branding/content/about-logo.svg' }, { name: 'portable.ini', root: 'GreD', path: '\\portable.ini', subdir: 'Файлы', image: 'chrome://branding/content/about-logo.svg' }, // Подменю "Папки" { name: 'Ядро', root: 'GreD', path: '\\', subdir: 'Папки', image: 'chrome://branding/content/about-logo.svg' }, { name: 'Профиль', root: 'ProfD', path: '\\', subdir: 'Папки', image: "chrome://devtools/skin/images/folder.svg" }, { name: 'Extensions', root: 'ProfD', path: '\\extensions', subdir: 'Папки', image: 'chrome://mozapps/skin/extensions/category-extensions.svg' }, { name: 'Startup Cache', root: 'ProfLD', path: '\\startupCache', subdir: 'Папки', image: 'chrome://mozapps/skin/extensions/category-available.svg' }, { name: 'Chrome', root: 'ProfD', path: '\\chrome', subdir: 'Папки', image: 'chrome://devtools/skin/images/browsers/chrome.svg' }, { name: 'UCF \\ scripts', root: 'ProfD', path: '\\chrome\\user_chrome_files\\custom_scripts', subdir: 'Папки', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'UCF \\ styles', root: 'ProfD', path: '\\chrome\\user_chrome_files\\custom_styles', subdir: 'Папки', image: 'data:image/svg+xml;utf8,<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M725.333333 85.333333l213.333334 213.333334v170.666666h-85.333334v-135.253333L689.92 170.666667H170.666667v298.666666H85.333333V85.333333zM256 768v42.666667a42.666667 42.666667 0 0 1-85.333333 0v-170.666667a42.666667 42.666667 0 0 1 85.333333 0v42.666667h85.333333v-42.666667a128 128 0 0 0-256 0v170.666667a128 128 0 0 0 256 0v-42.666667z m256-85.333333a42.666667 42.666667 0 1 1 42.666667-42.666667h85.333333a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z m298.666667 0a42.666667 42.666667 0 1 1 42.666666-42.666667h85.333334a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z" p-id="7385"/></svg>' }, { name: 'Chrome \\ JS', root: 'ProfD', path: '\\chrome\\JS', subdir: 'Папки', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 3.55h1.98v5.66c0 2.51-1.2 3.39-3.12 3.39-.47 0-1.07-.08-1.46-.21l.22-1.61c.28.1.64.16 1.02.16.84 0 1.36-.38 1.36-1.74V3.55zm3.7 6.87c.54.28 1.36.54 2.22.54.9 0 1.4-.37 1.4-.95 0-.54-.43-.87-1.49-1.24C9.37 8.24 8.4 7.44 8.4 6.15c0-1.5 1.27-2.65 3.33-2.65 1 0 1.73.21 2.26.46l-.45 1.58a4.13 4.13 0 00-1.83-.42c-.87 0-1.28.42-1.28.86 0 .56.49.81 1.63 1.26 1.56.57 2.28 1.37 2.28 2.63 0 1.48-1.13 2.73-3.55 2.73-1 0-1.99-.28-2.49-.55l.4-1.63z" /></svg>' }, { name: 'Chrome \\ CSS', root: 'ProfD', path: '\\chrome\\CSS', subdir: 'Папки', image: 'data:image/svg+xml;utf8,<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M725.333333 85.333333l213.333334 213.333334v170.666666h-85.333334v-135.253333L689.92 170.666667H170.666667v298.666666H85.333333V85.333333zM256 768v42.666667a42.666667 42.666667 0 0 1-85.333333 0v-170.666667a42.666667 42.666667 0 0 1 85.333333 0v42.666667h85.333333v-42.666667a128 128 0 0 0-256 0v170.666667a128 128 0 0 0 256 0v-42.666667z m256-85.333333a42.666667 42.666667 0 1 1 42.666667-42.666667h85.333333a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z m298.666667 0a42.666667 42.666667 0 1 1 42.666666-42.666667h85.333334a128 128 0 1 0-128 128 42.666667 42.666667 0 1 1-42.666667 42.666667h-85.333333a128 128 0 1 0 128-128z" p-id="7385"/></svg>' } ], configs: [ // Подменю "Возможности" { name: 'Персонализация…', command: () => {gCustomizeMode.enter();}, subdir: 'Возможности', image:'chrome://browser/skin/customize.svg' }, { name: 'Перезапуск в безопасном режиме', command: () => {safeModeRestart();}, subdir: 'Возможности', image:'chrome://devtools/skin/images/debugging-workers.svg' }, { name: 'Консоль', command: () => {var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager'); BrowserConsoleManager.openBrowserConsoleOrFocus();}, subdir: 'Возможности', image:'chrome://devtools/skin/images/tool-webconsole.svg' }, { name: 'Инструменты разработчика', command: () => {var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { gDevToolsBrowser } = require('devtools/client/framework/devtools-browser'); gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());}, subdir: 'Возможности', image:'chrome://global/skin/icons/performance.svg', }, { name: 'Инструменты браузера', command: () => {var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs'); BrowserToolboxLauncher.init();}, subdir: 'Возможности', image:'chrome://devtools/skin/images/command-frames.svg', }, { name: 'Синхронизация', command: () => {gSync.openPrefs('menubar');}, subdir: 'Возможности', image:'chrome://browser/skin/sync.svg' }, { name: 'Пароли', command: () => {LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' });}, tooltiptext: 'about:logins', subdir: 'Возможности', image:'chrome://browser/skin/login.svg' }, { name: 'Менеджер процессов', command: () => {switchToTabHavingURI('about:processes', true);}, tooltiptext: 'about:processes', subdir: 'Возможности', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 5a3 3 0 0 1 6 0v7a3 3 0 1 1-6 0V5Z"/><path fill-rule="evenodd" d="M6.369 0c.345 0 .625.28.625.625v1.371a1.006 1.006 0 0 0 2.012 0V.626a.625.625 0 1 1 1.25 0v1.37a2.256 2.256 0 1 1-4.512 0V.626c0-.346.28-.626.625-.626ZM2.627 1c.345 0 .625.28.625.626v1.871c0 .76.616 1.376 1.376 1.376h6.745c.76 0 1.376-.616 1.376-1.376V1.626a.625.625 0 0 1 1.25 0v1.871a2.627 2.627 0 0 1-2.626 2.627H4.628A2.627 2.627 0 0 1 2 3.497V1.626c0-.345.28-.625.626-.625ZM0 8.63c0-.345.28-.625.625-.625h14.75a.625.625 0 1 1 0 1.25H.625A.625.625 0 0 1 0 8.63Zm4.628 3.498c-.76 0-1.376.616-1.376 1.375v1.872a.625.625 0 1 1-1.25 0v-1.872a2.627 2.627 0 0 1 2.626-2.626h6.745a2.627 2.627 0 0 1 2.626 2.626v1.872a.625.625 0 1 1-1.25 0v-1.872c0-.76-.616-1.375-1.376-1.375H4.628Z" clip-rule="evenodd"/></svg>' }, { name: 'Работать автономно', command: () => {BrowserOffline.toggleOfflineStatus();}, subdir: 'Возможности', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path fill-rule="evenodd" d="m12.499 9.154 1.326-1.326a4 4 0 0 0-5.657-5.656L6.842 3.497a.625.625 0 0 0 0 .884l4.773 4.773c.244.244.64.244.884 0ZM9.052 3.055a2.75 2.75 0 0 1 3.889 3.89l-.878.878-3.89-3.89.879-.878ZM3.497 6.842 2.172 8.168a4 4 0 0 0 5.656 5.657l1.326-1.326a.625.625 0 0 0 0-.884L4.381 6.842a.625.625 0 0 0-.884 0Zm3.448 6.099a2.75 2.75 0 0 1-3.89-3.89l.876-.875 3.889 3.89-.875.875Z" clip-rule="evenodd"/><path fill-rule="evenodd" d="M15.812.188a.625.625 0 0 1 0 .884l-2 2a.625.625 0 1 1-.884-.884l2-2a.625.625 0 0 1 .884 0Zm-8.37 6.37a.625.625 0 0 1 0 .884l-1.5 1.5a.625.625 0 0 1-.884-.884l1.5-1.5a.625.625 0 0 1 .884 0Zm2 2a.625.625 0 0 1 0 .884l-1.5 1.5a.625.625 0 1 1-.884-.884l1.5-1.5a.625.625 0 0 1 .884 0Zm-6.5 4.5a.625.625 0 0 1 0 .884l-1.87 1.87a.625.625 0 0 1-.884-.884l1.87-1.87a.625.625 0 0 1 .884 0Z" clip-rule="evenodd"/></svg>' }, // Подменю about: { name: 'about:about', command: () => {openTrustedLinkIn('about:about', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://branding/content/about-logo.svg' }, { name: 'about:cache', command: () => {openTrustedLinkIn('about:cache', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/developer.svg' }, { name: 'about:certificate', command: () => {openTrustedLinkIn('about:certificate', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M25 2C12.296875 2 2 12.296875 2 25C2 37.703125 12.296875 48 25 48C37.703125 48 48 37.703125 48 25C48 12.296875 37.703125 2 25 2 Z M 25 4C36.578125 4 46 13.421875 46 25C46 36.578125 36.578125 46 25 46C13.421875 46 4 36.578125 4 25C4 13.421875 13.421875 4 25 4 Z M 25 8C20.035156 8 16 12.035156 16 17L16 21L22 21L22 17C22 15.347656 23.347656 14 25 14C26.652344 14 28 15.347656 28 17L28 21L34 21L34 17C34 12.035156 29.964844 8 25 8 Z M 25 10C28.867188 10 32 13.132813 32 17L32 19L30 19L30 17C30 14.238281 27.761719 12 25 12C22.238281 12 20 14.238281 20 17L20 19L18 19L18 17C18 13.132813 21.132813 10 25 10 Z M 16 22C13.792969 22 12 23.792969 12 26L12 36C12 38.207031 13.792969 40 16 40L34 40C36.207031 40 38 38.207031 38 36L38 26C38 23.792969 36.207031 22 34 22 Z M 16 24L34 24C35.105469 24 36 24.894531 36 26L36 36C36 37.105469 35.105469 38 34 38L16 38C14.894531 38 14 37.105469 14 36L14 26C14 24.894531 14.894531 24 16 24 Z M 17 26C16.449219 26 16 26.449219 16 27L16 35C16 35.550781 16.449219 36 17 36C17.550781 36 18 35.550781 18 35L18 27C18 26.449219 17.550781 26 17 26 Z M 25 26C23.894531 26 23 26.894531 23 28C23 28.714844 23.382813 29.375 24 29.730469L24 35L26 35L26 29.730469C26.617188 29.371094 27 28.714844 27 28C27 26.894531 26.105469 26 25 26Z" /></svg>' }, { name: 'about:checkerboard', command: () => {openTrustedLinkIn('about:checkerboard', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/clipboard.svg' }, { name: 'about:compat', command: () => {openTrustedLinkIn('about:compat', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'resource://devtools-shared-images/alert-small.svg' }, { name: 'about:config', command: () => {openTrustedLinkIn('about:config', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/settings.svg' }, { name: 'about:crashes', command: () => {openTrustedLinkIn('about:crashes', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/loading.svg' }, { name: 'about:debugging', command: () => {openTrustedLinkIn('about:debugging', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5 5a3 3 0 0 1 6 0v7a3 3 0 1 1-6 0V5Z"/><path fill-rule="evenodd" d="M6.369 0c.345 0 .625.28.625.625v1.371a1.006 1.006 0 0 0 2.012 0V.626a.625.625 0 1 1 1.25 0v1.37a2.256 2.256 0 1 1-4.512 0V.626c0-.346.28-.626.625-.626ZM2.627 1c.345 0 .625.28.625.626v1.871c0 .76.616 1.376 1.376 1.376h6.745c.76 0 1.376-.616 1.376-1.376V1.626a.625.625 0 0 1 1.25 0v1.871a2.627 2.627 0 0 1-2.626 2.627H4.628A2.627 2.627 0 0 1 2 3.497V1.626c0-.345.28-.625.626-.625ZM0 8.63c0-.345.28-.625.625-.625h14.75a.625.625 0 1 1 0 1.25H.625A.625.625 0 0 1 0 8.63Zm4.628 3.498c-.76 0-1.376.616-1.376 1.375v1.872a.625.625 0 1 1-1.25 0v-1.872a2.627 2.627 0 0 1 2.626-2.626h6.745a2.627 2.627 0 0 1 2.626 2.626v1.872a.625.625 0 1 1-1.25 0v-1.872c0-.76-.616-1.375-1.376-1.375H4.628Z" clip-rule="evenodd"/></svg>' }, { name: 'about:downloads', command: () => {openTrustedLinkIn('about:downloads', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/downloads/downloads.svg' }, { name: 'about:logging', command: () => {openTrustedLinkIn('about:logging', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://devtools/skin/images/tool-webconsole.svg' }, { name: 'about:logins', command: () => {openTrustedLinkIn('about:logins', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/login.svg' }, { name: 'about:memory', command: () => {openTrustedLinkIn('about:memory', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://devtools/skin/images/tool-memory.svg' }, { name: 'about:networking', command: () => {openTrustedLinkIn('about:networking', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path fill-rule="evenodd" d="m12.499 9.154 1.326-1.326a4 4 0 0 0-5.657-5.656L6.842 3.497a.625.625 0 0 0 0 .884l4.773 4.773c.244.244.64.244.884 0ZM9.052 3.055a2.75 2.75 0 0 1 3.889 3.89l-.878.878-3.89-3.89.879-.878ZM3.497 6.842 2.172 8.168a4 4 0 0 0 5.656 5.657l1.326-1.326a.625.625 0 0 0 0-.884L4.381 6.842a.625.625 0 0 0-.884 0Zm3.448 6.099a2.75 2.75 0 0 1-3.89-3.89l.876-.875 3.889 3.89-.875.875Z" clip-rule="evenodd"/><path fill-rule="evenodd" d="M15.812.188a.625.625 0 0 1 0 .884l-2 2a.625.625 0 1 1-.884-.884l2-2a.625.625 0 0 1 .884 0Zm-8.37 6.37a.625.625 0 0 1 0 .884l-1.5 1.5a.625.625 0 0 1-.884-.884l1.5-1.5a.625.625 0 0 1 .884 0Zm2 2a.625.625 0 0 1 0 .884l-1.5 1.5a.625.625 0 1 1-.884-.884l1.5-1.5a.625.625 0 0 1 .884 0Zm-6.5 4.5a.625.625 0 0 1 0 .884l-1.87 1.87a.625.625 0 0 1-.884-.884l1.87-1.87a.625.625 0 0 1 .884 0Z" clip-rule="evenodd"/></svg>' }, { name: 'about:processes', command: () => {openTrustedLinkIn('about:processes', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, tooltiptext: 'Task Manager', subdir: 'Страницы about:', image:'chrome://global/skin/icons/performance.svg' }, { name: 'about:policies', command: () => {openTrustedLinkIn('about:policies', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/content/policies/policies-active.svg' }, { name: 'about:profiles', command: () => {openTrustedLinkIn('about:profiles', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/info.svg' }, { name: 'about:profiling', command: () => {openTrustedLinkIn('about:profiling', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://devtools/skin/images/profiler-stopwatch.svg' }, { name: 'about:protections', command: () => {openTrustedLinkIn('about:protections', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/tracking-protection.svg' }, { name: 'about:rights', command: () => {openTrustedLinkIn('about:rights', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 16 16" fill="currentClolor" xmlns="http://www.w3.org/2000/svg"><path d="M3.46825 1.94232C5.3025 3.31104 7.27575 6.08587 8 7.57494V11.508C8 11.4243 7.9675 11.5189 7.8975 11.7227C7.5195 12.8262 6.043 17.1329 2.66675 13.69C0.889 11.8772 1.712 10.0645 4.948 9.5172C3.09675 9.83022 1.0155 9.31289 0.4445 7.2847C0.28 6.70126 0 3.10747 0 2.6221C0 0.190746 2.14475 0.954969 3.46825 1.94232ZM12.5317 1.94232C10.6975 3.31104 8.72425 6.08587 8 7.57494V11.508C8 11.4243 8.0325 11.5189 8.1025 11.7227C8.4805 12.8262 9.957 17.1329 13.3333 13.69C15.111 11.8772 14.288 10.0645 11.052 9.5172C12.9033 9.83022 14.9845 9.31289 15.5555 7.2847C15.72 6.70126 16 3.10747 16 2.6221C16 0.190746 13.8555 0.954969 12.5317 1.94232Z" fill="context-fill light-dark(black, white)"/></svg>' }, { name: 'about:serviceworkers', command: () => {openTrustedLinkIn('about:serviceworkers', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/developer.svg' }, { name: 'about:studies', command: () => {openTrustedLinkIn('about:studies', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill light-dark(black, white)" d="M13.9 9.81a1.23 1.23 0 0 0 0-.17v-.08a5.67 5.67 0 0 0-2.4-3.36 1.17 1.17 0 0 1-.56-.95V3a1 1 0 0 0-1-1H6.06a1 1 0 0 0-1 1v2.25a1.17 1.17 0 0 1-.56 1 5.66 5.66 0 0 0-2.35 3.33v.12a.53.53 0 0 0 0 .11 5.35 5.35 0 0 0-.11 1 5.65 5.65 0 0 0 3.24 5.09 1 1 0 0 0 .44.1h4.57a1 1 0 0 0 .44-.1A5.65 5.65 0 0 0 14 10.83a5.3 5.3 0 0 0-.1-1.02zm-8.27-2a3.18 3.18 0 0 0 1.43-2.6V4h1.88v1.25a3.18 3.18 0 0 0 1.43 2.6 3.68 3.68 0 0 1 1.54 2.24v.22a2.82 2.82 0 0 1-3.68-.59A3.48 3.48 0 0 0 4.56 9a3.76 3.76 0 0 1 1.07-1.15z"></path></svg>' }, { name: 'about:support', command: () => {openTrustedLinkIn('about:support', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://devtools/skin/images/browsers/firefox.svg' }, { name: 'about:sync-log', command: () => {openTrustedLinkIn('about:sync-log', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/sync.svg' }, { name: 'about:telemetry', command: () => {openTrustedLinkIn('about:telemetry', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/arrow-down.svg' }, { name: 'about:third-party', command: () => {openTrustedLinkIn('about:third-party', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/library.svg' }, { name: 'about:translations', command: () => {openTrustedLinkIn('about:translations', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/translations.svg' }, { name: 'about:unloads', command: () => {openTrustedLinkIn('about:unloads', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, tooltiptext: 'Tabs entladen', subdir: 'Страницы about:', image:'chrome://mozapps/skin/extensions/category-available.svg' }, { name: 'about:url-classifier', command: () => {openTrustedLinkIn('about:url-classifier', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://global/skin/icons/link.svg' }, { name: 'about:webrtc', command: () => {openTrustedLinkIn('about:webrtc', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/notification-icons/screen.svg' }, { name: 'about:windows-messages', command: () => {openTrustedLinkIn('about:windows-messages', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');}, subdir: 'Страницы about:', image:'chrome://browser/skin/window.svg' }, // Пункты гамбургера { name: 'separator', }, { name: 'Новое приватное окно', command: () => {OpenBrowserWindow({private: true});}, id: 'AMprivate', image: "chrome://browser/skin/privateBrowsing.svg" }, { name: 'Настройки Firefox', command: () => {openPreferences();}, id: 'AMsettings', image: "chrome://devtools/skin/images/settings.svg", }, { name: 'Дополнения и темы', command: () => {BrowserAddonUI.openAddonsMgr();}, id: 'AMaddons', image: "chrome://mozapps/skin/extensions/category-extensions.svg", }, { name: 'separator', }, { name: 'Библиотека', command: () => {PlacesCommandHook.showPlacesOrganizer('AllBookmarks');}, id: 'AMbookmarks', image: "chrome://browser/skin/bookmark-star-on-tray.svg", }, { name: 'История', command: () => {PlacesCommandHook.showPlacesOrganizer('History');}, id: 'AMhistory', image: "chrome://browser/skin/history.svg", }, { name: 'Загрузки', command: () => {BrowserCommands.downloadsUI();}, id: 'AMdownloads', image: "chrome://browser/skin/downloads/download-summary.svg", }, { name: 'separator', }, { name: 'Удалить данные и куки', command: () => {Sanitizer.showUI(window);}, id: 'AMsanitize', image: "chrome://devtools/skin/images/clear.svg", }, { name: 'Перезапуск', tooltiptext: 'Перезапустить и пересоздать кеш быстрого запуска', // command: "Services.appinfo.invalidateCachesOnRestart(); BrowserUtils.restartApplication();", command: () => {Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);}, id: 'AMreboot', image: 'chrome://devtools/skin/images/reload.svg', }, { name: 'Выход', command: () => {goQuitApplication(event);}, id: 'AMquit', image: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M5.561 3.112c-.132-.32-.5-.474-.807-.314a7 7 0 1 0 6.492 0c-.306-.16-.675-.006-.807.314s.021.683.325.85a5.747 5.747 0 1 1-5.528 0c.303-.167.457-.53.325-.85Z"/><path fill-rule="evenodd" d="M8 1.375c.345 0 .625.28.625.625v6a.625.625 0 1 1-1.25 0V2c0-.345.28-.625.625-.625Z" clip-rule="evenodd"/></svg>' }, ] }, _externalAppPopup: null, _isready: false, init: function() { this.handleRelativePath(this.toolbar.apps); const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'; var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton'); ExternalAppBtn.id = "AppMenuButton"; ExternalAppBtn.className = "toolbarbutton-1"; ExternalAppBtn.setAttribute("label", AppConstants.MOZ_APP_NAME + " " + AppConstants.MOZ_UPDATE_CHANNEL); //ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();"); ExternalAppBtn.setAttribute("tooltiptext", AppConstants.MOZ_APP_NAME + " " + AppConstants.MOZ_UPDATE_CHANNEL + " " + AppConstants.MOZ_APP_VERSION_DISPLAY); ExternalAppBtn.setAttribute("type", "menu"); ExternalAppBtn.setAttribute("removable", "true"); ExternalAppBtn.addEventListener('click', this); if (Appmenu.isButton) { const newURIParam = { aURL: 'data:text/css,' + encodeURIComponent(this.style), aOriginCharset: null, aBaseURI: null }; const cssUri = Services.io.newURI(newURIParam.aURL, newURIParam.aOriginCharset, newURIParam.aBaseURI); if (!this.sss.sheetRegistered(cssUri, this.sss.USER_SHEET)) this.sss.loadAndRegisterSheet(cssUri, this.sss.USER_SHEET); } else { ExternalAppBtn.style.listStyleImage = 'url("chrome://browser/skin/menu.svg")'; ExternalAppBtn.style.MozContextProperties = 'fill'; ExternalAppBtn.style.setProperty('fill', 'currentColor'); } if (Appmenu.isNavbar === 1) { var navBar = document.getElementById('nav-bar'); navBar.insertBefore(ExternalAppBtn, navBar.firstChild); } else if (Appmenu.isNavbar === 2) { var menubar = document.getElementById('menubar-items'); menubar.insertBefore(ExternalAppBtn, menubar.firstChild); } else { var TabsToolbar = document.getElementById('TabsToolbar'); TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild); } var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup'); //ExternalAppPopup.setAttribute('onpopupshowing', 'event.stopPropagation(); Appmenu.onpopupshowing();'); ExternalAppPopup.setAttribute('id', 'AMpopup'); this._externalAppPopup = ExternalAppPopup; ExternalAppBtn.appendChild(ExternalAppPopup); ExternalAppBtn.addEventListener('command' , this); Appmenu.onpopupshowing(); // Cочетания клавиш для открытия меню if (Appmenu.hotkey) { let key = document.createXULElement('key'); key.id = 'key_AppMenuPopup'; key.setAttribute('key', Appmenu.hotkey); if (Appmenu.hotkeyModifier) key.setAttribute('modifiers', Appmenu.hotkeyModifier); //key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();'); key.addEventListener('command', e => {e.target.ownerDocument.getElementById("AMpopup").openPopup();}); document.getElementById('mainKeyset').appendChild(key); } if (this.isEditMenu) this.editmenu(); }, onpopupshowing: function() { if (this._isready) return; if (this._externalAppPopup === null) return; var ExternalAppPopup = this._externalAppPopup; for (let subdir of this.toolbar.subdirs) { if (subdir.name == 'separator') { ExternalAppPopup.appendChild(document.createXULElement('menuseparator')); } else { var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu')); var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup')); if (subdir.id) subdirItem.setAttribute('id', subdir.id); subdirItem.setAttribute('class', 'menu-iconic'); subdirItem.setAttribute('label', subdir.name); subdirItem.setAttribute('image', subdir.image); Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup; Appmenu.subdirMenuHash[subdir.name] = subdirItem; } } for (let app of this.toolbar.apps) { var appItem; if (app.name == 'separator') { appItem = document.createXULElement('menuseparator'); } else { appItem = document.createXULElement('menuitem'); appItem.setAttribute('class', 'menuitem-iconic'); appItem.setAttribute('label', app.name); appItem.setAttribute('image', app.image); //appItem.setAttribute('oncommand', "Appmenu.exec(event.target.path, event.target.args);"); appItem.setAttribute('tooltiptext', app.name); appItem.path = app.path; appItem.args = app.args; Appmenu.handleCommands[app.name] = () => {Appmenu.exec(event.target.path, event.target.args)}; } if (app.subdir && Appmenu.subdirPopupHash[app.subdir]) Appmenu.subdirPopupHash[app.subdir].appendChild(appItem); else ExternalAppPopup.appendChild(appItem); } for (let config of this.toolbar.configs) { var configItem; if (config.name == 'separator') { configItem = document.createXULElement('menuseparator'); } else { configItem = ExternalAppPopup.appendChild(document.createXULElement('menuitem')); configItem.setAttribute('class', 'menuitem-iconic'); configItem.setAttribute('label', config.name); configItem.setAttribute('image', config.image); //configItem.setAttribute('oncommand', config.command); if (config.tooltiptext) { configItem.setAttribute('tooltiptext', config.tooltiptext); } else { configItem.setAttribute('tooltiptext', config.name); } configItem.setAttribute('id', config.id); Appmenu.handleCommands[config.name] = config.command; } if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) { Appmenu.subdirPopupHash[config.subdir].appendChild(configItem); } else { ExternalAppPopup.appendChild(configItem); } } if (this.autohideEmptySubDirs) { for (let i = 0; i < Appmenu.subdirPopupHash.length; i++) { if (Appmenu.subdirPopupHash[i].hasChildNodes()) { continue; } else { Appmenu.subdirMenuHash[i].setAttribute('hidden', 'true'); } } } if (this.moveSubDirstoBottom) { let i = ExternalAppPopup.childNodes.length; while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) { ExternalAppPopup.appendChild(ExternalAppPopup.firstChild); } } this._isready = true; }, handleRelativePath: function(apps) { for (let app of apps) { if (app.path) { app.path = app.path.replace(/\//g, '\\'); var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path; if (/^(\\)/.test(app.path)) { app.path = ffdir + app.path; } } } }, exec: function(path, args) { args = args || []; var args_t = args.slice(0); for (let arg of args_t) { arg = arg.replace(/%u/g, gBrowser.currentURI.spec); } var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); if (!file.exists()) { //Cu.reportError('File not found: ' + path); alert('Объект не найден: ' + path); return; } if (file.isExecutable() && !path.endsWith('.js')) { var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args_t, args_t.length); } else if (file.isFile()) { if (this.editor) { let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8'; let path = UI.ConvertFromUnicode(file.path); let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); app.initWithPath(this.editor); let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(app); process.run(false, [path], 1); } else { file.launch(); } } else if (file.isDirectory()) { if (this.fileManager) { let args=[this.FMParameter,path]; let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); app.initWithPath(this.fileManager); let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(app); process.run(false, args, args.length); } else { file.launch(); } } }, editmenu: async () => { // ZUGEFÜGT! if (document.getElementById("main-menubar").querySelectorAll(":scope > script").length >= 1) { const _AMjs = {}; _AMjs.uri = "data:application/x-javascript;charset=UTF-8,"; _AMjs.res = await fetch(document.getElementById("main-menubar").querySelectorAll(":scope > script")[0].src); _AMjs.text = (await _AMjs.res.text()).replace(/main-menubar/, "AMpopup"); const scriptloader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader); scriptloader.loadSubScript(_AMjs.uri + encodeURIComponent(_AMjs.text), this); }; setTimeout(function() { var pane1 = document.getElementById('AMpopup'); var item2 = document.getElementById('AMfolders'); // Вставка меню for (var menu of Array.from(document.getElementById("main-menubar").querySelectorAll(":scope > menu"))) { var popup = menu.menupopup; popup.remove(); var img = Appmenu.iconsMenu[menu.id]; if (img) { menu.classList.add("menu-iconic"); menu.style.listStyleImage = img; menu.style.MozContextProperties = "fill"; menu.style.setProperty("fill", "currentColor"); } if (parseInt(Services.appinfo.platformVersion) <= 138) { menu.textContent = menu.renderedOnce = ""; menu.render; } menu.append(popup); menu.disablrd = false; pane1.insertBefore(menu, item2); } var separator = document.createXULElement('menuseparator'); separator.setAttribute('flex', '1'); pane1.insertBefore(separator, item2); // Вставка меню скриптов var ids = ['usercssloader-menu', 'ExtraConfigMenu' /*, 'eom-button' */]; for (var id of ids) { var _id = document.getElementById(id); if (_id) pane1.insertBefore(_id, item2); } }, 2e3); }, // ZUGEFÜGT! uninit() { document.getElementById('AppMenuButton').removeEventListener('click', this); document.getElementById('AMpopup').removeEventListener('command', this); document.getElementById('key_AppMenuPopup').remove(); document.getElementById('AppMenuButton').remove(); delete Appmenu; }, handleEvent(event) { switch (event.type) { case 'unload': this.uninit(); break; case 'click': if (event.target.id == 'AppMenuButton') { event.preventDefault(); event.stopPropagation(); } break; case 'command': if (typeof this.handleCommands[event.target.getAttribute('label')] === 'function') this.handleCommands[event.target.getAttribute('label')](); break; case 'mouseup': // console.log('AMpopup - mouseup', event.target); break; default: // event.target.hasAttribute("no" + event.type) // && eval(event.target.getAttribute("no" + event.type)); console.warn(new Error('unexpected event received',{cause:event})); break; } }, startup: () => { document.addEventListener('DOMContentLoaded', Appmenu.init(), false); // document.addEventListener('load', Appmenu.init(), false); } }).startup();
Отредактировано _zt (Вчера 17:33:49)
Отсутствует
_zt
Только один вопрос, где вы видали AppConstants.MOZ_UPDATE_CHANNEL = "dev"? Всегда было и до сих пор остаётся MOZ_UPDATE_CHANNEL: "aurora"
Жизнь иногда такое выкидывает, что хочется подобрать...
Отсутствует
@Farby
Несомненный плюс скрипта - работа в v139+ без снижения секурности (оставляем [security.allow_unsafe_dangerous_privileged_evil_eval = false]).
P.S.
Мысля вслух: если MOZ_UPDATE_CHANNEL ESR, Nightly, Aurora и пр. высвечивается на самом бутоне, то мне сдается, что было б полезнее, как по мне, высвечивать на бутоне номер версии вида v139.0b7, благо скрипт автоопределения версии содержит всего-то 13 строчек.
Отредактировано fuchsfan (Вчера 16:23:11)
Отсутствует
благо скрипт автоопределения версии содержит всего-то 13 строчек.
В скрипт и так заложено автоопределение "ESR", "Beta", "Release", "Nightly", "DevEdition", Unbrainded". Что касается версии то можно попробовать всплывающую подсказку
// ExternalAppBtn.setAttribute("tooltiptext", AppConstants.MOZ_APP_NAME + " " + AppConstants.MOZ_UPDATE_CHANNEL + " " + ("Menu")); ExternalAppBtn.setAttribute("tooltiptext", AppConstants.MOZ_APP_NAME + " " + AppConstants.MOZ_UPDATE_CHANNEL + " " + AppConstants.MOZ_APP_VERSION_DISPLAY + " " + ("Menu"));
Жизнь иногда такое выкидывает, что хочется подобрать...
Отсутствует
Farby
Не обращал внимания, так как всегда вручную обновляю. Изменил обратно, добавил версию в подсказку и "Menu" убрал.
Cрастил с FullTheme
Отредактировано _zt (Вчера 17:49:02)
Отсутствует