Перетаскивал свою папку Chrome в новые версии. Начинал, кажется, с 57-й версии, потом, 60.8, 68 - все работало. Сейчас попробовал FF78ESR - некоторые фишки отказали. В частности пропала кнопка "рестарт браузера" и строки в контекстном меню "Открыть страницу(ссылку) в IE" и других браузерах. Сам не очень соображаю в этом деле, собирал с миру по нитке. Парни, кто волокет - помогите адаптировать!
https://yadi.sk/d/eG8oaWIiHkq2Aw
Отсутствует
Win7
Отсутствует
В частности пропала кнопка "рестарт браузера" и строки в контекстном меню "Открыть страницу(ссылку) в IE"
Сейчас это можно реализовать только скриптом на базе комплекта user_chrome_files. toolkit.legacyUserProfileCustomizations.stylesheets в данном случае включать не требуется, а только изучить файл Readme.txt. Собрал вот, попробуйте.
Отсутствует
sandro79
Собрал вот, попробуйте.
Работает, спасибо. Правда, для меня избыток функций , мне одного рестарта вполне хватило бы.
Теперь бы еще добавить в контекстное меню "Открыть в другом браузере..."
Отсутствует
Теперь бы еще добавить в контекстное меню "Открыть в другом браузере..."
Ну я же добавил этот скрипт,только включить его надо. Или не работает? Ваши стили из комплекта запустились? Из того что я выложил на диск.
Там всё уже добавлено и поправлено, нужно только в настройках включить стили и скрипт, куда же проще.
Отредактировано sandro79 (27-07-2020 00:11:54)
Отсутствует
Ну я же добавил этот скрипт,только включить его надо.
Ага. Значит, я не въехал просто
Ваши стили из комплекта запустились?
Да, работают. Только они, вроде, и до этого работали. Не работали рестарт браузера и "Открыть в...". Эти фишки сейчас появились, но не мои, а ваши.
Там всё уже добавлено и поправлено, нужно только в настройках включить стили и скрипт, куда же проще.
Все равно не понимаю пока принципа работы конструкции. Например, как удалить из контекста ненужные строки и добавить нужную - "Открыть в Тор"
Отредактировано ez7pac (27-07-2020 00:55:16)
Отсутствует
Да, работают. Только они, вроде, и до этого работали.
Все равно не понимаю пока принципа работы конструкции. Например, как удалить из контекста ненужные строки и добавить нужную - "Открыть в Тор"
Ну а как вы это раньше делали, принцип такой как и в стиле с биндигом, только в скрипте теперь нужно править, а не в биндинге. Я у себя выкинул все строки кроме .
// Этот скрипт работает в главном окне браузера если включено в настройках var ucf_custom_script_win = { initialized: false, unloadlisteners: [], load: function() { if (this.initialized) return; this.initialized = true; // this.specialwidgets.constructor(); // <-- Special Widgets // this.autohidesidebar.constructor(); // <-- Auto Hide Sidebar /* ************************************************ */ this.contextmenuopenwith.constructor(); // Здесь может быть ваш код который сработает по событию "load" не раньше /* ************************************************ */ if (this.unloadlisteners.length < 1) return; window.addEventListener("unload", this, false); }, handleEvent: function(event) { this[event.type](event); }, unload: function() { window.removeEventListener("unload", this, false); this.unloadlisteners.forEach((str) => { try { this[str].destructor(); } catch (e) {} }); }, contextmenuopenwith: { _eventlisteners: [], constructor: function() { var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет var submenu = false; // true или false Добавить подменю для пунктов или нет // ['ID пункта', 'имя приложения', 'путь к приложению', 'аргументы через пробел (то что в двойных кавычках считается за один аргумент)', 'иконка (для ОС Windows необязательно)'], var arrayWindows = [ // для Windows ['iexplore', 'IE', 'C:\\Program Files\\Internet Explorer\\iexplore.exe', '%OpenURI'], ["TOR Browser", "TOR", "C:\\Portable\\Tor Browser\\Browser\\firefox.exe", "-P,default,-new-tab,%OpenURI"], ]; var arrayLinux = [ // для Linux ['smplayer', 'SMPlayer', '/usr/bin/smplayer', '%OpenURI', 'moz-icon://stock/smplayer?size=menu'], ['vlc', 'VLC', '/usr/bin/vlc', '%OpenURI', 'moz-icon://stock/vlc?size=menu'], ['uget', 'uGet', '/usr/bin/uget-gtk', '%OpenURI', 'moz-icon://stock/uget-icon?size=menu'], ]; var arrayMacos = [ // для MacOS [], ]; var arrayOS, platform = AppConstants.platform, length; if (platform == "win") arrayOS = arrayWindows; else if (platform == "linux") arrayOS = arrayLinux; else if (platform == "macosx") arrayOS = arrayMacos; else return; if (!(length = arrayOS.length)) return; var addEventListener = this.addEventListener.bind(this); ucf_custom_script_win.unloadlisteners.push("contextmenuopenwith"); var popup = document.querySelector("#contentAreaContextMenu"), seppage = popup.querySelector("#context-sep-viewbgimage"), sepopen = popup.querySelector("#context-sep-open"), fragpage = document.createDocumentFragment(), fraglink = document.createDocumentFragment(), subpage = "", sublink = ""; if (length == 1) submenu = false; if (!submenu) { subpage = "Открыть страницу в "; sublink = "Открыть ссылку в "; } arrayOS.forEach(item => { var id = item[0], name = item[1], path = item[2], arg = !item[3] ? "" : item[3], iconpath; if (!id || !name || !path) return; var menuitem_0 = document.createXULElement("menuitem"); menuitem_0.id = `open-current-page-with-${id}`; menuitem_0.className = "menuitem-iconic open-current-page-with-application"; menuitem_0.setAttribute("label", `${subpage}${name}`); menuitem_0.applicationpath = path; menuitem_0.applicationarg = arg; if (attrimage) { iconpath = !item[4] ? (`moz-icon://file://${path}?size=16`) : item[4]; menuitem_0.setAttribute("image", iconpath); } fragpage.append(menuitem_0); addEventListener(menuitem_0, "command", function(event) { try { var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(target.applicationpath); if (!file.exists() || !file.isExecutable()) return; arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => { if (/%OpenURI/g.test(sp)) return sp.replace(/^"|"$/g, "").replace("%OpenURI", decodeURIComponent(gBrowser.currentURI.spec)); return sp.replace(/^"|"$/g, ""); }) : []; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(arg, arg.length); } catch(e) {} }); var menuitem_1 = document.createXULElement("menuitem"); menuitem_1.id = `open-link-with-${id}`; menuitem_1.className = "menuitem-iconic open-link-with-application"; menuitem_1.setAttribute("label", `${sublink}${name}`); menuitem_1.applicationpath = path; menuitem_1.applicationarg = arg; if (attrimage) menuitem_1.setAttribute("image", iconpath); fraglink.append(menuitem_1); addEventListener(menuitem_1, "command", function(event) { try { var target = event.currentTarget; var arg = target.applicationarg; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(target.applicationpath); if (!file.exists() || !file.isExecutable() || !window?.gContextMenu?.linkURL) return; arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => { if (/%OpenURI/g.test(sp)) return sp.replace(/^"|"$/g, "").replace("%OpenURI", decodeURIComponent(gContextMenu.linkURL)); return sp.replace(/^"|"$/g, ""); }) : []; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(arg, arg.length); } catch(e) {} }); }); if (!submenu) { seppage.before(fragpage); sepopen.before(fraglink); } else { let menu = document.createXULElement("menu"); menu.id = "open-current-page-with-submenu"; menu.className = "menu-iconic open-current-page-with-application"; menu.setAttribute("label", "Открыть страницу в..."); let menupopup = document.createXULElement("menupopup"); menupopup.append(fragpage); menu.append(menupopup); seppage.before(menu); menu = document.createXULElement("menu"); menu.id = "open-link-with-submenu"; menu.className = "menu-iconic open-link-with-application"; menu.setAttribute("label", "Открыть ссылку в..."); menupopup = document.createXULElement("menupopup"); menupopup.append(fraglink); menu.append(menupopup); sepopen.before(menu); } var style = "data:text/css;charset=utf-8," + encodeURIComponent(` #contentAreaContextMenu #context-openlink:not([hidden="true"]) ~ .open-current-page-with-application, #contentAreaContextMenu #context-openlink[hidden="true"] ~ .open-link-with-application { display: none !important; } `); windowUtils.loadSheetUsingURIString(style, windowUtils.USER_SHEET); }, addEventListener: function(...arr) { var elm = arr[0]; if (!elm) return; elm.addEventListener(...arr.slice(1)); this._eventlisteners.push(arr); }, destructor: function() { for(var arr of this._eventlisteners) arr.shift().removeEventListener(...arr); delete this._eventlisteners; } }, autohidesidebar: { sidebar: null, constructor: function() { var sidebar = this.sidebar = document.querySelector("#sidebar-box"); if(!sidebar) return; ["dragenter", "drop", "dragexit"].forEach((type) => { sidebar.addEventListener(type, this, false); }); ucf_custom_script_win.unloadlisteners.push("autohidesidebar"); }, destructor: function() { var sidebar = this.sidebar; ["dragenter", "drop", "dragexit"].forEach((type) => { sidebar.removeEventListener(type, this, false); }); }, handleEvent: function(event) { this[event.type](event); }, dragenter: function() { if (!this.sidebar.hasAttribute("sidebardrag")) this.sidebar.setAttribute("sidebardrag", "true"); }, drop: function() { if (this.sidebar.hasAttribute("sidebardrag")) this.sidebar.removeAttribute("sidebardrag"); }, dragexit: function(event) { var sidebar = this.sidebar; var boxObj = sidebar.getBoundingClientRect(), boxScrn = !sidebar.boxObject ? sidebar : sidebar.boxObject; if ((!event.relatedTarget || event.screenY <= (boxScrn.screenY + 5) || event.screenY >= (boxScrn.screenY + boxObj.height - 5) || event.screenX <= (boxScrn.screenX + 5) || event.screenX >= (boxScrn.screenX + boxObj.width - 5)) && sidebar.hasAttribute("sidebardrag")) sidebar.removeAttribute("sidebardrag"); } } }; if (window.document.readyState != "complete") { window.addEventListener("load", function load() { window.removeEventListener("load", load, false); ucf_custom_script_win.load(); }, false); } else ucf_custom_script_win.load();
Если я правильно понял, то нужно закинуть свои userChrome и userContent в profile\chrome\user_chrome_files\custom_styles? И свои можно после этого удалить из profile\chrome?
Да, всё верно, и это уже сделано. Читайте инструкцию.
Вот это с импортом непонятно еще - "...добавить свой код или импортировать другие файлы стилей через @import url("./myFile.css")". Это как?
Ну как? Можно или добавить в custom_style_user.css или импортировать из рядом лежащего myFile.css или userChrome.css или 22.css. Посмотрите содержимое файла custom_style_user.css и папки в которой он находится, из моего архива.
Отредактировано sandro79 (27-07-2020 11:54:04)
Отсутствует
В 78 версии border-radius для адресной и поисковой строки работают?
Да вроде бы... По крайней мере, не вижу явных отличий от того, что было у меня в прежних версиях.
А контекстное меню вкладки со времён даже 68 версии было переработано, не говоря уже о 60 версии.
То же самое. В глаза ничего лишнего не бросается и ладно...
Ну а как вы это раньше делали, принцип такой как и в стиле с биндигом, только в скрипте теперь нужно править, а не в биндинге. ...
custom_script_win.js.
Ага, глянул. Теперь становится понятней. Завтра уже на свежую голову покопаюсь.
А насчет импорта мне неясно именно вот это:
...через @import url("./myFile.css")
Куда адрес файла вводить и кому его показывать?
++++
Да, всё верно, и это уже сделано. Читайте инструкцию.
А, сразу не понял. В смысле, в архиве уже именно мои стили? Мне никаких телодвижений по их добавлению делать не надо? Я правильно понял?
Отредактировано ez7pac (27-07-2020 02:44:59)
Отсутствует
Обновил contextmenuopenwith
- когда страница в режиме чтения передавать оригинальный URL вместо about:reader?url=...
- передавать displaySpec, кириллические домены как есть а не punycode xn--...
Да вроде бы...
Что значит "вроде бы", border-radius не знаете что это?
Куда адрес файла вводить и кому его показывать?
Вот что не понятно в этой фразе добавить свой код или импортировать другие файлы стилей через @import url("./myFile.css");
разумеется @import ... добавляется в custom_style_user.css или другие custom_style... в начало файла...
ваш файл myFile.css в папку custom_styles
Отсутствует
Vitaliy V.
Что это за локальное имя а ? Не могу брать id="releasenotes"...
<description id="updateAppInfo"> <html:a id="releasenotes" target="_blank" data-l10n-name="learn-more" class="learnMore text-link" hidden="true"/> </description>
Отредактировано solombala (27-07-2020 17:35:46)
Отсутствует
Что это за локальное имя а ?
ссылка чего ж ещё.
или
Убрал классом .learnMore {display:none !important} вроде ни есть гуд...?
так много ещё чего скроешь
Отсутствует
Garalf
Персонализация --> компактные значки, чем не устраивает?
Отсутствует
Что значит "вроде бы", border-radius не знаете что это?
Смутно припоминается . Вроде бы, настройка вкладок. Когда знаешь - все просто. Я занимаюсь этим от случая к случаю, последний раз настраивал 57-ю версию, потом только перетаскивал папку chrome. И тогда писал не сам, а собирал готовые решения до кучи. Так что, знания у меня чисто по вершкам чуть-чуть, чайник, короче
Вот что не понятно в этой фразе добавить свой код или импортировать другие файлы стилей через @import url("./myFile.css");
Честно сказать, все непонятно. Вернее, добавить свой код - более-менее понятно, а вот насчет импорта через @import url("./myFile.css") - темный лес. Ну, в принципе и бог с ним, sandro79 уже адаптировал мои стили, за что ему большое русское мерси . С остальным, надеюсь, разберусь потихоньку.
Отсутствует
Garalf
*|*:root { --toolbarbutton-outer-padding: 1px !important; --toolbarbutton-inner-padding: 6px !important; --v-urlbar-search-container: 1px; } *|*:root[uidensity="compact"] { --toolbarbutton-outer-padding: 1px !important; --toolbarbutton-inner-padding: 4px !important; --v-urlbar-search-container: 1px; } *|*:root[uidensity="touch"] { --toolbarbutton-outer-padding: 2px !important; --toolbarbutton-inner-padding: 7px !important; --v-urlbar-search-container: 3px; } *|*:root toolbarbutton *|*.toolbarbutton-badge { margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important; } *|*:root:not([uidensity="compact"]) #back-button { padding-top: 0 !important; padding-bottom: 0 !important; padding-inline-start: var(--toolbarbutton-outer-padding) !important; padding-inline-end: 0 !important; } *|*:root:not([uidensity="compact"]) #back-button > .toolbarbutton-icon { width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; padding: var(--toolbarbutton-inner-padding) !important; } :root:not([uidensity="compact"]) #PanelUI-button { padding: 0 var(--toolbarbutton-outer-padding) !important; margin-inline-start: var(--toolbarbutton-outer-padding) !important; } :root:not([uidensity="compact"]) #PanelUI-menu-button { padding: 0 var(--toolbarbutton-outer-padding) !important; } #urlbar-container, #search-container { padding-block: var(--v-urlbar-search-container) !important; margin-inline: 1px !important; } #urlbar-search-splitter { min-width: 6px !important; width: 6px !important; margin: 0 -3px !important; }
Вроде бы, настройка вкладок
вообще-то css свойство, и в данном случае к вкладкам отношения не имеет
Отредактировано Vitaliy V. (27-07-2020 20:49:32)
Отсутствует
вообще-то css свойство, и в данном случае к вкладкам отношения не имеет
Да, точно, глянул сейчас - скругление углов адресной и поисковой строки. Вот же, блин, тогда непонятно вообще как ко мне это попало. Мне глубоко фиолетово прямоугольная у меня эта строка или скругленная. Скорее всего, когда-то посчитал, что это скругление именно вкладок и потом таскал бесполезную для меня настройку из версии в версию. Ну, хоть сейчас разобрался
Отсутствует
sandro79, еще вопрос возник по настройке. Как изменить кнопку рестарта браузера? Где это дело прописано? Искал, не нашел...
И еще. Можно как-то вывести на панель инструментов кнопку менеджера паролей? На 68 стоял add toolbar buttons, там было это дело, но в 78 расширение отвалилось. Вернее, оно, вроде, и ставится, и кнопку можно вывести, но менеджер не запускает.
Отсутствует
Обновил contextmenuopenwith
Спасибо, тоже обновился.
Как изменить кнопку рестарта браузера? Искал, не нашел...
Ну если вы не сразу нашли userChrome.css и userContent.css, то это тем более. https://forum.mozilla-russia.org/viewto … 04#p774304 Ну как я вижу кнопка находится здесь: vertical_top_bottom_bar/svg/restart-app-16.svg
Можно как-то вывести на панель инструментов кнопку менеджера паролей?
С add toolbar buttons у меня лично проблем нет, но пароли с недавних пор открываются во вкладке, а не в отдельном окне, это особенность последних версий
но менеджер не запускает
А что запускает? Конечно лучше у автора (Vitaliy V.) этих инструментов спрашивать как и что править под себя и т.п.
Отсутствует
Ну если вы не сразу нашли userChrome.css и userContent.css, то это тем более.
Ну так я сразу сказал - я в этих делах чайник, нахватавшийся по мелочи кое-каких вершков. Так что намекать чайнику, что он чайник... Ну, не знаю, можно, наверное, если очень хочется...
К тому же, в прошлой приблуде кнопка была прописана в userChrome. Откуда мне было сообразить, что в этой она существует в виде svg...
С add toolbar buttons у меня лично проблем нет, но пароли с недавних пор открываются во вкладке, а не в отдельном окне, это особенность последних версий
Да, это я у себя нашел какую-то старую версию, 2019 года, она не работала, точнее, работала, но криво. Покопался, нашел более свежую, этого года - эта работает нормально. Да, хотелось бы, чтобы менеджер открывался в отдельном окне, но хоть так...
Отсутствует