Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№17624-10-2024 00:40:09

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 131.0

Re: userChrome.js

Dumby пишет

Можно подрядить

Подрядил. Все работает как надо. Спасибо!

Отсутствует

 

№17727-10-2024 12:28:06

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 131.0

Re: userChrome.js

Dumby никак не могу заальтернативить код из вашего поста №160, чтобы слушало не PlacesToolbarItems, а contentAreaContextMenu - то, в котором присутствует групповуха context-navigation. Оно же в gBrowser?

Отредактировано dinn (27-10-2024 12:32:30)

Отсутствует

 

№17828-10-2024 09:37:10

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: userChrome.js

dinn пишет

никак не могу заальтернативить код из вашего поста №160, чтобы слушало не PlacesToolbarItems, а contentAreaContextMenu

Странно, у меня работает простая замена одного на другое.


Заменил, рестарт, жму кнопку, чтобы очистить буфер,
открываю #contentAreaContextMenu, затем закрываю,
и в консоли — прописанный лог «popup closing».
При закрытии субменю, кстати, тоже.


А если скопировать в буфер текст, то,
при закрытии меню, кнопка вновь обретает visibility

то, в котором присутствует групповуха context-navigation

Да, там есть <menugroup> с таким id
Но это не характеризует его совершенно однозначно.


Например, если посмотреть по адресу
view-source:chrome://browser/content/webext-panels.xhtml
то там тоже есть #contentAreaContextMenu с #context-navigation
Надеюсь, имеется в виду то, которое в документе окна браузера.

Оно же в gBrowser?

Не смог понять вопрос.
Оно не «в», и не «вовне», это просто разные вещи.


gBrowser — это js-объект создаваемый скриптом
chrome://browser/content/tabbrowser/tabbrowser.js
А #contentAreaContextMenu — это XULPopupElement <menupopup>

Отсутствует

 

№17929-10-2024 19:07:51

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 131.0

Re: userChrome.js

Dumby пишет

Странно, у меня работает простая замена одного на другое

Да я лопухнулся, заменил еще событие на contextmenu. Исправил, теперь пашет



Давеча смотрел скрипт и не мог понять,  куда нужно зайти, чтобы прослушка сработала, т.е. gContextMenu.shouldDisplay = false
Переделал с render как смог

скрытый текст

Выделить код

Код:

(async (id, url) => {
	if (location != url) return;
	var menuitem = document.createXULElement("menuitem");
	document.getElementById(id).append(menuitem);
	var hidden = () => {
		var hs = nsContextMenu.contentData;
		return hs.context.link || hs.context.onImage || hs.context.onTextInput || hs.selectionInfo.text;
	}		
	menuitem.hidden = true;
	menuitem.render = () => {
		if (hidden()) return;
		menuitem.hidden = false;
		menuitem.id = "context-closetab";
		menuitem.label = "Close Tab";
		menuitem.setAttribute('oncommand', 'BrowserCommands.closeTabOrWindow();');
		delete menuitem.render;
		menuitem.render();
		menuitem.render = () => menuitem.hidden = hidden();
	}
})("contentAreaContextMenu", "chrome://browser/content/browser.xhtml");

А потом решил сделать версию с запиханием в context-navigation, чтобы не мудрить с hidden. Короче не придумаешь и вроде все норм пашет или есть подводное течение?

скрытый текст

Выделить код

Код:

(async (id, url) => {
	if (location != url) return;
	let menuitem = document.createXULElement('menuitem');
	menuitem.setAttribute('id', 'context-closetab');
	menuitem.className = 'menuitem-iconic';
	menuitem.setAttribute('image', 'chrome://global/skin/icons/close.svg');
	menuitem.setAttribute('tooltiptext', 'Close tab');
	menuitem.setAttribute('oncommand', 'BrowserCommands.closeTabOrWindow();');
	document.getElementById(id).prepend(menuitem);
})("context-navigation", "chrome://browser/content/browser.xhtml");

Отсутствует

 

№18030-10-2024 21:23:20

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: userChrome.js

dinn пишет

куда нужно зайти, чтобы прослушка сработала, т.е. gContextMenu.shouldDisplay = false

Нее, загадку, что бы это могло значить, мне не разгадать.

Давеча смотрел скрипт
Переделал

Под label "Close Tab" чуть больше подходит gBrowser.removeCurrentTab()
ведь BrowserCommands.closeTabOrWindow() закрывает и выбранные вкладки, если есть.
Посмотри в консоли, набрав BrowserCommands.closeTabOrWindow + "";
там код несложный и хорошо прокомментирован.

решил сделать версию с запиханием в context-navigation, чтобы не мудрить с hidden

Этот menugroup скрывается чуть в больших случаях, чем заказано в коде «с render»,
например, ещё onCanvas, onVideo, onAudio. Если это подходит, то решение хорошее.

есть подводное течение?

