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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№17624-10-2024 00:40:09

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

Re: userChrome.js

Dumby пишет

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

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

Отсутствует

 

№17727-10-2024 12:28:06

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 20
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
Сообщений: 2241
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
Сообщений: 20
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
Сообщений: 2241
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
Сообщений: 20
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
Сообщений: 301
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
Сообщений: 20
UA: Firefox 132.0

Re: userChrome.js

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

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

Отсутствует

 

№184Вчера 11:10:22

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2241
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");

Отсутствует

 

Board footer

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