Страницы: 1
Dumby Большое спасибо за практикум.
в консоли браузера просто не включён многопроцессный режим
Да, так и есть. Ни разу в жизни не включал. Теперь вижу при
extensions.webextensions.remote=true
remoteTypes: ["extension"]
Для стилизации uMatrix у меня один css файл для попапа и настроек. Если получится, то сделаю чтение из css, а если нет, то придется вбивать в mjs 300 строк
Но тогда непонятно в чём затруднение
в том, но я не смог найти в e.target.... uMatrix@raymondhill.net
Так-то, о подобных вещах поперёк мейнстрима,
типа WE в родительском процессе, лучше говорить сразу,
чтобы не приходилось гадать.
Это со стороны выглядит, что я знал, а на самом деле узнал только после тестов перед написанием предыдущего сообщения, т.к. у меня в user.js extensions.webextensions.remote=false еще с FF91
Ещё бы, в регистрации написано: remoteTypes: ["extension"]
а у тебя такого процесса нет.
Можно заменить на matches: ["moz-extension://*"]
тогда будет работать.
Сократим mjs до
export class WebExtensionsStylerChild extends JSWindowActorChild { handleEvent(e) { var doc = e.target; console.log(doc); } }
Если extensions.webextensions.remote=true, то
remoteTypes: ["extension"] // не пашет
matches: ["moz-extension://*"] // не пашет
или в консоли уже не увидеть?
Если extensio
…WebExtensions живут в своём отдельном процессе.
А значит, бесполезно что-то слушать в окне браузера,
которое в родительском процессе, в котором
аддонского добра просто быть не может, никакого.
Ну почему бесполезно слушать? Пока еще не удалили эту настройку, а если она в false, то можно послушать
Поскольку о своём uc-скриптоприёмнике ты не рассказал ничего
Этот. Нет в нем никаких регистраций
Теперь про mjs'ку
В вашем первом коде все понятно, норм зарегилось, а во втором коде ничего не ясно. Это содержимое WebExtensionsStylerChild.mjs? Как этот mjs запускать? Что в нем за export .. extends? Не получилось ничего стилизовать таким способом, хотя бы на примере uMatrix
А раз тебе «С конструктором больше понравилось
Чтение из css файла я только с ним попробовал
Кстат
…
Dumby, может перед push впаять wrappedJSObject? Не дает мне стилизовать меню и настройки одного из расширений
location == "chrome://browser/content/browser.xhtml" && addEventListener("DOMDocElementInserted", e => { let doc = e.target; if (!doc.documentURI.startsWith("moz-extension://f6665cb1")) return; let win = doc.ownerGlobal; let file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.initWithPath(file.path+"\\css\\test\\yt_dark.css"); let fis = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); let sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); fis.init(file, -1, 0, 0); sis.init(fis, "UTF-8"); let data = sis.read(sis.available()); let sheet = new win.CSSStyleSheet(); sheet.replaceSync(data); doc.adoptedStyleSheets.push(sheet); });
Вот, развлекайся
ооо, спасибо, красота. Целых 3 способа. С конструктором больше понравилось + есть гордая надпись в правилах: constructed.
Это что ещё за monkey-offtopic?
Не совсем, если userChrome.js скрипт не умеет выборочно стилизовать http(s) страницы
здесь нужно железобетонное обоснование
Его нет, но есть интерес альтернативного подхода. Если очень кратко, то какова вероятность того, что при переносе на четвертый уровень, а затем полного удаления документа из web стандарта, это не распространится на юзер стили agent, chrome и content? В поисках альтернативы был успешно опробован метод, а вот что делать с внутренними страницами about:*, chrome:* пока не знаю. Или слишком забегаю вперед?
копируем файл в проводнике,
и в буфере торчит больше десятка форматов,
а await navigator.clipboard.read() отдаёт пустой массив
Да, так и есть, для .read() и readFromClipboard() - это неизвестный формат данных. Сможем ли где-то в браузере вставить такое? Вряд ли. Но и веб стандарт по буферу еще не до конца реализован в браузерах
виджет создаётся кодом, исполнившемся в окне,
и многое некоторое привязано к этому окну
Редко когда открываю window1, разве что случайно нажав Ctrl+N, и сразу закрываю. Отношусь к одноокошечникам.
args11, мало того, что это ненужная глобальная переменная
С моими познаниями даже не знаю как, например, в onCommand() получить значение переменной, созданной через let (var) в onCreated()
Лучше создавать виджет в другом месте, вот, например, через SystemGlobal.eval()
А если работать только в одном окне, то лучше тоже через SystemGlobal.eval()?
Спасибо за виджет и информацию, все ра
…можно было бы и интервал подрядить на сколько не жалко.
Это интересно только в плане технической реализации
Но как узнать что буфер обмена пуст? В смысле, какое состояние буфера считать пустым?
Все упрощается тем, что я никогда не очищаю буфер вне браузера, т.е. это будет делать кнопка. А в плане реализации мне не подходит оконный readFromClipboard(). Это становится понятным, если в буфере несколько типов данных, например, мы сначала скопировали текст, а потом картинку. Подходит await navigator.clipboard.read().
В итоге сделал такую кнопку. Просьба посмотреть и более грамотно расписать с точки зрения гуру, ну и заменить readFromClipboard()
[spoiler][code]location.href.endsWith("://browser/content/browser.xhtml") && (async (alertsService) => CustomizableUI.createWidget({
id: "my-cleanClipbrd",
label: "Clean clipbrd",
tooltiptext: "Clean data from Clipboard",
localized: false,
get icon() {
let icon = "data:image/png;base64,iVBORw0KGgoAAAA
xrun1 можно вкрутить GM.setClipboard. Вроде в новой версии идет уже из короби, т.е. не нужно прописки через @grant, либо как-то в скрипте задействовать doCommand("cmd_copy")
xrun1 не тестил, но на http://*/* navigator.clipboard работать не будет
Dumby посмотрите оконную виджет кнопочку-индикатор. Прослушки глобальные, действуют в любом месте окна, т.е. жестко с кнопкой не связаны. Цель: вместо этих прослушек добавить такую, чтобы кнопка делала opacity = 0.5 или disabled = true, если буфер обмена пуст и opacity = 1 или disabled = false? если буфер обмена не пуст.
Или с событием 'copy' такое не прокатит и нужно ждать поддержки такой фишки?
[spoiler][code]location.href.endsWith("://browser/content/browser.xhtml") && (async () => CustomizableUI.createWidget({
id: "test_button",
localized: false,
get icon() {
let icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAABY0lEQVR4nGNgwANeL2EofrWUoYiBXPBoHsMfECbbgLszGf6DMNkGXJvM8B+EyTYgODXuPwiTpit0FTNv0ip1noTltsJhU/6DsED0Ylve6MXqIDm8ennjl8fyxi39yh+35D9/7KL/ArEL/gvEzPsvGD33v2DU7P+CkTO/CodPi8VpAH/sglUCMfPhGoQiZ/0XipjxX
Страницы: 1