Ну, разве что есть мета, где выбрасывают все «on…» атрибуты.
Среди причин: «adding a restrictive CSP to browser windows».
Если сделают — атрибут 'oncommand' работать, наверно, перестанет.

Отсутствует

 

№18102-11-2024 19:17:45

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 131.0

Re: userChrome.js

Dumby пишет

Посмотри в консоли, набрав BrowserCommands.closeTabOrWindow + "";

ценный совет, а то я совсем забыл, что тело функции можно посмотреть из консоли


Если сделают — атрибут 'oncommand' работать, наверно, перестанет

Сделал без on, попутно еще к крестику добавил плюсик, но BrowserCommands.openTab() не впечатлило, а вот так вроде самое оно
func: () => gBrowser.addAdjacentNewTab(gBrowser.selectedTab) + gURLBar.focus(),

Отредактировано dinn (02-11-2024 19:18:51)

Отсутствует

 

№18205-11-2024 17:15:17

Farby
Участник
 
Группа: Members
Зарегистрирован: 21-11-2012
Сообщений: 303
UA: Google 2.1

Re: userChrome.js

Есть Скрипт Firefox userChrome.js для добавления второй боковой панели с веб-панелями, как в Vivaldi/Floorp/Zen.
Сам скрипт заточен под загрузчик fx-autoconfig, но желающие могут протестировать и на других. Можно создать рядом с second_sidebar.uc.mjs файл с названием например second_sidebar.uc.js

second_sidebar.uc.js

Выделить код

Код:

// ==UserScript==
// @name            Firefox Second Sidebar
// @author          aminought
// @include         main
// @homepageURL     https://github.com/aminought/firefox-second-sidebar/tree/master
// @description     A Firefox userChrome.js script for adding a second sidebar with web panels like in Vivaldi/Floorp/Zen.
// ==/UserScript==

if (location.href.startsWith("chrome://browser/content/browser.x")) {
	(async url => {
		(await ChromeUtils.compileScript(`data:,"use strict";import("${url}").catch(console.error)`)).executeInGlobal(window);
	})(Services.io.newURI(Components.stack.filename).resolve("second_sidebar.uc.mjs"));
}


Жизнь иногда такое выкидывает, что хочется подобрать...

Отсутствует

 

№18305-11-2024 18:21:41

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 132.0

Re: userChrome.js

Dumby как мониторить вкладки на добавление (наличие) атрибута hidden = true? При этом выводить алерт или удалять атрибут. Прослушка TabHide не катит, т.к. редко кто скрывает вкладку через браузный hideTab()

Отредактировано dinn (05-11-2024 18:28:43)

Отсутствует

 

№18406-11-2024 11:10:22

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: userChrome.js

dinn пишет

как мониторить вкладки на добавление (наличие) атрибута hidden = true? При этом выводить алерт или удалять атрибут. Прослушка TabHide не катит

