почини пожалуйста эту переключалку по F8
Затруднительно починить то, что не сломано.
Добавил код в custom_script_win.js, топаю по адресу
data:text/html;charset=utf-8,<textarea spellcheck="false">qwerty</textarea>
фосус в конец поля, жму F8, и вижу переключение qwerty <—> йцукен
перегрузил FF с очисткой кэша
Кодом? Увы, это не всегда срабатывает.
Чтобы быть уверенным, следует, при закрытом браузере,
удалить папку startupCache собственноручно.
Отсутствует
собственноручно
Кнопку + батник для себя не делали?
По поводу окна кук:
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.
Скрипт вызова здесь или:
(this.viewcookieswithrightclick = { init(that) { var star = this.star = document.querySelector("#star-button-box"); if (!star) return; star.addEventListener("contextmenu", this, true); star.addEventListener("click", this, true); that.unloadlisteners.push("viewcookieswithrightclick"); }, handleEvent(e) { if (e.button != 2) return; e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (e.type != "click") return; this.viewCookies(); }, getETDL(uri) { var eTLD = ""; try { eTLD = Services.eTLD.getBaseDomain(uri); } catch (e) { try { eTLD = uri.asciiHost; } catch (e) {} } return eTLD; }, async viewCookies() { var uri = gBrowser.selectedBrowser.currentURI; try { let _uri = ReaderMode.getOriginalUrl(uri.spec); if (_uri) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var type = "Browser:SiteDataSettings", id = "SiteDataSettingsDialog"; var _win = Services.wm.getMostRecentWindow(type); await SiteDataManager.updateSites(); if (!_win) { let url = "chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", xs = Services.xulStore; let sx = xs.getValue(url, id, "screenX"); let sy = xs.getValue(url, id, "screenY"); let wh = xs.getValue(url, id, "width"); let ht = xs.getValue(url, id, "height"); let sm = xs.getValue(url, id, "sizemode"); let features = `chrome,dialog=no,resizable,${sx && sy ? `screenX=${sx !== "0" ? sx : "1"},screenY=${sy !== "0" ? sy : "1"}` : "centerscreen"}${wh && ht ? `,width=${wh},height=${ht}` : ""}`; _win = openDialog(url, type, features); await new Promise(resolve => { _win.windowRoot.addEventListener("DOMContentLoaded", () => { _win.windowRoot.addEventListener("MozUpdateWindowPos", () => { if (sm === "maximized") _win.maximize(); }, { once: true, capture: true }); resolve(); }, { once: true }); }); } else if ("_gSiteDataSettings" in _win) _win._gSiteDataSettings(); else { Services.scriptloader.loadSubScript("data:," + encodeURIComponent(` var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() { SiteDataManager.getSites().then(sites => { this._sites = sites; var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]"); this._sortSites(this._sites, sortCol); this._buildSitesList(this._sites); }); }).bind(gSiteDataSettings); _gSiteDataSettings(); var updateSetInterval = setInterval(async () => { await SiteDataManager.updateSites(); _gSiteDataSettings(); }, 5000); let removeBtns = document.querySelectorAll("#removeSelected, #removeAll"); var updateClearInterval = () => { clearInterval(updateSetInterval); for (let btn of removeBtns) btn.removeEventListener("command", updateClearInterval); updateClearInterval = null; }; for (let btn of removeBtns) btn.addEventListener("command", updateClearInterval); `), _win, "UTF-8"); _win.addEventListener("unload", () => { _win.updateClearInterval?.(); }, { once: true }); } var doc = _win.document; var docEl = doc.documentElement; docEl.setAttribute("windowtype", type); docEl.id = id; docEl.setAttribute("persist", "screenX screenY width height sizemode"); _win.focus(); var filter = doc.querySelector("#searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); }, destructor() { this.star.removeEventListener("contextmenu", this, true); this.star.removeEventListener("click", this, true); }, }).init(this);
решилось созданием нового профиля
Сомневаюсь. Просто не запустили нужное кол-во раз.
Отредактировано _zt (09-12-2022 22:02:24)
Отсутствует
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.
Я в 108 бетке "приколотил высоту гвоздями". Вроде пока нормально.
В userChrome.css:
@-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataSettings.x") { #SiteDataSettingsDialog { max-height: 465px !important; } #sitesList { height: 25em !important; } } @-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataRemoveSelected.x") { #SiteDataRemoveSelectedDialog { max-height: 450px !important; } #removalList { height: 25em !important; } }
Отредактировано unter_officer (09-12-2022 23:07:00)
«The Truth Is Out There»
Отсутствует
unter_officer
Спасибо. Добавил, пока не увеличивается, посмотрим.
xrun1
Спасибо. Работает вроде.
динамическая хром-регистрация
Спасибо.
Отредактировано _zt (15-12-2022 03:21:03)
Отсутствует
Кнопку + батник для себя не делали?
Нет, не делал.
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением
Да, есть такое.
Можно скопировать xhtml'ку в UCF, дописать persist'а и windowtype,
и загружать уже этот адрес. Ну и почистить код, соответственно.
Или динамическая хром-регистрация, viewCookies() типа
async viewCookies() { var sds = "chrome://ucfsdswnd/content/sds.xhtml"; var type = "Browser:SiteDataSettings", g = Cu.getGlobalForObject(Cu); if (!Object.hasOwn(g, sds)) { var xhtml = (await (await fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text()) .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`); g[sds] = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]] ); } (this.viewCookies = async () => { var uri = gBrowser.selectedBrowser.currentURI; try { let _uri = ReaderMode.getOriginalUrl(uri.spec); if (_uri) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var _win = Services.wm.getMostRecentWindow(type); await SiteDataManager.updateSites(); if (!_win) await new Promise(resolve => (_win = openDialog(sds, type, "chrome,dialog=no,resizable")) .addEventListener("DOMContentLoaded", resolve, {once: true}) ); else if ("_gSiteDataSettings" in _win) _win._gSiteDataSettings(); else { Services.scriptloader.loadSubScript("data:," + encodeURIComponent(` var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() { SiteDataManager.getSites().then(sites => { this._sites = sites; var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]"); this._sortSites(this._sites, sortCol); this._buildSitesList(this._sites); }); }).bind(gSiteDataSettings); _gSiteDataSettings(); var updateSetInterval = setInterval(async () => { await SiteDataManager.updateSites(); _gSiteDataSettings(); }, 5000); let removeBtns = document.querySelectorAll("#removeSelected, #removeAll"); var updateClearInterval = () => { clearInterval(updateSetInterval); for (let btn of removeBtns) btn.removeEventListener("command", updateClearInterval); updateClearInterval = null; }; for (let btn of removeBtns) btn.addEventListener("command", updateClearInterval); `), _win); _win.addEventListener("unload", () => { _win.updateClearInterval?.(); }, { once: true }); } _win.focus(); var filter = _win.document.getElementById("searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); })(); },
Отсутствует
а что надо исправить в этой кнопке Переключить куки что бы окно не росло по вертикали в 107.0.1?
Ну тоже что-то сделать с методом viewCookies().
Например, заменить на такой
// async viewCookies(win) { var func = async sds => { await document.documentReadyForIdle; var upd, box = document.getElementById("searchBox"); (upd = site => box.setUserInput(site, box.focus()))(window.arguments[0]); var attr = "data-isCurrentSortCol", sel = `treecol[${attr}=true]`; window.updSearch = async site => { var sites = sds._sites = await SiteDataManager.getSites(); var col = document.querySelector(sel); col.removeAttribute(attr); sds._sortSites(sites, col); sds._buildSitesList(sites); window.focus(upd(site)); } } var type = "Browser:SDS"; var xhtml = (await (await win.fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text()) .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`) .replace(/<script .+>/, `$&\n <script>(${func})(gSiteDataSettings);\n </script>\n${ ["globalOverlay", "editMenuOverlay"] .map(n => ` <script src="chrome://global/content/${n}.js"/>`).join("\n") }`); var sds = "chrome://ucfsdswnd/content/sds.xhtml"; this.cr = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]] ); (this.viewCookies = async win => { var uri = win.gBrowser.selectedBrowser.currentURI; try { var u = win.ReaderMode.getOriginalUrl(uri.spec); if (u) uri = Services.io.newURI(u); } catch {} uri = this.getETDL(uri); await win.SiteDataManager.updateSites(); var w = Services.wm.getMostRecentWindow(type); w ? w.updSearch(uri) : win.openDialog(sds, type, "chrome,dialog=no,resizable", uri); })(win); },
Отсутствует
Отсутствует
xhtml на xul заменил, результат отрицательный
Этого недостаточно. Надо ещё от этого оператора избавиться,
его поддержка добавлена в Firefox только с версии 74 (в Mypal68, видимо, она есть).
Правки можно по-разному записать. Допустим, такой вариант
/* var listener = e => { var doc = e.target || ({}); load_scripts_by_url[doc.documentURI]?.(doc.defaultView); }; */ var listener = e => load_scripts_by_url.x(e.target.ownerGlobal);
/* if (win.arguments?.find(f => f === "Downloads" || f === "History" || f === "Tags")) return; */ if (/^(?:Downloads|History|Tags)(?:,|$)/.test(String(win.arguments))) return;
/* }; load_scripts_by_url[location.href]?.(window); */ x(win) { var func = this[win.location.href]; func && func(win); } }; load_scripts_by_url.x(window);
Отсутствует
Надо ещё от этого оператора избавиться
Да, именно на "?." консоль ругалась, а как правильно сделать, естественно, не знал, поэтому и обратился к профессионалу. Тупое удаление оператора вопрос не решало, писать про это не стал, чтобы еще глупее не выглядеть.
Допустим, такой вариант
Отличный вариант, спасибо.
Отсутствует
https://hg.mozilla.org/mozilla-central/rev/49cefc94b9bd
https://github.com/xiaoxiaoflood/firefox-scripts/commit/33c69b5b959b84d3982eb6f72aefd1cca14e3ad3#diff-c8669a0b709ab73f8751d7e079d6c3b98ac1c464b5a9e1592f28e91ab7a63de7
Отсутствует
Я дико извиняюсь, на чистоустановленного лиса, залил архив из первого сообщения этой темы https://forum.mozilla-russia.org/viewto … 26#p791126, все по полочкам, пытаюсь прикрутить к нему скрипт про ненужные папки https://forum.mozilla-russia.org/viewto … 25#p777225 , а у меня, к сожалению, ничего не выходит.... Если кому не сложно скиньте свой файл заведомо рабочий, для такого криворукого идиота я
З.Ы : лис 108
Отредактировано mfrost (24-12-2022 00:06:47)
Отсутствует
Не пойму может я идиот, но у меня все равно не работает
// Скрипт для документа окна браузера [ChromeOnly] var ucf_custom_script_win = { initialized: false, get unloadlisteners() { delete this.unloadlisteners; window.addEventListener("unload", this, { once: true }); return this.unloadlisteners = []; }, load() { if (this.initialized) return; this.initialized = true; /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "load" ((type, listener) => { addEventListener(type, listener); addEventListener("unload", () => removeEventListener(type, listener), {once: true}); })("MozBeforeInitialXULLayout", { handleEvent(e) { e.target.documentURI.endsWith(this.ends) && Object.defineProperty(e.target.getElementById("bookmarks-view"), "place", this); }, get ends() { delete this.ends; return this.ends = `/bookmarksSidebar.x${ parseInt(Services.appinfo.platformVersion) >= 73 ? "htm" : "u" }l`; }, configurable: true, set() { delete this.place; this.place = "place:parent=menu________"; } }); /* ************************************************ */ }, handleEvent(e) { this[e.type](e); }, unload() { this.unloadlisteners.forEach(str => { try { this[str].destructor(); } catch (e) {} }); }, }; /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "DOMContentLoaded"
Отредактировано mfrost (24-12-2022 01:15:33)
Отсутствует
Может я что в настройках не включил?
Кстати, вполне возможно. Типа эту галку
Включить скрипты:
[ ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[ ] Для докум. всех окон [ChromeOnly]
Отредактировано Dumby (24-12-2022 01:39:12)
Отсутствует
Dumby, посмотрите, пожалуйста, можно ли "оживить" этот древний скрипт, а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr. Для первого "зачистка" по вашей рекомендации у меня не помогает, для второго замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно.
Отсутствует
а еще лучше адаптировать 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;
Отсутствует
mfrost пишетМожет я что в настройках не включил?
Кстати, вполне возможно. Типа эту галку
Включить скрипты:
[ ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[ ] Для докум. всех окон [ChromeOnly]
Товарищи, подскажите где это включить в настройках не нашел
Отсутствует
mfrost пишетТоварищи, подскажите где это включить в настройках не нашел
Видимо ни в тех настройках искали:
Вижу кнопку выделенную вами, вижу окошко где описано как открыть данное меню, но, к сожалению, описанным способом в моей версии браузера, данное меню не открывается
Стоит 108 лис обновленный с 68, залит архив из первого сообщения данной темы, так же натянут данный стиль
При клике правой кнопкой мыши вот такое меню
Отредактировано mfrost (26-12-2022 23:12:03)
Отсутствует
mfrost
Win7
Отсутствует
mfrost
скрытый текст
Огромное спасибо! Залил ваш архив и все заработало
Отсутствует
LZAA
Первая секция первого поста темы - добавит, помимо прочего, нижнюю панель. Работает ли это в 68 спрашивайте в теме, небольшой архив версий у меня есть, ранняя версия 200519.
Отсутствует