На 54-й лисе была у меня кнопка
Можно для 68го что-то с ней придумать
Выкинули поддержку Expression closures, а так-то, может и будет работать.
this._handleClick = () => { // очистить кэш .... Services.cache2.clear(); // Удалить Flash куки .... var dir = Services.dirsvc.get("Home", Ci.nsIFile); ["Application Data", "Macromedia"].forEach(dir.append); dir.exists() && dir.remove(true); dir.exists() || dir.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0777")); // Всплывающее сообщение .... Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) .showAlertNotification(self.image, self.label, "Очистил кэш и удалил Flash куки"); } // Всплывающая подсказка у счётчика отображает заполнение дискового кеша .............. var data = { memory: "Memory Cache: ", disk: "Disk Cache: ", offline: "Offline Cache: " }; function getSize(size) { if (!size) return size === 0 ? "0" : "?"; for(var count = -1; size >= 1024; size /= 1024, count++); return `${size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "")} ${"KMGT"[count] || ""}B`; } function setInf(tot, max, type, ind) { var inf = getSize(tot) + " / " + getSize(max); var key = `browser.cache.${type}.enable`; if (!Services.prefs.getBoolPref(key)) inf += " (disabled)"; self.tooltipText = self.tooltipText.replace(zws(ind), inf); } var zws = ind => "\u200B".repeat(++ind); var types = Object.keys(data); var context = Services.loadContextInfo.default; var ttt = "Л: Очистить кэш и удалить Flash-куки\n" + types.map((key, ind) => data[key] + zws(ind)).join("\n"); function visit(type, ind) { var storage = Services.cache2[(type[0] == "o" ? "app" : type) + "CacheStorage"](context, null); try {storage.asyncVisitStorage({ onCacheStorageInfo: (a, aConsumption, aCapacity) => setInf(aConsumption, aCapacity, type, ind) }, false)} catch(ex) {}; } self.onmouseenter = () => { this.tooltipText = ttt; types.forEach(visit); }
Получается нормальное окно и все в нем работает.
Но если я пробую открыть окошко с параметрами
В параметре нехватает фич. Попробуй, для начала, побольше:
"toolbar,location,personalbar,menubar,resizable,scrollbars,width=500,height=500"
Как установить в FirefoxPortableESR 60 или 68 с PortableApps
Так же, как и в любой другой. Не думаю, что эти чем-то особенные.
В 60 всё-таки, возможно, лучше устанавливать оверлейную версию.
в этом коде реализовать (добавить) блокировку контекстного меню
Вариант
(preventContextmenu => addEventListener("click", async e => { if (e.buttons != 2 || e.button != 0) return; // открытие - закрытие FindBar по ПКМ+ЛКМ preventContextmenu(); var findbar = gFindBar; if (findbar) { if (!findbar.hidden) return findbar.close(); } else { findbar = await gFindBarPromise; await new Promise(resolve => setTimeout(resolve, 0)); } findbar.onFindCommand(); }, false, gBrowser.tabpanels || 1))(window.addEventListener.bind( window, "contextmenu", e => e.preventDefault(), {once: true} ));
Наверно причина в том что AddonManager.getAddonsByTypes это асинхронный код, то есть он срабатывает позже, когда браузер уже выключается
Когда браузер выключается, ведь не требуется выключать собственно сами "расширения",
достаточно просто пометить их в базах как выключенные.
((id, g) => { addDestructor(r => r[5] == "e" && id in g && g[id].destroy()); if (g[id]) return; var topic = "quit-application-granted", {obs} = Services; obs.addObserver(g[id] = { ids: [ "{B5F5E8D3-AE31-49A1-AC42-78B7B1CC5CDC}", "{91aa5abe-9de4-4347-b7b5-322c38dd9271}", ], filter(addon) { if ( this.ids.includes(addon.id) && !addon.userDisabled && addon.type.endsWith("extension") && addon.location.name != "app-builtin" ) { addon.active = addon.location.get(addon.id).enabled = false; return addon.userDisabled = true; } }, observe() { this.destroy(); if (g.XPIDatabase.getAddons().filter(this.filter, this).length) g.XPIDatabase.saveChanges(), g.XPIStates.save(); }, destroy() { delete g[id]; obs.removeObserver(this, topic); } }, topic, false); })( "CBQuitApplicationExtensionsDisabler", Cu.import("resource://gre/modules/addons/XPIDatabase.jsm", {}) );
А можно перенести кнопку овновления страницы, в адресную строку и добавить такие функций типа Ctrl+ЛКМ, Ctrl+ПКМ
Перенести-то можно, но кто её там стилизировать будет?
gCustomizeMode._wantToBeInCustomizeMode || (css => { var sel = "#stop-reload-button"; var btn = document.querySelector(sel) || gNavToolbox.palette.querySelector(sel); if (!btn) return alert(sel + " not found"); var args = ["data:text/css;charset=utf-8," + encodeURIComponent(css), windowUtils.USER_SHEET]; windowUtils.loadSheetUsingURIString(...args); var moveBack = () => { gNavToolbox.palette.append(btn); CustomizableUI.ensureWidgetPlacedInWindow(btn.id, window); } addEventListener("beforecustomization", function bc() { removeEventListener("beforecustomization", bc, false, gNavToolbox); moveBack(); }, false, gNavToolbox || 1); document.getElementById("page-action-buttons").append(btn); for(var node of btn.children) node.removeAttribute("disabled"); addDestructor(() => { windowUtils.removeSheetUsingURIString(...args); gCustomizeMode._wantToBeInCustomizeMode || moveBack(); }); addEventListener("click", e => { if (!e.button) { if (e.ctrlKey) { e.preventDefault(); alert("функций типа Ctrl+ЛКМ"); } } else if (e.button == 2) { if (e.ctrlKey) { alert("Ctrl+ПКМ"); } } }, false, btn); })(` :-moz-any(#reload-button, #stop-button) > .toolbarbutton-animatable-box { display: block !important; } `);
Отсутствует
Dumby
Круто же терь, +3 функций еще оказывается на ПКМ можно добавить) ато так кнопка была скучной.
Только не понял что значит стилизовать? анимация? у меня она отключена при обновлений только 2 иконки "обновление"+"крестик".
Отредактировано func4ptch4 (23-02-2020 16:26:53)
Отсутствует
Dumby подскажи диалог "сохранить" - chrome://mozapps/content/downloads/unknownContentType.xhtml, как добавить кнопку, что не очень получается
(function() { if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm'); if (!window.Services) Cu.import('resource://gre/modules/Services.jsm'); var getPrefDirPath = function (str) { Components.utils.import("resource://gre/modules/Services.jsm"); var prefDir = Services.dirsvc.get(str, Ci.nsIFile).path; return prefDir; }; var ns = { init: function(){ switch(location.href){ case "chrome://mozapps/content/downloads/unknownContentType.xhtml": ns.saveTo(); break; } }, saveTo: function () { var dirArray = [ ['C:\\Users\\vieva\\Desktop', 'Рабочий стол'], ["" + getPrefDirPath('UChrm') + "", "chrome"], ["" + getPrefDirPath('UChrm') + "\\" + 'CSS' + "", "chrome\\CSS"], ["C:\\", "C:"], ["E:\\", "E:"], ["F:\\", "F:"], ["G:\\", "G:"] ]; var button = document.getElementById("unknownContentType").getButton("cancel"); var saveTo = button.parentNode.insertBefore(document.createXULElement("button"), button); var saveToMenu = saveTo.appendChild(document.createXULElement("menupopup")); saveTo.classList.toggle("dialog-button"); saveTo.label = "Сохранить в"; saveTo.type = "menu"; dirArray.forEach(function(dir) { var [name, dir] = [dir[1], dir[0]]; var mi = document.createXULElement("menuitem"); var item = saveToMenu.appendChild(mi); item.setAttribute("label", (name || (dir.match(/[^\\/]+$/) || [dir])[0])); item.setAttribute("image", "moz-icon:file:///" + dir + "\\"); item.setAttribute("class", "menuitem-iconic"); item.addEventListener("command", function() { var file = new FileUtils.File(dir.replace(/\\/g, '\\\\') + '\\\\' + (document.getElementById('locationtext') ? document.getElementById('locationtext').value : document.getElementById('location').value)); dialog.mLauncher.saveToDisk(file, 1); dialog.onCancel = function() {}; close(); }); });
Отсутствует
bunda1
https://forum.mozilla-russia.org/viewtopic.php?pid=778384#p778384
огромное спасибо.
а можно сделать так, чтобы при нажатии кнопки открывались нужные 2 страницы и сразу же появлялись снимки на компе?
на данный момент нужно открыть каждую нужную страницу и нажимать кнопки.
хочется в один клик делать снимки нужных страниц.
спасибо.
Отредактировано firepox (24-02-2020 18:49:03)
Отсутствует
добавить кнопку, что не очень получается
Код местами странный, но вполне рабочий (кнопку добавляет).
Я так понимаю он у тебя грузится в окно диалога.
Если да, то как именно и каким инструментом?
Нет ли возможности избавиться от шрифтов аэро?
Я без понятия что такое «шрифты аэро».
Давай пояснительный скриншот и сборку, может попробую посмотреть.
Отсутствует
А есть что-то для транлитераций? вроде видел какую-то кнопку.
Вопрос такой можно ли сделать, нажал открывается окружение "типа блокнот", можно в отдельное окно или попап все равно.
И вводишь с английской раскладкой, а там сразу идет транслитерация текста на руский с латиницы.
Пример: translit.cc, translit.ru, google.co.in/inputtools/try, в переводчике гугла тоже есть что-то такое, но там как бы отдельно идет.
В VSCode нашел такое SerTranslit, но блин надо всегда кликать для транлитераций, мне надо сразу вводишь и видишь руский текст.
Если знайте что-то такое тоже интересно, не хочу все время заходить на разные сайты а чтобы всегда было доступно под рукой.
Мм вот как-то так.
Отсутствует
Dumby вот я и не пойму каким кодом загрузить эту кнопку в окно диалога или повесить этот код на скрытую кнопку Extra1. Можешь дать хотя бы какой нибудь пример?
Отсутствует
Где тут лажа? "Выкл панель закладок при выходе"
/*Initialization Code*/ var observer = { observe:(subject, topic, data)=> { if ( data == "shutdown" ) CustomizableUI.setToolbarVisibility("PersonalToolbar", document.querySelector("#PersonalToolbar").collapsed); } }; Services.obs.addObserver(observer, "quit-application", false);
Отсутствует
Где тут лажа? "Выкл панель закладок при выходе"
Может так?
/*Initialization Code*/ var observer = { observe:(subject, topic, data)=> { if ( data == "shutdown" ) var bar = document.getElementById("PersonalToolbar"); setToolbarVisibility(bar, bar.collapsed); } }; Services.obs.addObserver(observer, "quit-application", false);
Отредактировано unter_officer (25-02-2020 16:06:58)
«The Truth Is Out There»
Отсутствует
unter_officer
Может так?
Не может, а именно так! Хвала, брате!
Рано обрадовался , при запуске( через раз) снова включается панель...
Отредактировано solombala (25-02-2020 23:59:54)
Отсутствует
solombala
Вопрос был поставлен вполне конкретный "зачем её выключать?", мне это правда совершенно непонятно, поэтому и спросил, вдруг тоже пригодится. А то что в конце добавил шутку, на мой взгляд совершенно безобидную, ну извини. Но то что ты не понимаешь шуток, это же не повод ещё хамить, правда?
Отредактировано voqabuhe (25-02-2020 22:55:36)
Отсутствует
просто тему аэро ставишь в системе. И все ...Там у каждой темы свои типы шрифтов
Да, теперь вижу, спасибо.
Увы, я не знаю как отгородить Firefox от пользовательской Windows-темы,
видимо нужен специальный стиль, чтобы приколотить всё вручную.
Рано обрадовался , при запуске( через раз) снова включается панель...
Я бы так сделал, наверно
((id, g) => { addDestructor(r => r[5] == "e" && id in g && g[id].destroy()); if (g[id]) return; var {obs, xulStore} = Services; var topic = "quit-application", doc = document.documentURI; obs.addObserver(g[id] = { observe(s, t, data) { this.destroy(); data == "shutdown" && xulStore.setValue( doc, "PersonalToolbar", "collapsed", "true" ); }, destroy() { delete g[id]; obs.removeObserver(this, topic); } }, topic, false); })( "CBQuitApplicationPersonalToolbarCollapser", Cu.getGlobalForObject(Cu) );
вот я и не пойму каким кодом загрузить эту кнопку в окно диалога
Не понял. То есть ты мне скормил некий огрызок кода,
а сам его даже и не пробовал?
Ну как, я проверял следующим образом:
дофантозировал непредоставленную концовку, чуток подформатировал,
и добавил в custom_script_all_win.js
Там намёкнуто где располагать, но, исходя из неопределённости,
просто дописал в конец.
Таким образом, вижу, что по DOMContentLoaded слегка рановато
для такого дела, поэтому тормознул листенером на событие shadowrootattached
(function() { if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm'); if (!window.Services) Cu.import('resource://gre/modules/Services.jsm'); var getPrefDirPath = function (str) { Components.utils.import("resource://gre/modules/Services.jsm"); var prefDir = Services.dirsvc.get(str, Ci.nsIFile).path; return prefDir; } var ns = { init: function(){ switch(location.href) { case "chrome://mozapps/content/downloads/unknownContentType.xhtml": //ns.saveTo(); addEventListener("shadowrootattached", ns.saveTo, {once: true}); } }, saveTo: function () { var dirArray = [ ['C:\\Users\\vieva\\Desktop', 'Рабочий стол'], ["" + getPrefDirPath('UChrm') + "", "chrome"], ["" + getPrefDirPath('UChrm') + "\\" + 'CSS' + "", "chrome\\CSS"], ["C:\\", "C:"], ["E:\\", "E:"], ["F:\\", "F:"], ["G:\\", "G:"] ]; var button = document.getElementById("unknownContentType").getButton("cancel"); var saveTo = button.parentNode.insertBefore(document.createXULElement("button"), button); var saveToMenu = saveTo.appendChild(document.createXULElement("menupopup")); saveTo.classList.toggle("dialog-button"); saveTo.label = "Сохранить в"; saveTo.type = "menu"; dirArray.forEach(function(dir) { var [name, dir] = [dir[1], dir[0]]; var mi = document.createXULElement("menuitem"); var item = saveToMenu.appendChild(mi); item.setAttribute("label", (name || (dir.match(/[^\\/]+$/) || [dir])[0])); item.setAttribute("image", "moz-icon:file:///" + dir + "\\"); item.setAttribute("class", "menuitem-iconic"); item.addEventListener("command", function() { var file = new FileUtils.File(dir.replace(/\\/g, '\\\\') + '\\\\' + ( document.getElementById('locationtext') ? document.getElementById('locationtext').value : document.getElementById('location').value )); dialog.mLauncher.saveToDisk(file, 1); dialog.onCancel = function() {}; close(); }); }); } }; ns.init(); })();
Отсутствует
Dumby я не пользуюсь custom_script_all_win.js, я хотел сделать из CB. Да в скрипте он идет (и в моем варианте шел, так что это был не огрызок кода), а из СВ не идет. Мне бы пример как добавить кнопку в диалог из СВ. Извини если запутал
Отсутствует
Dumby
Я бы так сделал, наверно
Тонкий ход...А зауниверсалить можно? Типа, из abot:config параметр ? media.autoplay.default , или типа этого...Короче , на выходе обратно встало, как по умолчанию...
this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 350) ? 0 : 350);
Отсутствует
egorsemenov06
Там же написано
// Also you can check for add-ons updates using right-click:
// copy all code from
// https://github.com/Infocatcher/Custom_Buttons/blob/master/Check_for_Addons_Updates/checkForAddonsUpdates.js
// after "//== Check for Addons Updates begin"
т.е. надо вставить весь код checkForAddonsUpdates.js в код toggleRestartlessAddons.js (почти в самом конце) между
function checkForAddonsUpdates() {
//== Check for Addons Updates begin
//== Check for Addons Updates end
}
Отсутствует
Друзья, не подскажете ли, есть ли у нас код с кнопкой гугловского виджета?
Для перевода страниц я хотел бы включать Виджет, не используя приложения переводчики.
Есть вот такой код для вызова Виджета из закладки
javascript:{var d, b, o, v, p; b = (d = document).body; o = d.createElement('script'); o.setAttribute('src', 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'); o.setAttribute('type', 'text/javascript'); b.appendChild(o); v = b.insertBefore(d.createElement('div'), b.firstChild); v.id = 'google_translate_element'; v.style.display = 'none'; p = d.createElement('script'); p.text = 'function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:""},"google_translate_element");}'; p.setAttribute('type', 'text/javascript'); b.appendChild(p)};void(0);
Отредактировано leex (27-02-2020 18:08:14)
Отсутствует
Andrey_Krropotkin
Перестала у меня работать кнопка Google русский-английский. Это у меня личное или можешь поправить?
Отсутствует
leex в секцию код
var vert = ` javascript:{var d, b, o, v, p; b = (d = document).body; o = d.createElement('script'); o.setAttribute('src', 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'); o.setAttribute('type', 'text/javascript'); b.appendChild(o); v = b.insertBefore(d.createElement('div'), b.firstChild); v.id = 'google_translate_element'; v.style.display = 'none'; p = d.createElement('script'); p.text = 'function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:""},"google_translate_element");}'; p.setAttribute('type', 'text/javascript'); b.appendChild(p)};void(0);` ; gBrowser. loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });
Отсутствует