Звучит как возможность попробовать MutationObserver.
Как-то так, наверно (но, поосторожнее там с alert'ом)

скрытый текст

Выделить код

Код:

(url => {
	if (location != url) return;

	var labelify = record => record.target.label;
	var tabAndHidden = record => record.target.matches("tab.tabbrowser-tab[hidden=true]");

	(new MutationObserver(mutations => {

		var hiddenTabsRecords = mutations.filter(tabAndHidden);
		hiddenTabsRecords.length && alert(
			'"true" hidden attribute on tab(s) detected.\n\n'
			+ hiddenTabsRecords.map(labelify).join("\n")
		);
	}))
		.observe(
			gBrowser.selectedTab.parentNode,
			{subtree: true, attributes: true, attributeFilter: ["hidden"]}
		);

})("chrome://browser/content/browser.xhtml");

Отсутствует

 

№18507-11-2024 12:30:21

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 132.0

Re: userChrome.js

Dumby спасибо, то что нужно. Добавил вывод url вкладки и стало вообще зашибись

Отсутствует

 

№18610-11-2024 08:35:23

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 132.0

Re: userChrome.js

Dumby потестировал ваш код на паре случаев, когда сам брауз скрывает вкладки:
1 открытие исходного кода страницы в новом окне
2 кнопка Firefox View
Напрашивается не исключение для about:blank, а задержка с правильно подобранным значением для alert, чтобы видеть актуальное, а не переходное состояние label и url для hidden tabs.
Правильно ли я все сделал?

скрытый текст

Выделить код

Код:

(url => {
	if (location != url) return;

	var adr = record => record.target.linkedBrowser.currentURI.spec;
	var labelify = record => record.target.label;
	var tabAndHidden = record => record.target.matches("tab.tabbrowser-tab[hidden=true]");

	(new MutationObserver(mutations => {

		var hiddenTabsRecords = mutations.filter(tabAndHidden);
		hiddenTabsRecords.length && setTimeout(() => {
			alert(
				'"true" hidden attribute on tab(s) detected.\n\n'
				+ hiddenTabsRecords.map(labelify).join("\n")
				+ '\n\n' + hiddenTabsRecords.map(adr)
			);
		}, 155);
	}))
		.observe(
			gBrowser.selectedTab.parentNode,
			{subtree: true, attributes: true, attributeFilter: ["hidden"]}
		);

})("chrome://browser/content/browser.xhtml");

Отсутствует

 

№18711-11-2024 14:03:56

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: userChrome.js

dinn пишет

1 открытие исходного кода страницы в новом окне

А, тут надо настройку view_source.tab поперёк дефолта переключить.
Мог бы напомнить, а то пока дошло...

2 кнопка Firefox View

Да, это был целевой кейс при рассмотрении.

когда сам брауз скрывает вкладки

Ещё он должен так делать по заказу WebExtensions (типа такого).

Правильно ли я все сделал?

Как не знал, что есть «правильно», так и не буду знать никогда.
Однако, ни SyntaxError'а, ни какой-то вопиющей неправильности я не вижу.


Мне лишь только кажется, что функцию для setTimeout()
лучше вынести наружу, чтобы она не создавалась каждый раз новая.
Впрочем, это довольно субъективно.

скрытый текст

Выделить код

Код:

(url => {
	if (location != url) return;

	var tabAndHidden = record => record.target.matches("tab.tabbrowser-tab[hidden=true]");
	var info = record => record.target.label + "\n" + record.target.linkedBrowser.currentURI.spec;
	var notify = records => alert('"true" hidden attribute on tab(s) detected.\n\n' + records.map(info).join("\n\n"));

	(new MutationObserver(mutations => {

		var hiddenTabsRecords = mutations.filter(tabAndHidden);
		hiddenTabsRecords.length && setTimeout(notify, 155, hiddenTabsRecords);
	}))
		.observe(
			gBrowser.selectedTab.parentNode,
			{subtree: true, attributes: true, attributeFilter: ["hidden"]}
		);

})("chrome://browser/content/browser.xhtml");

Отсутствует

 

№188Вчера 13:37:07

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 23
UA: Firefox 132.0

Re: userChrome.js

Dumby средства этого целевого кейса позволяют нам скрыть вкладку без отображения ее по кнопке список всех вкладок, что совсем не радует. Хорошо хоть в инспекторе видно, что скрыта

скрытый текст

Выделить код

Код:

gBrowser.hideTab(FirefoxViewHandler.tab = gBrowser.addTrustedTab("about:blank"));

Отсутствует

 

№189Сегодня 05:47:20

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 560
UA: Firefox 132.0

Re: userChrome.js

Dumby
В FF132 скрипт для запуска внешних программ мешает запоминать масштаб страниц. Выставляю масштаб на этом сайте 110%, а после перезагрузки опять 100%. Если его удалить, то всё ОК.
загрузчик метода Aris-t2.
В userChrome.js прописано так:

Выделить код

Код:

userChrome.import("scripts", "UChrm");

Вот сам скрипт:

скрытый текст
// Этот скрипт можно использовать для создания кнопок с помощью CustomizableUI.createWidget

var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
var {console} = Cu.import("resource://gre/modules/Console.jsm", {});
try {
    CustomizableUI.createWidget({
        id: "add-Notepad-app",
        label: "Notepad",
        tooltiptext: "Запуск редактора Notepad",
        onCreated: btn => btn.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABuElEQVQ4T42T3UoCURSFe5BexHeI6KIewqAg7F+HySgqiiIjLwpSCBKUgkwEbYxJm4nM/JvoR0vJiMlEBC0kvFjNOUzZmA4tWMy52Ovbex/OdLUTwzAGYqvVOtB6/v6yLNutlreI6TJsRO1YEJaxdmHDvLAE9mwO8+dLGDoZBSPMYpgfg3F7EASmppqa4sxiqniDSzmFyEsUx88RHD1x8OR92H3cx3Z2D4spG5whJ7xeL9SYKqV7OC9AKt7pAsa4aRQKBXAcpwVYQqyYLeV0AStpO5ycE6VyqQWgdOdyPA2ni7cdAabAJNJSGu+fH1qAKTguktC3o3LyD2Bd2sLh1SHK5TKImgCl+37miAZ+O/xyoQFYTmeQTCbxWipqJxgMDIuksJ2Dz2EKsF874Iq4KICEmwClu+PGRYs62ft0jImgBZIk4T6b0QJ6VvtEMp6eN6934Jf8kGUZlUqF7k9EAeR1kdvVs1ndPZFIQH571U7Qe9DvNoZG0MkjJ5PwC34ajsfjP+EfQDv5fD4a+G0SzuYe/geIxWKo1WoaV6tVNBoNdXugXq+3+RdUeTyeAZ7n3XpWwm6GYQxfSZKfb4uO/HAAAAAASUVORK5CYII=",
        onCommand: function(event) {
            var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
            file.initWithPath("E:\\Software\\Просмотр\\Notepad++ 7.7 Final Portable\\notepad++.exe");
            if (file.exists()) file.launch();
        }
    });
} catch(e) {}

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]