Товарищи, есть пара вопросов по кнопкам (Windows 7, Fx 91.4.1 ESR (32 бита)).
1. Раньше, до WE, Attributes Inspector показывал BODY и все «внутренности», а теперь только browser,
(на страницах about:* продолжает показывать элементы html).
Элементы chrome продолжает нормально показывать. Подключён через ucf.
Так и должно быть или я что-то сломал?
2. Кнопка «Миниатюры страниц»
3. Полный ноль в скриптах решил таки сделать кнопку
Первый вариант:
var elem = document.getElementById("ucf-mem-indicator-label"); elem.onclick = doMMU; function doMMU() { Services.obs.notifyObservers(null, "child-mmu-request"); gMgr.minimizeMemoryUsage(() => updateMainAndFooter( "Memory minimization completed", SHOW_TIMESTAMP, HIDE_FOOTER ) ); }
Ошибка в консоли
Uncaught ReferenceError: gMgr is not defined
doMMU chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button9@init line 1 > Function:10
button.js:10:3
doMMU chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button9@init line 1 > Function:10
Второй вариант:
let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService( Ci.nsIMemoryReporterManager ); var elem = document.getElementById("ucf-mem-indicator-label"); elem.onclick = doMMU; function doMMU() { Services.obs.notifyObservers(null, "child-mmu-request"); gMgr.minimizeMemoryUsage(() => updateMainAndFooter( "Memory minimization completed", SHOW_TIMESTAMP, HIDE_FOOTER ) ); }
Ошибка в консоли
Uncaught ReferenceError: updateMainAndFooter is not defined
doMMU chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button9@init line 1 > Function:15
button.js:15:5
Третий нерабочий вариант без ошибок
let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService( Ci.nsIMemoryReporterManager ); var elem = document.getElementById("ucf-mem-indicator-label"); elem.onclick = doMMU; function doMMU() { Services.obs.notifyObservers(null, "child-mmu-request"); gMgr.minimizeMemoryUsage(() => alert('Да пошло всё в жопу!\nОпять ничего не очистилось.') ); }
Отсутствует
Раньше, до WE, Attributes Inspector показывал BODY и все «внутренности», а теперь только browser
Так и должно быть или я что-то сломал?
Да, так и должно быть.
Attributes Inspector показывает то, что есть.
В многопроцессном Firefox вэбские „BODY и все «внутренности»”
находятся в другом процессе, то есть показывать просто нечего.
Хочу скрыть иконку кнопки с панели.
Перестали отображаться миниатюры.
Можно что-то придумать?
Миниатюры отображаются в <menupopup>, который,
в случае CB, добавляется как дочерний элемент самой кнопки.
Если кнопку скрыть, то и menupopup, соответственно, тоже будет скрытым.
Неужели нет ни одной кнопки без menupopup,
которая не жертва «Хочу скрыть», чтобы просто дописать (добавить)
этот код ей в Инициализацию.
В конце концов, можно подключить этот код в UCF custom_script_win.js
Третий нерабочий вариант без ошибок
Вариант рабочий, просто елемента ещё пока нет.
Может заверни в таймаут setTimeout(() => {/* Здесь код*/}, 2500);
Отсутствует
Спасибо большое.
Про добавление в «чужую» инициализацию забыл, да для меня и не очень хорошо, если придётся обновлять кнопку, то ведь всю инициализацию смахну. Добавил код в custom_script_win.js. Работает.
Насчёт очистки памяти. Весь код завернул в таймаут, надеюсь, что это правильно.
Память, видимо из вредности, теперь сама отдаётся, не дожидаясь нажатия.
Отсутствует
Нехочу. Можешь просто сам обернуть, типа
скрытый текстВыделить кодКод:
(async func => CustomizableUI.createWidget({ id: "797743", label: "Сохранить как PNG", tooltiptext: "Сохранить как PNG", localized: false, onCreated(btn) { var win = btn.ownerGlobal; new win.Function("_id, xhtmlns, addDestructor", func.toString().slice(7, -1)).call( btn, this.id, "http://www.w3.org/1999/xhtml", destructor => win.addEventListener("unload", destructor, {once: true}) ); btn.setAttribute("image", "resource://usercontext-content/pet.svg"); } }))(() => { // Здесь код });
Большое спасибо.
«The Truth Is Out There»
Отсутствует
Здравствуйте! Кто-нибудь сталкивался с проблемой горячих клавиш? Есть ли способ назначить для СВ "Горячее" сочетание клавиш так, что бы она срабатывала даже если по каким-то причинам сменилась раскладка клавиатуры?
Отредактировано dedfor (22-01-2022 07:27:16)
Отсутствует
Dumby
Переделайте пожалуйста кнопочку для UCF.
/*Initialization Code*/ // Открывать ссылки длинным кликом .......... // https://forum.mozilla-russia.org/viewtopic.php?pid=720922#p720922 ..... (code => { var delay = 500; // время удержания в мс var inBackground = false; // открывать в фоновой вкладке var relatedToCurrent = false; // открывать рядом с related вкладкой var p = "CB" + _id.slice(20) + ":LongPressHandler:"; var msgDestroy = p + "Destroy", msgResponse = p + "Response"; code = code.replace(/%MD%/g, msgDestroy).replace("%MR%", msgResponse) .replace("%DL%", delay).replace("%BG%", inBackground); var url = "data:," + encodeURIComponent(code); var mm = window.getGroupMessageManager("browsers"); mm.loadFrameScript(url, true); function handleLongPress(msg) { var [link, ref, ctrl] = msg.data; var bg = inBackground != null ? inBackground : Services.prefs.getBoolPref("browser.tabs.loadInBackground"); gBrowser.loadOneTab(link, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }), { relatedToCurrent, inBackground: ctrl != bg, //referrerURI: makeURI(ref) }; } mm.addMessageListener(msgResponse, handleLongPress); addDestructor(() => { mm.removeDelayedFrameScript(url); mm.broadcastAsyncMessage(msgDestroy); mm.removeMessageListener(msgResponse, handleLongPress); }); })(`({ init() { addEventListener("mousedown", this, false); addMessageListener("%MD%", this); }, receiveMessage() { removeEventListener("mousedown", this, false); removeMessageListener("%MD%", this); }, handleEvent(e) { if (e.type == "mousedown") { if (e.button || e.shiftKey || e.altKey || e.detail != 1) return; var a = e.originalTarget.closest("a[href]"); if (!a || a.href.startsWith("javascript:")) return; this.ctrl = e.ctrlKey; this.initLongPress(a); } else { if (e.type == "click" && !this.link) e.preventDefault(); this.destroyLongPress(); } }, get timer() { delete this.timer; return this.timer = Cc["@mozilla.org/timer;1"] .createInstance(Ci.nsITimer); }, notify() { sendSyncMessage("%MR%", [this.link.href, this.link.ownerDocument.URL, this.ctrl]); this.link = null; if (!%BG%) this.destroyLongPress(); }, initLongPress(a) { addEventListener("click", this, true); addEventListener("dragstart", this, false); this.timer.initWithCallback(this, %DL%, this.timer.TYPE_ONE_SHOT); this.link = a; }, destroyLongPress() { removeEventListener("click", this, true); removeEventListener("dragstart", this, false); this.link && this.timer.cancel(); this.link = null; } }).init();`);
«The Truth Is Out There»
Отсутствует
Я хочу сделать следующее.
Нажимаю левую кнопку мыши, затем нажимаю правую, держу нажатыми в течение допустим 2 сек. После этого запускается нужная мне функция. Но если за эти 2 сек. была отпущена любая кнопка мыши, то всё сбрасывается, все таймауты обнуляются.
Можно это реализовать?
Отсутствует
Dumby
Нет ли кода стоп-видео ? Выкл. звук не то. Может в настройках ? Хочу при минимизации окна добавить ...Пока просто добавляю BrowserReload();
Вроде не кошерно как-то...
Отредактировано ВВП (24-01-2022 18:40:31)
Отсутствует
Переделайте пожалуйста кнопочку для UCF.
JSM'ка
var delay = 500; // время удержания в мс var inBackground = false; // открывать в фоновой вкладке var relatedToCurrent = false; // открывать рядом с related вкладкой var name = "LPA", EXPORTED_SYMBOLS = [name + "Child", name + "Parent"]; var u = {get timer() { delete this.timer; return this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); }}; inBackground == null ? Object.defineProperty(u, "bg", { get: Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch) .getBoolPref.bind(null, "browser.tabs.loadInBackground") }) : u.bg = inBackground; //ChromeUtils.defineModuleGetter(u, "E10SUtils", `resource://gre/modules/E10SUtils.jsm`); if (!ChromeUtils.domProcessChild.childID) { var triggeringPrincipal = Cu.getObjectPrincipal(Cu); var LPAParent = class extends JSWindowActorParent { receiveMessage(msg) { var [link, inBackground, ref] = msg.data; this.manager.browsingContext.top .embedderElement.ownerGlobal.gBrowser.loadOneTab(link, { triggeringPrincipal, relatedToCurrent, inBackground, //referrerInfo: u.E10SUtils.deserializeReferrerInfo(ref) }); } } ChromeUtils.registerWindowActor(name, { allFrames: true, parent: {moduleURI: __URI__}, messageManagerGroups: ["browsers"], child: {moduleURI: __URI__, events: {mousedown: {}}} }); } class LPAChild extends JSWindowActorChild { handleEvent(e) { if (e.type == "mousedown") { if (e.button || e.shiftKey || e.altKey || e.detail != 1) return; var a = e.originalTarget.closest("a[href]"); if (!a || a.href.startsWith("javascript:")) return; this.ctrl = e.ctrlKey; this.initLongPress(a); } else e.type == "click" && !this.link && e.preventDefault(), this.destroyLongPress(); } timeout() { var bg = this.ctrl != u.bg; var data = [this.link.href, bg]; //var referrerInfo = Cc["@mozilla.org/referrer-info;1"].createInstance(Ci.nsIReferrerInfo); //referrerInfo.initWithElement(this.link); //data.push(u.E10SUtils.serializeReferrerInfo(referrerInfo)); this.sendAsyncMessage("", data); this.link = null; bg || this.destroyLongPress() //|| this.contentWindow.windowUtils.sendMouseEventToWindow("mouseup", -1, -1, 0, 1, 0); // Linux (?) } initLongPress(a) { this.contentWindow.addEventListener("click", this, true); this.contentWindow.addEventListener("dragstart", this, false); u.timer.initWithCallback(() => this.timeout(), delay, u.timer.TYPE_ONE_SHOT); this.link = a; } destroyLongPress() { this.contentWindow.removeEventListener("click", this, true); this.contentWindow.removeEventListener("dragstart", this, false); this.link && u.timer.cancel(); this.link = null; } didDestroy() { this.link && this.destroyLongPress(); } }
Нажимаю левую кнопку мыши, затем нажимаю правую, держу нажатыми в течение допустим 2 сек. После этого запускается нужная мне функция. Но если за эти 2 сек. была отпущена любая кнопка мыши, то всё сбрасывается, все таймауты обнуляются.
Можно это реализовать?
Маловато информации, но, теоретически
возможность реализации не исключена, зависит от несказанного.
var myFunction = () => { gBrowser.selectedTab = gBrowser.addTrustedTab("about:robots"); } var tid; var launcher = () => { tid = null; myFunction(); } var mouseup = e => { var tn = tid === null; tn && e.button == 2 && e.preventDefault(); if (tid) tid = clearTimeout(tid); else if (!tn || e.button) window.removeEventListener("mouseup", mouseup); } addEventListener("mousedown", e => tid = e.button == 2 && e.buttons == 3 && ( window.addEventListener("mouseup", mouseup), setTimeout(launcher, 2e3) ));
Dumby
Нет ли кода стоп-видео ?
Вот жеж дичь, спрашивать про видео того, у кого его в баузере нет.
Ну <video src="…"> останавливает такой, например, код:
gBrowser.selectedBrowser.browsingContext.mediaController.stop();
если только это не сколько-то самых первых секунд воспроизведения.
Отсутствует
JSM'ка
скрытый текстВыделить кодКод:
var delay = 500; // время удержания в мс var inBackground = false; // открывать в фоновой вкладке var relatedToCurrent = false; // открывать рядом с related вкладкой var name = "LPA", EXPORTED_SYMBOLS = [name + "Child", name + "Parent"]; var u = {get timer() { delete this.timer; return this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); }}; inBackground == null ? Object.defineProperty(u, "bg", { get: Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch) .getBoolPref.bind(null, "browser.tabs.loadInBackground") }) : u.bg = inBackground; //ChromeUtils.defineModuleGetter(u, "E10SUtils", `resource://gre/modules/E10SUtils.jsm`); if (!ChromeUtils.domProcessChild.childID) { var triggeringPrincipal = Cu.getObjectPrincipal(Cu); var LPAParent = class extends JSWindowActorParent { receiveMessage(msg) { var [link, inBackground, ref] = msg.data; this.manager.browsingContext.top .embedderElement.ownerGlobal.gBrowser.loadOneTab(link, { triggeringPrincipal, relatedToCurrent, inBackground, //referrerInfo: u.E10SUtils.deserializeReferrerInfo(ref) }); } } ChromeUtils.registerWindowActor(name, { allFrames: true, parent: {moduleURI: __URI__}, messageManagerGroups: ["browsers"], child: {moduleURI: __URI__, events: {mousedown: {}}} }); } class LPAChild extends JSWindowActorChild { handleEvent(e) { if (e.type == "mousedown") { if (e.button || e.shiftKey || e.altKey || e.detail != 1) return; var a = e.originalTarget.closest("a[href]"); if (!a || a.href.startsWith("javascript:")) return; this.ctrl = e.ctrlKey; this.initLongPress(a); } else e.type == "click" && !this.link && e.preventDefault(), this.destroyLongPress(); } timeout() { var bg = this.ctrl != u.bg; var data = [this.link.href, bg]; //var referrerInfo = Cc["@mozilla.org/referrer-info;1"].createInstance(Ci.nsIReferrerInfo); //referrerInfo.initWithElement(this.link); //data.push(u.E10SUtils.serializeReferrerInfo(referrerInfo)); this.sendAsyncMessage("", data); this.link = null; bg || this.destroyLongPress() //|| this.contentWindow.windowUtils.sendMouseEventToWindow("mouseup", -1, -1, 0, 1, 0); // Linux (?) } initLongPress(a) { this.contentWindow.addEventListener("click", this, true); this.contentWindow.addEventListener("dragstart", this, false); u.timer.initWithCallback(() => this.timeout(), delay, u.timer.TYPE_ONE_SHOT); this.link = a; } destroyLongPress() { this.contentWindow.removeEventListener("click", this, true); this.contentWindow.removeEventListener("dragstart", this, false); this.link && u.timer.cancel(); this.link = null; } didDestroy() { this.link && this.destroyLongPress(); } }
Dumby, большое спасибо.
«The Truth Is Out There»
Отсутствует
Dumby
Мне нравиться gBrowser.selectedBrowser.browsingContext.mediaController.pause(); Куда бы вставить на развертывание окна: gBrowser.selectedBrowser.browsingContext.mediaController.play();
Отсутствует
Куда бы вставить на развертывание
Что-то сходу не смог найти.
А чего сразу вставить, может пробуем написать своё
(was => addEventListener("sizemodechange", e => { if (was == STATE_MINIMIZED) { setTimeout(Services.prompt.alert, 0, null, " ", "Welcome back"); } was = windowState; }))(windowState);
Отсутствует
Ki_rrrilll пишет
Нажимаю левую кнопку мыши, затем нажимаю правую, держу нажатыми в течение допустим 2 сек. После этого запускается нужная мне функция. Но если за эти 2 сек. была отпущена любая кнопка мыши, то всё сбрасывается, все таймауты обнуляются.
Можно это реализовать?
Маловато информации, но, теоретически
возможность реализации не исключена, зависит от несказанного.
Dumby, большое спасибо!
Может подскажете еще одну вещь. Это в однопроцессном режиме, чтоб не было вопросов..
Почему на некоторых сайтах этот NodeList всегда пуст?
Ведь если курсор находится над страницей, то какие то элементы доджны же соответствовать селектору :hover?
Отсутствует
Dumby, есть вот такой вопрос.
Я никогда не пользуюсь несколькими окнами браузера.
В старых версиях FF, например, в дополнении Tab Mix Plus, была такая настройка: "Разрешить использование принудительного однооконного режима браузера".
Эта настройка приводила к тому, что при попытке открыть новое окно, открывалась новая вкладка в текущем окне.
Возможно ли такое реализовать в версии FF91 ESR?
Если такое возможно, то сделайте пожалуйста это через config.js.
«The Truth Is Out There»
Отсутствует
Может подскажете еще одну вещь.
Не, в контентских делах я не помощник.
И «некоторые» сайты, видимо, настолько забористые,
что их адреса даже нельзя называть, а то, может,
у других заинтересованных ответить было бы больше шансов.
в дополнении Tab Mix Plus, была такая настройка
Она и сейчас есть. Только что-то в уе не смог найти.
Включил extensions.tabmix.singleWindow, рестарт.
И пара-тройка тестов:
1. Ctrl+N, вместо окна — вкладка (жесть какая).
Но Ctrl+Shift+P открывает окно, если таковое не имеется, что логично.
2. Вот инфа от LPP WE открывается во вкладке
поперёк настройки [✓] Открывать в окне,
но, например, с PT, увы, пустая вкладка, нелепый пример, но всё же.
3. Веб-консоль (Ctrl+Shift+K), запуск open(location, "", "width=500"); + разрешение,
вместо окна — вкладка.
Отсутствует
Она и сейчас есть. Только что-то в уе не смог найти.
Включил extensions.tabmix.singleWindow, рестарт.
И пара-тройка тестов:
1. Ctrl+N, вместо окна — вкладка (жесть какая).
Но Ctrl+Shift+P открывает окно, если таковое не имеется, что логично.
2. Вот инфа от LPP WE открывается во вкладке
поперёк настройки [✓] Открывать в окне,
но, например, с PT, увы, пустая вкладка, нелепый пример, но всё же.
3. Веб-консоль (Ctrl+Shift+K), запуск open(location, "", "width=500"); + разрешение,
вместо окна — вкладка.
Dumby, если честно, я ничего из вашего ответа не понял.
Возможно, мой вопрос был задан не совсем корректно, поэтому и ответ такой.
Собственно я спрашивал возможно ли реализовать в версии FF91 ESR принудительное использование однооконного режима браузера.
Чтобы при попытке открыть новое окно, открывалась новая вкладка в текущем окне.
И если такое возможно, то реализовать это через config.js.
«The Truth Is Out There»
Отсутствует
Ki_rrrilll пишет
Может подскажете еще одну вещь.
Не, в контентских делах я не помощник.
И «некоторые» сайты, видимо, настолько забористые,
что их адреса даже нельзя называть, а то, может,
у других заинтересованных ответить было бы больше шансов.
Нет, сайты не забористые, просто я не хотел обвинений в рекламе. Вот один из этих сайтов: https://www.yaplakal.com/
Там из всех элементов при наведении курсора только ссылки имеют псевдокласс :hover, остальные элементы нет.
Почему? Может кто ответит?
И хотел попросить у вас, Dumby, код чтобы при закрытии вкладки, открытой из СВ, возвращаться на последнюю активную вкладку. Сейчас если я закрываю вкладку созданную из СВ, перехожу на крайнюю правую.
Отредактировано Ki_rrrilll (27-01-2022 16:53:56)
Отсутствует
я ничего из вашего ответа не понял
Думаю наоборот, это я без понятия что есть
«принудительное использование однооконного режима браузера».
Казалось бы, не нравятся окна — не открывай, но, похоже,
не всё так просто, видимо, вебу дано право их открывать (см. п. 3).
Вот и поставил упомянутое расширение, чтоб посмотреть.
Нужен bootstapLoader. Есть у xiao, или, может, парафраз,
смысл которого только в простоте копипасты в config.js
Накрутил кнопку
Уж поверь наслово, я, обычно, не склонен
критиковать чужой код, если не попросят, но это ...
выкинь немедленно, чтоб такого говнокода
в браузере даже духу никогда не было.
Наверно и рад бы был помочь исправить, но, нужно
объяснение замысла, которое, разумеется, взять будет негде.
Там из всех элементов при наведении курсора только ссылки имеют псевдокласс :hover, остальные элементы нет.
Ух ты! Я вижу это.
Дело, каким-то ..., в кривом <!DOCTYPE>
Например, воспроизводится по адресу
data:text/html;charset=utf-8,<center><h1>TEST</h1></center>
и не воспроизводится по адресу
data:text/html;charset=utf-8,<!DOCTYPE html><center><h1>TEST</h1></center>
при закрытии вкладки, открытой из СВ
Уволь.
Отсутствует
Думаю наоборот, это я без понятия что есть
«принудительное использование однооконного режима браузера».
Я же выше два раза написал, что под этим имеется ввиду.
Хорошо. Сформулирую иначе.
Мне надо, чтобы при попытке открыть новое окно FF, вместо нового окна открывалась новая вкладка в текущем окне.
Такое можно реализовать в FF 91 ESR?
Если нет, то нет. Переживу.
А ставить расширения, от которых я всеми силами стараюсь избавится заменяя функции этих расширений кнопками СВ и UCF, я не хочу.
«The Truth Is Out There»
Отсутствует
Dumby
Помните скрипт "сохранить сессию" А как бы туда втулить " Удалить все сессии" ? А то кнопу новую делать ,плюс батник...
Да и восстановить сессию тоже желательно в новой вкладке...
Отредактировано ВВП (27-01-2022 22:06:01)
Отсутствует
при закрытии вкладки, открытой из СВ
Уволь.
Очень жаль.
Отсутствует