Bug 721336 - Ban sync XMLHttpRequest with chrome privileges (Firefox 138+)
Я считаю что в этом коде слишком перемудрено
А можно поподробнее?
По пунктам, где именно ты считаешь перемудрено.
в ошибках при редактировании любой кнопки в ошибках показывает такое сообщение -TypeError: this.cssProperties is undefined
Это, видимо, из-за options.cssInHelp
Либо переключить в false, либо, если прям очень надо,
то попробовать дописать после var optsOvr = options.codeMirror;
// if (isCSS) { var {generateCssProperties} = require("resource://devtools/server/actors/css-properties.js"); var {CssProperties, normalizeCssData} = require("resource://devtools/client/fronts/css-properties.js"); opts.cssProperties = new CssProperties(normalizeCssData({properties: generateCssProperties(document)})); }
Uncaught Error: Action with ID 'TranslateBufer1' already added
Ну так ChromeUtils.importESModule()
не возвращает ничего даже близко похожего на g
Можно разделить,
…green25
В 115 есть отдельный флаг CLEAR_SESSION_HISTORY
А в нынешних версиях уже нет, свалили докучи в CLEAR_HISTORY
В любом случае, для удаления всего,
просто рассылается топик без третьего аргумента:
Services.obs.notifyObservers(null, "browser:purge-session-history");
откровенное фуфло
Ага, у тебя зато конфета.
Какое-то -moz-старьё типа -moz-flex-grow и -moz-box-flex
Не нужно там всё это, оно и так уже флекс.
*|*:root:not([inFullscreen])#toolbar-menubar — вообще песня.
И чего вообще ты хочешь? Что значит «сделать толком»?
Выглядит так, словно попытка сделать
растягивающийся пробел на панели меню безразмерным.
Хорошо, вот смотри, назначаем, для наглядности,
background-color и снимаем max-width
Чем не устраивает?
#toolbar-menubar :is( toolbarspring, [id^=wrapper-customizableui-special-spring] ) { background-color: springgreen !important; max-width: none !important; }
Тогда, либо скрыть этот spacer, либо влепить
ратягивающемуся пробелу и его обёртке гигантский флекс,
то есть, дописать ещё что-то типа flex: 9999 !important;
Как избавиться. Как окно выпадет это и не только (c window-modal-d
…
Sanitizer.showUI(window); - без толку коды остальные не работают
В 115 появление диалога очистки не вызывает
приостановку исполнения JS-кода в окне браузера.
Можно внутрь переопределённого sanitize() добавлять.
[spoiler][code]document.getElementById("window-modal-dialog").addEventListener("dialogopen", e => {
var win = e.target.querySelector("browser.dialogFrame").contentWindow;
var sd = win.gSanitizePromptDialog, {sanitize} = sd;
sd.sanitize = e => {
sanitize.call(sd, e);
CustomizableUI.setToolbarVisibility("PersonalToolbar", false);
Services.prefs.setBoolPref("browser.zoom.full", true);
Services.prefs.setCharPref("intl.accept_languages", "ru");
Services.prefs.setIntPref("media.autoplay.default", 5);
Services.prefs.setIntPref("extensions.long_left_click.timeContent", 300);
SidebarUI.hide();
var sel = "#mainPopupSet > tooltip[onpopupshowing*=undoCloseTabsList]";
document.querySelector(sel)?.undoCloseTabsList.updUI();
var lc = Cu.createL
…dinn
Если имеется в виду, что взять список именно с <richlistbox>'а
из этого субдиалога, то можно, например, так попробовать
(win => { var sites = [], cpbs = [], max = 0; for(var item of win.gPermissionManager._list.children) { var [site, cpb] = item.querySelectorAll("label"); max = Math.max(max, (site = site.value).length); sites.push(site); cpbs.push(cpb.value); } max += 3; sites = sites.map((s, ind) => s.padEnd(max, " ") + cpbs[ind]); console.log(sites.join("\n")); })(gSubDialog._dialogs[0].frameContentWindow);
var sites = [], max = 0;
for(var p of pm.all) if (
p.type == "cookie" && p.capability in
начала странно себя вести. Или так всегда было? Первый раз при выделении отображает нормально. Если кликнуть и перейти, а потом вернуться, выделить другой текст, то без перезагрузки страницы только иконка гугла.
Да, я вижу это.
Было ли так всегда — я без понятия, поскольку не пользуюсь.
Но это не кнопка так себя ведёт, а именно ContextSearch.
Она же не сама выдумывает что показывать, а всего лишь
отображает те пункты меню, которые заказал этот WebExtensions.
Проверить достаточно несложно — комментируешь строку /*#${mid},*/
таким образом пункт от CS перестанет быть скрытым,
и теперь можно кликать и сравнивать то, что создаёт код,
с тем, что есть в субменю аддона. Должно совпадать.
Так-с… версия 0.0.7.0.0.11 перестала работать (истекли сертификаты?)… накатываю из другого профиля версию 0.0.7.0.0.16 — заработало (надолго ли?), но кнопка быстрого переключения about:config параметров слетела/съехала и перестала фурычить (c 2020 года не было нужды
…
Перестало работать в 115 SessionStore.jsm -это ? Менял не помогло
Я ничего не понял.
Что оно делало, при чём здесь SessionStore,
и почему jsm, что менял, и чему не помогло.
Вообще-то, топик "widget-first-paint" — он для top-level окон.
А в 115 это добро открывается во внутриоконном диаложке.
Так что, здесь больше подходит листенер.
И что там за cancel
Когда-то давно, метод sanitize() возвращал логическое значение,
true если случилась ошибка, не при самой очистке, а при исполнении именно этой функции.
А в 115 он ничего не возвращает.
Если нужно знать, не свалился ли код в блок catch {}
то можно попробовать проверять e.defaultPrevented
[spoiler][code]document.getElementById("window-modal-dialog").addEventListener("dialogopen", e => {
var win = e.target.querySelector("browser.dialogFrame").contentWindow;
var sd = win.gSanitizePromptDialog, {sanitize} = sd;
sd.sanitize = e => {
sanitize.call(sd, e);
alert(`Catch${e.defaultPrevented ? " not" : ""} happ
и на открыть новую вкладку подобное
На «открыть новую вкладку» рассылается топик "browser-open-newtab-start",
так что можно попробовать добавить в код обсёрвер, как-то так:
(flags => { var clear = Services.clearData.deleteData.bind(null, flags, () => {}); var skip, check = () => { skip = null; for(var w of CustomizableUI.windows) for(var tab of gBrowser.tabs) try { if (tab.linkedBrowser.URI.host) return; } catch {} clear(); } addEventListener("TabClose", e => skip ??= setTimeout(check, 400), false, gBrowser.tabContainer); var topic = "browser-open-newtab-start"; var obs = subj => Cu.getGlobalForObject(subj.wrappedJSObject) == window && clear(); Services.obs.addObserver(obs, topic); addDestructor(() => Services.obs.removeObserver(obs, topic)); })(Ci.nsIClearDataService.CLEAR_DOM_STORAGES);
может где пропустил изменения
Дает ошибку в строке - xulWin.zLevel = onTop ? xulWin.raisedZ : xulWin.normalZ;
Да, пропустил. Вот это:
Bug 1902315 - Remove popup and window z-level fiction from our codebase. (Firefox 129+)
Не одно и тоже, но есть флаг "alwaysontop", однако,
здесь — кот не валялся, а перезагружать окно — сам понимаешь ...
количество закладок/папок в боковой панели
Да уж, тупой гаденький CSP.
Особо жалко direct eval(), он, наверно, незаменим.
И indirect eval() тоже жалко, он удобнее чего-то другого.
Ладно, вроде вот так, например, работает
[spoiler][code](async () => {
var proto = PlacesTreeView.prototype;
proto.addFolderStats = node => {
var title = PlacesUIUtils.getBestTitle(node, true);
if (PlacesUtils.nodeIsContainer(node)) {
var wasClosed = !node.containerOpen;
if (wasClosed) node.containerOpen = true;
var urls = 0, containers = 0;
for(var ind = 0, max = node.childCount; ind < max; ind++) {
var child = node.getChild(ind);
if (PlacesUtils.nodeIsURI(child)) urls++;
else if (PlacesUtils.nodeIsContainer(child)) containers++;
}
if (wasClosed) node.containerOpen = false;
title += ` (${urls}/${containers})`;
}
return title;
}
var eval = code => windowRoot.ownerGlobal.UcfPrefs.dbg
.makeGlobalObjectReference(window).executeInGlobal(
Поведение кнопки немого сломалось, давно уже. Не принципиально, конечно.
При закрытии ЛКМ или СКМ фокус улетает на позицию ниже. Т.е. если была панель закладок --> какая-то папка или закладка, фокус сместится на меню закладок. Если меню закладок --> какая-то папка или закладка --> фокус на другие закладки.
Да, так оно устроено:
// Select the row next to the closed container if any of its
// children were selected, and nothing else is selected.
Можно попробовать собрать корневые папки в которых есть выделение,
и выделить их уже после закрытия.
А ещё, я тут в бесконечную петлю разворачивания угодил.
На панели закладок есть папка-шорткат на панель закладок,
ну типа place:parent=toolbar_____
И вот, разворачивается панель закладок, доходит до этой папки,
разворачивает её, а в ней, сответственно, тоже такая же папка,
и так далее, и так далее. Браузер виснет намертво.
Вобщем, исключил некоторые вещи из разворачивания.
[spoiler][code](svg =
Этот скрипт
Так, я повторю ещё раз.
Без никакого скрипта вообще.
Итак, STR, окно браузера, панель закладок в нём.
ПКМ по закладке на этой панели —> «Удалить закладку».
Закладка удаляется, исчезает, как и ожидалось.
Теперь, вызываем окно консоли (Ctrl+Shift+J)
и запускаем с него PlacesTransactions.undo()
Восторг! Закладка возвращается.
В точности туда же, где и была.
А теперь(!), не сходя с места,
снова ПКМ по этой закладке —> «Удалить закладку».
И... тишина.
Закладка просто молча не удаляется.
Почему так происходит — я не знаю.
Тем не менее — веский повод отказаться от этого кода как такового.
Увы.
https://4pda.to/ ссылка передается в таком виде - https://4pda.to/https://4pda.to/
Ага, а если вместо прописанного
microsoft-edge:%OpenURI%OpenURI
написать
microsoft-edge:%OpenURI%OpenURI%OpenURI
то будет передаваться
microsoft-edge:https://4pda.to/https://4pda.to/https://4pda.to/
в [firefox] 136.0 выдает вот такую ошибку
Error sanitizing historyFormDataAndDownloads TypeError: item is undefined
Ну, в 136, Object.keys(Sanitizer.items).join("\n");
(типа список возможностей) выдаёт
cache
cookies
offlineApps
history
formdata
downloads
sessions
siteSettings
openWindows
pluginData
browsingHistoryAndDownloads
cookiesAndStorage
Таким образом, наверно,historyFormDataAndDownloads
browsingHistoryAndDownloads
А ты случайно не делал скрипт UserCSSLoader,
чето кнопка уменя не работает.
Нет. Я даже не знаю что это такое.
А не работает, скорее всего, из-за «on…» атрибутов
и/или C{u, hromeUtils}.import(). Это основной отвал на 136.
Ну и нашел еще одну кнопку, которая перестала работать в 136
Консоль браузера
Нее, от кнопки я решил отказаться.
На новых версиях, перехожу на скрипт для UCF.
Для сандбокса, custom_script.js, scriptsbackground
(в окна не совать!)
Локализация там, по сути, особо не нужна,
просто эксперимент с mock-fluent'ом.
[spoiler][code](async url => {
var img = "chrome://devtools/skin/images/tool-webconsole.svg";
var strings = {
ru: {
label: "Консоль браузера",
tooltip: [
"Л: Сайдбар",
"С: Вкладка",
"П: Окно"
]
},
def: {
label: "Browser console",
tooltip: [
"L: Sidebar",
"M: Tab",
"R: Window"
]
},
};
var fluentLabel = "browser-console-label";
var fluentButton = "browser-console-button";
var fluentFile = "user/browser-console.ftl";
var version = parseInt(Services.appinfo.platformVersion);
for (var [loc, data] of Object.entries(strings)) {
var lab = data.label;
strings[loc] = `${
fluentButton
} =\n
можно зарегистрировать эту кнопку в resource?
А почему нет, всё одно и то же.
Куда-нибудь после icons, но до добавления page action
// var rph = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); icons.forEach((icon, ind) => { var subst = "ucf-opera-proxy-icon-" + ind; rph.setSubstitution(subst, Services.io.newURI(icon)); icons[ind] = "resource://" + subst; });
Пожалуйста посмотрите предыдущие сообщение
Я его не понял.
У тебя в коде торчит
chrome://global/skin/plugins/pluginGeneric.svg
Но его давно уже нет.
Тогда надо ещё что-то типа этого, не уверен
[spoiler][code]/*
get plugin() {
delete this.plugin;
return this.plugin = this.useSVG
? this.platformVersion >= 65
? "chrome://global/skin/plugins/pluginGeneric.svg"
: "chrome://mozapps/skin/plugins/pluginGeneric.svg"
: "chrome://mozapps/skin/plugins/pluginGeneric-16.png";
},
*/
get plugin() {
dele
Может, что то в config.js не так?
Антиподписячий код не выглядит как последний выкладывавшийся.
Проверил с последним на 136.0 RC build3, CB и ATB установились нормально.
Ещё, UCF-стафф не последний, но это к вопросу отношения не имеет.
egorsemenov06
Копнул поглубже, и получается, что в таком виде,
кнопка какая-то недоадаптированная под UCF.
Надо заменить первый код,
тот, который создаёт виджет, на такой
[spoiler][code](async () => CustomizableUI.createWidget({
label: "Дополнения",
id: "ucf-cbbtn-ToggleRestartlessAddons",
localized: false,
onCreated(btn) {
var icon = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:none;stroke:context-fill rgb(39, 174, 129);stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.9 15.3H3.2c-.88 0-1.6-.6-1.6-1.4v-2.7c0-.4.33-.6.74-.6h1.72c.7 0 1.25-.64 1.25-1.2 0-.64-.55-1.15-1.25-1.15H2.34c-.41 0-.74-.32-.74-.68V5.84c0-.81.72-1.48 1.6-1.48h2.36V3.13c0-1.21.93-2.297 2.21-2.419C9.23.57 10.5 1.62 10.5 2.98v1.38h2.4c.9 0 1.5.67 1.5 1.48v8.06c0 .8-.6 1.4-1.5 1.4z'/></svg>";
var subst = this.id.toLowerCase() + "-icon";
Services.io.getProto
тогда скорее всего это loading-burst.svg.Ну а стиля у вас конечно же нет.
Не-не, xrun1 всё правильно сказал.
на темной теме не видно бегающих точек
Это аргумент.
Тогда, можно так попробовать.
В коде есть конструктор
function ProgressIcon(btn) {
…
}
Заменить его на такой.
(совместимость идёт лесом)
function ProgressIcon(btn) { var {icon} = btn, origIcon = icon.src; var box = btn.ownerDocument.createXULElement("hbox"); box.toggleAttribute("busy"); box.toggleAttribute("fadein"); box.className = "tab-throbber"; btn.style.setProperty( "min-width", btn.getBoundingClientRect().width + "px", "important" ); icon.replaceWith(box); this.loading = () => { box.replaceWith(icon); btn.style.removeProperty("min-width"); icon.src = "chrome://global/skin/icons/loading.svg"; } this.restore = () => icon.src = origIcon; }
Кстати, удалить keyword не удаётся. Редактировать - пожалуйста.
Но если пытаюсь удалить полностью - восстанавливается. Всё, что смог - сократить до одной буквы.
Наверное, какая-то ошибка в программе. Надо будет глянуть и исправить, если что.
Да, я вижу это. Определённо баг. Вот попытка сочинить eval-патч.
Прямо в PlacesEditBookmarkKeywordTransaction (а не по окнам), исходя из предпосылки,
что он не должен допускать описанного тобой бага вообще как таковой.
Код должен исполняться только один раз.
Ну, то есть, из любого разумного окружения, где он будет исполняться только один раз.
Чтобы попробовать, можно запустить разок с консоли.
Понятное дело, что смотреть надо на урле, который не испорчен багом.
То есть, подопытный — урл без кейворда вообще, «и вперёд» после патча.
[spoiler][code](repl => {
var url = "resource://gre/modules/PlacesUtils.jsm";
var g = Components.utils.import(url, {});
var key = "doTransaction";
var proto = g.PlacesEditBookmarkKeywordTrans
egorsemenov06
Ну, раньше был
chrome://browser/skin/tabbrowser/tab-connecting.png
а теперь нет.
Можно заменить в коде на тот, который был раньше.
В смысле вытащить из Firefox, в котором ещё есть.
Вот из 115, например
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACGFjVEwAAAA8AAAAAO2clZcAAAJAUExURQAAAFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVF
вопросов по визуальной части затеи не предвидится
Не, это я, скорее, к тому, чтобы мне взять
уже готовый код, а не сочинять самому.
Так же, даёт возможность проникнуться концепцией в целом.
Вот что получается в консоли
Да, вижу. Действительно странно.
Ну, и скорость.
тут для каждой записи отдельный запрос делается. В то время как всё сразу было бы получить одним запросом.
Я тут попробовал сочинить тестовый код.
Ну, как смог, SQLite-то я не знаю.
Суть: получить объект, где свойства — урлы истории,
а значения — количество штук в закладках.
Ну и замерить сколько на это уйдёт времени.
Запускал на Firefox 56, places.sqlite — 65 мегабайт.
Находит где-то 69 тысяч урлов.
Выигрывает практически всегда TEST_SQL_AGG_NATIVE
а TEST_XPCOM всегда последний.
Кстати, наткнулся на такое:
Обнаружился один урл, для которого foreign_count
не совпадает с тем, что отдаёт TEST_XPCOM
В базе значение — три,
а кодом без использования чтения базы — два.
Ока
…