Пишет: ReferenceError: SessionStore is not defined
Правильно пишет,
среди предустановленных в UCF модулей — этого нет
(вот PlacesUtils, например, есть).
Но имеется в окне. Можно обратиться win.SessionStore
Ну и ещё все (два) window заменить на win
а то там, зачем-то, в try-catch завёрнуто, в консоли не увидишь ничего.
Пытался подтянуть что-то вроде этого
ChromeUtils.importESModule() возвращает экспортный объект,
SessionStore — это будет его свойство.
Обычно используют деструктурирующее присваивание:
var {SessionStore} = ChromeUtils.importESModule("resource:///modules/sessionstore/SessionStore.sys.mjs");
а, если брать с окна, то, соответственно,
var {SessionStore} = win;
А это никак не обойти ? Как прокси, так это SSL_ERROR_BAD_CERT_DOMAIN
Без понятия.
Сколько раз уже говорил,
что я контентским и сетевым делам посторонен,
спрашивать меня про них бесполезно.
unter_officer
[spoiler][code](async ss => {
ss = ChromeUtils.importESModule(ss).SessionStore;
await ss.promiseAllWindowsRestored;
CustomizableUI.createWidget({
id: "803529",
localized: false,
onCreated(btn) {
var vals, keys = [, "label", "tooltiptext"];
var disable = () => {
keys[0] = "disabled";
vals = [true, "No Last Session", "No last session, nothing to clear"];
}
var setState = btn => {
for(var ind in keys) btn.setAttribute(keys[ind], vals[ind]);
}
if (ss.canRestoreLastSession) {
keys[0] = "oncommand";
var cmd = `SessionStore.canRestoreLastSession = false;`;
vals = [cmd, "Clear Last Session", "Clear last session"];
var qt = "quit-application-granted";
var ct = "sessionstore-last-session-cleared";
var destroy = () => {
Services.obs.removeObserver(obs, ct);
Services.obs.removeObserver(destroy, qt);
}
var obs = () => {
destroy();
disable();
var widget = CustomizableUI.getWidget(th
убрать
В смысле с глаз долой?
Если включено browser.download.autohideButton
то просто DownloadsButton.hide();
когда запускаю фокс, то открыта только вкладка about:newtab
То есть, ты хочешь забрать эту вкладку себе,
чтобы в неё places-добро не грузилось?
Можно так попробовать, вроде не должно грузиться
пока в эту вкладку не будет загружено что-то другим образом.
Код для custom_script_win.js
[spoiler][code](async place => {
await gBrowserInit.idleTasksFinishedPromise;
var tabs = gBrowser.visibleTabs;
if (tabs.length > 1) return;
var re = /^about:(?:newtab|home)$/;
var [tab] = tabs, br = tab.linkedBrowser;
if (re.test(br.currentURI.spec)) br.loadURI = function(url, params) {
if (
re.test(this.currentURI.spec) &&
gBrowser.selectedBrowser == this &&
Components.stack.formattedStack.includes(place)
) {
var e = window.event ||
Services.focus.focusedWindow.event ||
Services.wm.getMostRecentWindow("Places:Organizer")?.event;
if (e) {
var node, trg = e.target;
if (trg.nodeName == "treechildren") node = trg.parentNode.selectedNode;
els
vitalii201
Браузер открывает букмарклеты как-то так
var url = "javascript:window.open('https://litr.cc/groups?createLinkUrl='+encodeURIComponent(window.location.toString().split('#')[0]));void%200;"; openTrustedLinkIn(url, "current", {allowPopups: true, allowInheritPrincipal: true});
Пропустил...это
Не, это не то. Впрочем, нашёл ответ в личке.
Написал несколько соображений, надеюсь обоснованных.
А к 101 это не того...
var path = PathUtils.join(PathUtils.parent(PathUtils.xulLibraryPath), "youtube-dl.exe");
Да, в 101 у PathUtils нет геттера xulLibraryPath
В любом случае, можно использовать классику — nsIDirectoryService + nsIProperties
(если нужен профиль, то, соответственно, "ProfD" вместо "GreD")
var file = Services.dirsvc.get("GreD", Ci.nsIFile); file.append("youtube-dl.exe"); var {path} = file;
И как бы клик сюда добавить Вкл/выкл . Типа: пауза/плей ?
if (event.button == 1) {
gBrowser.selectedBrowser.browsingContext.mediaController.pause()}
Если с активного (поставленного на паузу), то как-то так.
А с неактивного не запустит, тут, наверно, надо (<video>).play() вызывать,
не знаю, не имею особых дел с контентом, а уж с видео и подавно.
[spoiler][code]if (event.button == 1) {
var mc
egorsemenov06
x instanceof *Element лучше заменить на *Element.isInstance(x)
Там три вхождения (поиск по «instanceof»).
Сделано не только неполно (только третье), да ещё и неправильно.
/* if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) { */ if(HTMLInputElement.isInstance(fe) || HTMLTextAreaElement.isInstance(fe)) { /* if(node instanceof Element.isInstance(x)) { */ if(Element.isInstance(node)) {
на каталог или на профиль
Каталог (самого Firefox?)
var path = PathUtils.join(PathUtils.parent(PathUtils.xulLibraryPath), "youtube-dl.exe");
Профиль
var path = PathUtils.join(PathUtils.profileDir, "youtube-dl.exe");
Not work in fission?
Not in fission.
Not work in fission out-of-process frames.
Like page site1.com contains <iframe> site2.org
Not work in such iframe.
unter_officer
Да, вижу. Можно вместо (или вместе с)
// var MozXULElement = {insertFTLIfNeeded() {}}; var document = {l10n: {setAttributes: msg => msg.textContent = "Скопировано в буфер обмена!"}};
Это шутка?
Нет. Это ощущение.
4 - 5 - 3
Как-то так, наверно
[spoiler]
[code]addEventListener("contextmenu", {
handleEvent(e) {
if (e.detail != 2 || !gContextMenu?.onImage) return;
var pl = "browser.download.folderList";
var pu = "browser.download.useDownloadDir";
var cl = Services.prefs.getIntPref(pl), sl = cl == 2;
var cu = Services.prefs.getBoolPref(pu);
sl || Services.prefs.setIntPref(pl, 2);
cu || Services.prefs.setBoolPref(pu, true);
try {
this.save(); e.preventDefault(); this.hide();
} finally {
sl || Services.prefs.setIntPref(pl, cl);
cu || Services.prefs.setBoolPref(pu, cu);
}
},
get hide() {
delete this.hide;
var popup = document.getElementById("contentAreaContextMenu");
return this.hide = popup.hidePopup.bind(popup);
},
get save() {
var func = eval(`(function ${gContextMenu.saveMedia})`.replace(
/^( )(?:false, \/\/ don't)( skip prompt for where to save)/m, "$1true, //$2"
));
delet
Infocatcher
Для Firefox 109 переключили настройку этого бага.
Теперь это затрагивает и релиз, и пора что-то с этим делать.
Проявляется в том, что Attributes Inspector больше не показывает margin, border, padding,
и, иногда, не показывает размеры (или показывает неправильно).
Такое происходит во всех окнах, кроме того, в котором запущен код,
то есть, контент, сайдбар, любые другие окна брузера и не браузера.
Насколько я вижу, Element и XULElement используются только для оператора instanceof,
поэтому сделал себе так (последняя строка обозначает место, перед которой добавлен блок if).
[spoiler][code]//...
if(this.eventHandler.fxVersion >= 106) {
var fakeElm = function(name) {
var res = {}, elm = window[name];
res[Symbol.hasInstance] = elm.isInstance.bind(elm);
return res;
}
var Element = fakeElm("Element");
var XULElement = fakeElm(
кнопку Autocopy может быть сможет реанимировать Dumby
Сомнительно. Сложновато это для меня. Но попробовать могу.
[spoiler][code]this.closest("toolbarpaletteitem") || ((id, func) => {
var PREF_ENABLED = 1, PREF_BLINK = 2, PREF_RESET = 4;
var g = Cu.getGlobalForObject(Cu), autocopy = g[id];
if (!autocopy) {
var cid = id + " Child";
var pref = "CB.Autocopy.settings", topic = "quit-application-granted";
(autocopy = g[id] = {
init() {
this.readSettings();
Services.obs.addObserver(this, topic);
this[PREF_ENABLED] && this.initChild();
},
destroy(reason) {
if (reason && reason[5] != "e") {
var e = Cu.getGlobalForObject(reason.constructor).event;
if (!e || e.target.id != "custombuttons-contextpopup-move-removeFromToolbar") return;
}
delete g[id];
this.saveSettings();
reason == "delete" && Services.prefs.clearUserPref(pref);
Services.obs.removeObserver(this, topic);
this[PREF_ENABLED] && this.destro
работает вплоть до 108-ой
Вот когда Cu.import() удалят — всё,
BookmarkExporter только дебаггером можно будет достать.
почему-то пункт "Экспорт папки в HTML" размножается
Ну так потому, что код для CB, а не для UCF.
В CB, addEventListener() — это не window.addEventListener()
Лучше воздерживаться от дословного переноса кодов.
А размножается, наверно, потому, что листенер не может
переопределить свой метод handleEvent(),
поскольку перед этим идёт вызов функции addDestructor(), которой в UCF нет.
Соответственно, ошибка и обрыв дальнейшего исполнения.
что можно подправить в вашем коде для СВ, чтобы срабатывало в боковой панели и библиотеке..?
Нее, «подправить» тут не выйдет.
Ведь эти адреса могут быть и во вкладке загружены,
плюс, вроде, "старый" и "новый" UCF по-разному сайдбар видят.
Вот, попробовал перерисовать под custom_script.js
[spoiler][code](async topic => {
var imp = (m, n = m) => Cu.import(`resource://gre/modules/${m}.jsm`, {}
Кэш запуска вы, конечно, очистили?
Ну, под конец, конечно, очистил. Чтобы посмотреть как тулбары исчезнут.
А сначала, напротив, даже не дышал на него.
Ведь суть эксперимента была именно в том, выдержит ли startupCache
столь эпическое обескровливание UCF, или это просто прогон. Оказалось правда.
Провёл некоторую 'чистку'. Сейчас у меня в директории 'user_chrome_files' имеется только один файл - 'user_chrome.manifest'. Но возможность активировать ещё 3 панели осталась.
Можно подумать: «что за бред сивой кобылы?».
Однако, я смог воспроизвести это!
Одна укфская кнопка потерялась, а у остальных пропали иконки
(кроме как у кнопки скрытия нижнего тулбара). Но сами тулбары остались!
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxIAAAHlCAIAAADurl0UAABmTUlEQVR42uydB3wURf+H59I7PYD0HmpCkyYgoHQV6ahAFEGKSlPpilIE/yigIlheDWBBREVqgoICUgMYRCAQeif0QHq5/9zt3d5s37tccnfh+3x8efdmZ2d+O7u3+9zM7MZQK+ai0WgkhBgMhmKfPktcSkRERGJiomtjAAAAAMBDy7Vr13JycipWrMgv3+ryAzUlqkmmfzltKr6kd1hY2KRJk+rVq8dl3bJlC79caOTl5Xl5ebm6xQAAAADwkJKbm3v21t2a4aX45cefG5J55MDdrqtoiqH28kthn/R6/vnn+/XrtyHhpmtjLRUWcCslw9UtBgAAAABgofVjdY5fuT7m8UfvdfvRpE0Vlw9ZsWLFxoRbrg4M2gQAAAAAtyOidc3nR4xIDhluaNas2Zw5c87llHN1SCZKhQbcug9tAgAAAIB7UaZZjdGRNU3a9Ouvv24+csfV8Zig2rTjzz9cHQUAAHgw9Zs95uoQACiCFG9aY0LTOiZt2rlz57d/nX
А как тогда сделать, чтоб в главном меню нажималось?
Ну, что-нибудь поперёк концепции
/* if (!node?.matches("toolbarbutton, image.urlbar-icon")) return; if (node.getAttribute("type") === "menu") */ if (!node.matches("toolbarbutton, image.urlbar-icon, #main-menubar > menu")) return; if (node.matches("[type=menu], menu")) /* document.querySelector(":is(menupopup,panel)[panelopen='true'], toolbarbutton[open='true'] > menupopup")?.hidePopup(); */ document.querySelector(":is(menupopup,panel)[panelopen=true], :is(toolbarbutton, #main-menubar > menu)[open=true] > menupopup")?.hidePopup();
а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr
Ууу, копаться в этом радости мало.
замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно
Если код в custom_script_win.js, то «стр.14» не нужна как таковая, убери её.
Чтобы как-то завелось, можно попробовать заменить пару строк
/* var urlBarInput = getWindow().document.querySelector("#urlbar-input").value; */ var urlBarInput = gURLBar.value; /* var urlbarInput = getWindow().document.querySelector("#urlbar-input"); */ var urlbarInput = gURLBar.inputField;
Может я что в настройках не включил?
Кстати, вполне возможно. Типа эту галку
Включить скрипты:
[ ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[ ] Для докум. всех окон [ChromeOnly]
Если я правильно понял, вот ЗДЕСЬ Dumby привел пример, как это исправлено в userChromeJS.
Да, понял правильно. Но, суть, скорее даже в том,
создавать ли выпиленный vbox#browser-bottombox
или можно ведь добавить тулбар прямо вместо него.
Хорошо, допустим создаём
/* document.querySelector("#browser-bottombox")?.append(bottombar); */ let id = "browser-bottombox", box = document.getElementById(id); if (!box) { box = document.createXULElement("vbox"); box.id = id; document.getElementById("a11y-announcement")?.before(box); } box.append(bottombar);