Надеюсь, не очень путанно описал свою хотелку.
Ну так, на четвёрочку.
Первый пункт, я так понимаю, относится и к звезде,
иначе, наверно, было бы написано «по Ctrl+D» вместо «(Ctrl+D)».
Второй пункт, видимо, относится к первому пункту, а не вообще «всегда».
Третий пункт я просто не понял. Если имеется в виду сохранение
со звёздочной панельки в состоянии «Изменить закладку», то это
не «сохранении новой аналогичной закладки», а перемещение существующей.
А если заказано чтобы звёздочная панелька в состоянии «Изменить закладку»
не появлялась, то третий пункт получается избыточен.
Однако, на всякий случай, задумал, чтобы если звезда активируется
с модификатором Ctrl или Shift, тогда поведение не меняется, остаётся каким было.
Вот, в окно браузера (не в сандбокс).
[spoiler][code](async mod => (await ChromeUtils.compileScript("data:," + encodeURIComponent(
`Object.assign(PlacesCommandHook, {${
String(PlacesCommandHook.bookmarkPage)
.replace("{", `
А чего это «Можно поправить?» делает в коде?
Подлежит удалению.
перестала работать кнопка
Очень информативно. Хорошо, 129
/* fp.init(window, PlacesUIUtils.getString("EnterExport"), fp.modeSave); */ fp.init(window.browsingContext, PlacesUIUtils.promptLocalization.formatValueSync("places-bookmarks-export"), fp.modeSave);
заменить readFromClipboard()
На await navigator.clipboard.read() что ли?
А в чём тут затруднение? Выражение вернёт массив,
либо пустой, либо не пустой, просто проверяем length
Другое дело, что navigator.clipboard берёт лишь немногое.
Например, в копируем файл в проводнике,
и в буфере торчит больше десятка форматов,
а await navigator.clipboard.read() отдаёт пустой массив.
Просьба посмотреть
Здесь виджет создаётся кодом, исполнившемся в окне,
и многое некоторое привязано к этому окну.
Например, PlacesToolbarItems вычисляется
как #PlacesToolbarItems того окна, в котором создан виджет.
Если открыть другое окно браузера, то это не изменится, листенеры
будут добавляться и удаляться для элемента в окне происхождения,
то есть, в новом окне код не будет работать как надо.
Также args11, мало того, что это ненужная глобальная переменная,
типа window.args11, так при открытии нового окна, код перепишет этот args11,
и если листенер из предыдущего args11 был д
Или с событием 'copy' такое не прокатит
Какое «такое»? Событие "copy" наступит когда случится копирование
в этом окне, а значит в этом процессе, не в контентских процессах.
А даже если слушать и в них, то это всё равно всего лишь copy.
нужно ждать поддержки такой фишки?
Да, такая фишка была бы здесь полезна, только это настораживает:
«
If the clipboard contents are changed outside the user agent,
then the clipboardchange event MUST fire when the user agent regains focus.
»
Хотел попробовать записать какой-то аналог на ctypes,
но далеко не продвинулся, то ли в ctypes что-то сломано,
то ли руки кривые, но при попытке использовать функцию
(процедуру, как в осуществлении SetWindowsHookExW() или SetWindowLongA())
браузер валится с MozCrashReason: *** Compartment mismatch 0 vs. xxxxxxxx at argument 0
Ладно, если это так важно, то можно было бы и интервал подрядить на сколько не жалко.
Но как узнать что буфер обмена пуст? В смысле, какое состояние
утилита для просмотра буфера обмена clipbrd.exe
О, интересная штука. Показывает даже то, чего не показывает InsideClipboard
[spoiler]
Ну в смысле скорее показывает наличие некоторых форматов, чем данные.
После применения способов 1) ... там чисто.
Ну где же чисто, когда нет
[code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAFpCAIAAACNv894AAArJklEQVR42u2df7AV1Z3gz+VH4m8FXQTRzKZ4igKGctx9cdCsGH+watYxb4hO1kopG0tSrIqT1LDqTK2YUUPIZGYeKlPPTYVYKScjxVBWJkiJGDGujrJhXUYeCrwXjZJ5QGmMEn8h8Pbc7tvdp7tP/7g/3uk+/T6fPy6Xvt3nnL4/Pu/7Pefe/tbeeuutQ4cOHTx48LDHcAwhhHsLAABaanv37p295Z+LHgYAgN3UfvOb35y7df2egx8VPRIAAIupvfHGG93bNiBTAIB2qL3++uvnbd+ITAEA2qH2q1/9as6rP0emAADtUBscHDx/x9PIFACgHWoDAwMX7NyETAEA2qG2c+fO/zTwi2yZXnVz485PHyh6zAAApaO2Y8eOCwefTZSp59Dh4eFnnnlm7ty5zn3nyJpuf1QLAKOS2quvvjr3V/87SabD/+Xmu+9eetddd0mTyv9u2rRp6dKlae0hUwAYldReeeWVi157LkWm8qZ2992bnJjUx7eqvJXh6oUXXlhzI1VkCgCjktr27du/+PrzmTIdvusuf6OMUqVMZbgqBSrvSJm6t/XHojLdLq5aGWv1s6LvW2KK8XMd2iQWrhFnzhfL5xrvW3023
Где бы поделиться ссылкой
Увы, я не знаю где.
Подломали Custom Buttons.
Bug 71895 - Remove Hidden Window from Linux and Windows builds (Firefox 132+)
Bug 1917745 - Remove dom.window.sizeToContent.enabled pref (Firefox 132+)
Dumby, не могли бы вы посмотреть, что изменилось в воспроизведении звуков уведомлений FF131 и скрипты аддона в XPI
FF130, скорее. Какой-то очень странный баг.
Лиса козлится, пишет какую-то дичь, типа
не поддерживается, не удалось загрузить медиаресурс,
не удалось воспроизвести, нет декодеров ...
Думал, может дело в .ogg — но замена на .mp3 хорошего результата не дала.
Думал, может дело в moz-extension:// — но с консоли браузера audio играется.
Тем не менее, по протоколам data: и blob: вроде работает, поэтому,
пока не найдено лучшего решения или не исправлен баг, можно так попробовать
[spoiler=popup.js][code]/*
playSound(sound, volume) {
if (sound !== null && sound !== 'off') {
let audio = new Audio()
audio.src = sound
audio.autoplay = true
audio.volume = volume
}
}
*/
async playSound(sound, volume) {
if (!sound || sound == "off") return;
var resolver = Promise.withResolvers();
var reader = new FileReader();
reader.onload = res
мне нужно, чтобы настройка всегда была равна false
Я попробовал в Tor Browser 13.5.5 добавить в config-prefs.js
pref("privacy.resistFingerprinting", false, locked);
и мне, как about:config, так и консоль с кода
Services.prefs.getBoolPref("privacy.resistFingerprinting");
показывают false
какой способ, на твой взгляд, правильней для очистки (удаления) данных буфера обмена?
Всё ещё склоняюсь избегать обсуждения вопроса "правильности".
Скажу так: утилита InsideClipboard показывает мне, что
Способ 1) пишет в буфер два формата
CF_TEXT — один нулевой байт и CF_UNICODETEXT — два нулевых байта.
Способ 2) очищает буфер полностью.
Способ 3) пишет в буфер один формат "utiputi" — два нулевых байта,
что, для данной задачи, является избыточным.
Если убрать всё лишнее, то есть оставить только
Services.clipboard.setData(
Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable),
null,
Ci.nsIClipboard.kGlobalClipboard
);
то результат будет такой же, как и у способа 2)
Ещё скриншот
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoIAAAHgCAIAAAC+RpuOAAC2UElEQVR42uydB1zTThvHU7aAioKKk+1WEPfA8VdxbwVRHKCioKAiLpQlihsRB4pbceBCcYNbcYu4F0NAccsQFFl9rw0NaZqkSZuy3vt9PuLlxnOXtM03z3OXhNeuXbuIiIgLz9MRcRk3rAv+8gi5xG3JDFyRtMYkbXnURdLtc98FRS94Y9LMsOxOao9k1qT3wXRnZWgj9UvB9AixFo9FLqddyGtUIVa5FJ/PvUnFm5O5C+kN+XTbLPrls27FZ1TGZ1Qfq8N4xMzt8ulHyqxHmu6YfOBMepGnCxr7fGlZ6FZi6mdCLZ22Ju5tm/AAhm/duhV2PZ5QbNxAnzl0pRJRHhyWd9zySJOy94XQcIwntTIDg8xGyWO8JcN46CrLCil27ag/g3IPyQovDk7YUu2wbMnKFJ9dMTtGEuoxwqr0XBZjYI1MBHkY9+r9q5eZ6emMWjJW9Ro1zJq3aNu6Gegr9tlrxXVh3rIpSH+Ii7sSsjHt9Utuu6jXrEVv59kNW5uDQ5b48QuhVMvCKHBITwGGHz58uPsSsW+jBnWo7LJ2c8sTcXl0PGWEF464zsK09OPGvKpMfGXhysvcknl1qd8/BYjZwBQ/jnIlVs5HaY6CAUlYD4wvY3M+0wKWtOYzrcxgAEy7pjquu3fuHz2kZ2MzY8ZHhZHevU88fub6JMcJIL1v9wHFdWE/2R6kA4cPmOnh1KVzG267uHP3yZZ1obNPngcH78PHr4RSldaGm4aKMLwniohhw/rFGC5D6JYNcTnqAmHDWvq+WPmyrDxpprspQxsmtXis9oypSs3P/X/DLr1KLZDNVUdsY5oy+LIMWzFDNRtOM/anpXnSjDoN2bLDd5Hzxx85DI8QQzXQ0/JdFeLkPBWkQ0N2Kq6LKdOngLSfVYdTV4
Не знаю в чем я провинился перед вами
Абсолютно ни в чём, будь уверен.
Просто просить прямую ссылку,
а сам не предоставивши не только прямой, а вообще никакой,
... ну так дела не делаются.
у меня в config.js даже нет такого
А должно бы было быть.
Для кого Виталий старался?
Вписать туда «case "r3dfox":» — всего-то и делов.
Ну, и весь набор, ясен пень, должен быть актуализирован.
startupCache можно на странице about:support очистить, если что.
Картинка
Жму на кнопке обозначеной стрелкой,
верхний тулбар переключается как и задумано.
(желательно прямую ссылку) … для r3dfox 129.0.2
Плохой, весьма плохой пример. Непедагогично.
рабочий user_chrome_files
[spoiler=config.js][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkIAAAEkCAIAAABMgMmNAAA2rUlEQVR42u2db2wcyXnmXwbwh+RDsBJW4gFGEO2fUUBKBOy1Ehgz0PrIM84nOR8WxIJwgiz2y2IoYy8QkYUQA16cjhch/iBsMAROMEnog9cGDgFPGAjnXc76sKaiVUjEjm5XCSkR0XBXQhADKy29UuwAMQLHvK6u/lPVXdVT3V0zU8N5flgsqOrq6uqamX76qa5+35HvfOc7BAAAAAwmI1//+tf73QcAAACgIEzGvvnNb/a7GxKf+cxnDh8+/PDhw47/9yrPj9CZj/vdYwAAAH3CRRn77Gc/a6Jh/P+QMQAAGGZclDG4MQAAAIa4KGNl3Nj992v/ld5867lnE23qygEAAAw01mTs/rXL735IB0+8OP25J0o2VcKNtc4tXj11Zmkq2aSuvA+s/XDkLw60+ySo3jic/t7BxsczZ/s9DIOKdz/0xR9vvPSVvYtPFdi71+O/vDLy3z5lf5z4Pekrx8+C/VVZ/fg/nepYP+68XD+Le7P/4QfL/l/1/9Xpp+f9KP6wrThoZn8ACLAjY49vNa88eu6Vp+41H3++vIwVdmOwYga0zq3cvdjpMrq8MvvsjBOq31+U4+B9nS4dWC8kY2Q4/lYQbpiYAlEkvZ7A/O04l1KvTuvpoFxbPxiKkfazje1HR98ykDFfJo93VK+48qPXP3766u8/Oif+SLP7A0CE1UnF+9esyFhRN1bKivH7QeL3fQcuBjeS/Mb58cLv/+XcTV5PuJXmt4pe/f9JL/v3tvF
…перестал работать в v129
FillHistoryMenu() теперь хочет event
/* window.FillHistoryMenu(document.getElementById('backForwardMenu')); */ window.FillHistoryMenu({ preventDefault() {}, target: document.getElementById('backForwardMenu') });
не знал что кроме web-консоли есть еще
Ctrl+Shift+J
Плюс, включить devtools.chrome.enabled
Ну, это в Firefox, а как в PaleMoon — не знаю.
Или вы имеете ввиду через расширение?
Можно и через расширение. CB, например, подойдёт.
Вобщем, код для запуска в контексте окна браузера
(и не для многопроцессного режима).
использую PaleMoon
Мне эту шляпу взять негде.
нажать на чебокс
У меня вот так нажалось
content.document.getElementById("cf-turnstile") .firstChild.openOrClosedShadowRoot.firstChild.contentDocument .body.openOrClosedShadowRoot.querySelector("#content input").click();
Как исправить для FF 129.0.1 ошибку dt = e.dataTransfer is null
Никак.
Это Bug 1911486 - dataTransfer is null in content process on dragend
Будет исправлено в 129.0.2
И как там исправить код internalSave
Вроде не требуется, и так нормально.
Под шестнадцать аргументов в коде учтено,
а семнадцатый аргумент был добавлен в конец, и он необязательный.
17-08-2024 18:51:18
Скрипт обновить закладку, можно чтобы после обновления контекстное меню не закрывалось?
К парочке repBM.setAttribute(…);
добавить ещё один
repBM.setAttribute("closemenu", "none");
Скрипт "Открыть изображение" стал открывать картинки сразу в 2 новых вкладках
Нет, не стал. Он всё также открывает одну вкладку.
Просто если раньше он переопределял открытие,
как бы вместо того, как это делал браузер,
то теперь браузер так не делает, и скрипт остался в одиночестве.
Bug 1898764 - Remove inline event handlers from the context menu
Иначе говоря — скрипт теперь открывает свою вкладку, а браузер свою.
Скрипт, кстати, кривоват, но, если устраивал, то можно попробовать так
/* item.setAttribute('oncommand', '(' + viewMedia.toString() + ')(event);'); */ item.addEventListener("command", e => { e.stopImmediatePropagation(); viewMedia(e); });
не работают пункты "Сохранить значок веб-сайта" и "Сохранить выделенный текст как txt файл"
Видимо, это [url=https://bugzilla.mozilla.org/show_bug.cgi?id=1898380
…lazy.PrivateBrowsingUtils is undefined
Вот, кстати, интересно, откуда этот lazy вообще берётся...
Но, может быть, что-то тупенькое прокатит?
Типа добавить
var lazy = {PrivateBrowsingUtils};
перед
var save = eval(`(function ${gContextMenu.saveMedia})`.replace(
побочный эффект тот же
Ааа, наконец-то дошло о чём речь.
Просто у меня кнопка была на самой панели меню,
типа рядом-вместо, поэтому косяка видно не было.
Но, переместил кнопку на другой тулбар,
и теперь вижу как скрытая панель меню выскакивает.
Не знаю как это разрулить.
Можно попробовать совсем выключить, если вдруг подойдёт.
/* addDestructor(() => { */ var func = AutoHideMenubar._setActive; AutoHideMenubar._setActive = () => {}; addDestructor(() => { AutoHideMenubar._setActive = func;
unter_officer
Да вроде то же самое.
/* btn.prepend(menupopup); var bar = doc.getElementById("main-menubar"); bar.querySelector("#bookmarksMenu")._placesView?.uninit(); for(var menu of Array.from(bar.children)) { */ btn.setAttribute("popup", menupopup.id = "main-menubar-popup"); var bar = doc.getElementById("main-menubar"); bar.append(menupopup); for(var menu of Array.from(bar.querySelectorAll(":scope > menu"))) {
PlacesUtils.nodeIsFolder
Bug 1904909PlacesUtils.nodeIsFolder
PlacesUtils.nodeIsFolderOrShortcut
для режима [firefox] search-config-v2
Совсем разблокировать search-config-v2 ?
Ужаснись тогда что получится.
Только бэкап сначала сделать не забудь.
[spoiler][code]async cso => {
var defaultEngine = "vatera";
var order = ["rakuten", "google", "bing", "eudict", "readmoo", "ddg",];
var chrome = [], push = (url, mime, src, rep) => {
var code = Cu.readUTF8URI(Services.io.newURI(url)).replace(src, rep);
var newURL = `data:${mime};charset=utf-8,` + encodeURIComponent(code);
chrome.push(["override", url, newURL]);
}
push(cso, "application/json", /https(?!\?)/g, "$&?");
push(
"chrome://browser/content/parent/ext-search.js", "application/x-javascript",
"await Services.search.getVisibleEngines()", "($&).filter(e => !e._metaData?.hideOneOffButton)"
);
var uri = Services.io.getProtocolHandler("resource")
.QueryInterface(Ci.nsIResProtocolHandler).getSubstitution("");
var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddon
Возможно приблизить значение к диспетчеру задач
Попытка такого приближения была, где-то здесь.
Не думаю, что смогу сделать что-то сложнее.
И, эта жуть на ctypes, соответственно, только Windows.
Ну, там чуть причесать надо, и на ESM перевести.
Надеюсь, труда не составит.
или about:processes?
К странице about:processes приближать не требуется.
Оно должно с ней просто совпадать.
Типа сумма значений в колонке «Память».
Если с ChromeUtils.requestProcInfo()
нужно только значение родительского процесса,
(как, предположительно, акцентировано на скриншоте красным овальчиком справа),
то можно закомментировать строку
for(var child of info.children) bytes += child.memory;
ошибка missing ) after argument list ucf-contextsearch.js:80
Чтобы использовать в функции оператор await
нужно сделать её асинхронной (дописать async).
/* setAttrs(node, engine, label = engine.name) { */ async setAttrs(node, engine, label = engine.name) {
В свое время на этом и погорел, машинально поставив кавычки, и долго ломал голову откуда взялся capturing
...addEventListener("event", func, "false"); // "false" = true (не пустая строка)
"false" == true (не пустая строка)
Описываемый тобой опыт, несомненно, интересен и поучителен,
но я же не об этом.
Вот запусти с консоли прямо так: addEventListener();
Какое число выдаст тебе консоль? Может восемь? Нет?
Ну вот, я, собственно, только об этом.
05-07-2024 22:09:30
"false" == true
Опаньки, с кода "false" == true; консоль выдала мне false
Это слегка неожиданно.
"false" == false; — тоже false
С кода if ("false") alert(); — алерт есть.