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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№1717607-05-2024 18:09:04

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 13
UA: Firefox 125.0

Re: Custom Buttons

vending_machine пишет

Здравствуйте, уважаемые кнопкоделы!
¿ Не могли бы вы посмотреть кнопку Открыть страницу в другом браузере( Firefox ) от 20.05.2019., и как-нибудь её адаптировать к актуальным версиям. В ней уже сразу не работает ЛКМ => Открыть меню с браузерами.
Заранее спасибо.
Или может у кого есть уже готовая похожая кнопка ?


May be someone can port this script (https://github.com/benzBrake/FirefoxCustomize/tree/master/userChromeJS/OpenWithHelper)  to CB

Отсутствует

 

№1717714-05-2024 01:47:03

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 450
UA: unknown 0.0

Re: Custom Buttons

b0ttle упоминаемый скрипт удалён, т. к. функционал ucf_cooks-pass.js интегрирован в ucf_hookClicks.js, к тому же код стал проще.

Отсутствует

 

№1717815-05-2024 15:02:32

momo2000
Участник
 
Группа: Members
Зарегистрирован: 03-09-2015
Сообщений: 230
UA: Firefox 126.0

Re: Custom Buttons

На 126 перестал работать код Вставить и перейти, можно ли поправить?

Выделить код

Код:

addEventListener("keydown", e => e.ctrlKey && e.code=="KeyB" && e.preventDefault() + BrowserOpenTab() + gURLBar.select() + goDoCommand("cmd_paste") + gURLBar.handleCommand());

Farby
Чётко! :beer:

Отредактировано momo2000 (15-05-2024 16:02:05)

Отсутствует

 

№1717915-05-2024 15:38:53

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

Re: Custom Buttons

momo2000 пишет

можно ли поправить?

Нужно найти BrowserOpenTab() и заменить на BrowserCommands.openTab()


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

Отсутствует

 

№1718022-05-2024 09:41:33

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 238
UA: Firefox 99.0

Re: Custom Buttons

Dumby пишет

Соберу на всякий случай Custom Buttons 0.0.7.0.0.33

А есть возможность скачать рабочий Custom Buttons?

Отсутствует

 

№1718122-05-2024 10:57:00

vending_machine
Участник
 
Группа: Members
Зарегистрирован: 10-01-2020
Сообщений: 539
UA: Firefox 115.0

Re: Custom Buttons

questman пишет

А есть возможность скачать рабочий Custom Buttons?

>><<

Отсутствует

 

№1718224-05-2024 16:52:51

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 34
UA: Firefox 52.0

Re: Custom Buttons

Есть ли какое-либо руководство по современным версиям CB?

Отсутствует

 

№1718324-05-2024 23:05:37

vending_machine
Участник
 
Группа: Members
Зарегистрирован: 10-01-2020
Сообщений: 539
UA: Firefox 115.0

Re: Custom Buttons

ruslaw пишет

Есть ли какое-либо руководство по современным версиям CB?

Такое же как и по реликтовым.
Готовые кнопки для Custom Buttons | Форум Mozilla Россия
Первый пост. Как добавить кнопку, как удалить.

Отсутствует

 

№1718428-05-2024 06:34:35

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 238
UA: Firefox 99.0

Re: Custom Buttons

vending_machine пишет

questman пишетА есть возможность скачать рабочий Custom Buttons?>><<

Спасибо!

Отсутствует

 

№1718512-06-2024 21:51:32

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 481
UA: Firefox 127.0

Re: Custom Buttons

Dumby Посмотри пожалуйста, на 127 не работает "Консоль браузера в сайдбаре", есть ли у тебя для этой версии кнопка?

Отредактировано Andrey_Krropotkin (12-06-2024 21:54:05)

Отсутствует

 

№1718613-06-2024 01:14:20

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

Re: Custom Buttons

Andrey_Krropotkin пишет

"Консоль браузера в сайдбаре"

как-то для себя делал UCF кнопку по мотивам Dumby, проверял на [firefox] 115 - 127, наверное должно работать и на [firefox] 78
Работает только одна кнопка, либо из CustomButtons либо UCF, иначе конфликт.

Запускатор BrowserConsoleExec.js

Выделить код

Код:

// 
try {CustomizableUI.createWidget({
	label: "Browser Console in Sidebar-Tab",
	id: "ucf-cbbtn-BrowserConsole",
	tooltipText: "Консоль браузера" +"\n"+"\n"+ "ЛКМ: В боковой панели" +"\n"+ "СКМ: В новой вкладке" +"\n"+ "ПКМ: Стандартное меню ",
	localized: false,
	get initCode() {
		this.event = Object.create(null);
		delete this.initCode;
		return this.initCode = Cu.readUTF8URI(Services.io.newURI(
		//	"chrome://widget/content/BrowserConsole/BrowserConsole.js"
			"chrome://user_chrome_files/content/custom_scripts/BrowserConsole.js"
		));
	},
	cbu: {
		types: {
			128: "Bool", boolean: "Bool",
			64: "Int", number: "Int",
			32: "String", string: "String"
		},
		getPrefs(pref) {
			try {
				return Services.prefs[`get${
					this.types[Services.prefs.getPrefType(pref)]
				}Pref`](pref);
			}
			catch {return null;}
		},
		setPrefs(pref, val) {
			Services.prefs[`set${this.types[typeof val]}Pref`](pref, val);
		}
	},
	addDestructor(destructor, context) {
		this._destructors.push({destructor, context});
	},
	addEventListener(...args) {
		var trg = args[3];
		if (!trg) trg = args[3] = this.ownerGlobal;
		trg.addEventListener(...args);
		this._handlers.push(args);
	},
	async onCreated(btn) {
		await btn.delayedStartupPromise;
		btn.setAttribute("image", "chrome://devtools/skin/images/tool-webconsole.svg");
		var win = btn.ownerGlobal;
		btn._handlers = new win.Array();
		btn._destructors = new win.Array();
		win.addEventListener("unload", this, {once: true});
		new win.Function("self,_id,cbu,addDestructor,addEventListener,event,_phase", this.initCode)
			.call(btn, btn, this.id, this.cbu, this.addDestructor.bind(btn), this.addEventListener.bind(btn), this.event, "init");
	},
	handleEvent(e) {
		var btn = e.target.getElementById(this.id);
		for(var args of btn._handlers)
			args.pop().removeEventListener(...args);
		delete btn._handlers;
		for(var {destructor, context} of btn._destructors)
			try {destructor.call(context, "destructor");}
			catch(ex) {Cu.reportError(ex);}
		delete btn._destructors;
	}
});} catch(ex) {Cu.reportError(ex);}


и сама кнопка BrowserConsole.js

Выделить код

Код:

/*Initialization Code*/
({
	title: "Browser Console",
	url: "chrome://devtools/content/webconsole/index.html",

	icon: "chrome://devtools/skin/images/tool-webconsole.svg",
	init() {
		var trg = document.getElementById("browser");
		trg && addEventListener("DOMContentLoaded", this, false, trg);
		var id = "viewBrowserConsoleSidebar";

		var menuitem = this.element("menuitem", {
			type: "checkbox",
			label: this.title,
			id: "menu_browserConsoleSidebar",
			oncommand: `(globalThis.SidebarController || globalThis.SidebarUI).toggle("${id}");`
		}, document.getElementById("viewSidebarMenu"));

		var btn = this.element("toolbarbutton", {
			type: "checkbox",
			label: this.title,
			id: "sidebar-switcher-browserConsole",
			oncommand: `(globalThis.SidebarController || globalThis.SidebarUI).show("${id}");`,
			class: "subviewbutton subviewbutton-iconic"
		});
		document.querySelector(
			parseInt(Services.appinfo.platformVersion) >= 116
			? 'menuitem[id^="sidebar-switcher-"] + menuseparator'
			: 'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator'
		).before(btn);

		(globalThis.SidebarController || globalThis.SidebarUI).sidebars.set(id, {
			url: this.url,
			buttonId: btn.id,
			title: this.title,
			menuId: menuitem.id
		});
		(globalThis.SidebarController || globalThis.SidebarUI).isOpen && (globalThis.SidebarController || globalThis.SidebarUI).currentID == id && (globalThis.SidebarController || globalThis.SidebarUI).selectMenuItem(id);

		var popupset = this.popupset = this.element("popupset", {
			id: `CB${_id.slice(20)}-browserConsole-popupset`
		}, document.documentElement);

		var css = `\
			#${btn.id} > .toolbarbutton-icon,
			#sidebar-box[sidebarcommand="${id}"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
				list-style-image: url(${this.icon});
			}`;
		var str = (cbu.cb || "") + "data:text/css," + encodeURIComponent(css), type = windowUtils.USER_SHEET;
		windowUtils.loadSheetUsingURIString(str, type);

		addDestructor(() => {
			(globalThis.SidebarController || globalThis.SidebarUI).sidebars.delete(id);
			btn.remove(); menuitem.remove(); popupset.remove();
			windowUtils.removeSheetUsingURIString(str, type);
		});
		parseInt(Services.appinfo.platformVersion) < 73 
			&& "insertFTLIfNeeded" in MozXULElement
			&& MozXULElement.insertFTLIfNeeded("toolkit/main-window/editmenu.ftl");

		self.onclick = e => {
			if (e.button == 2) return;
			if (!e.button && !e.shiftKey) return (globalThis.SidebarController || globalThis.SidebarUI).toggle(id);
			var st = gBrowser.selectedTab, tab;
			if (!e.ctrlKey) tab = gBrowser.visibleTabs.find(tab => {
				var br = gBrowser.getBrowserForTab(tab);
				return br.currentURI.spec == this.url || (
					"_cachedCurrentURI" in br
					&& br._cachedCurrentURI.spec == this.url
				)
			});
			if (tab == st) return;
			if (!tab) tab = gBrowser.addTrustedTab(this.url);
			gBrowser.moveTabTo(tab, st._tPos + 1);
			gBrowser.selectedTab = tab;
		}
		for(var br of gBrowser.browsers) {
			if (br.currentURI.spec != this.url) continue;
			var doc = br.contentDocument;
			if (doc && (
				doc.readyState == "complete" ||
				doc.readyState == "interactive"
			))
				doc.querySelector(
					"main#app-wrapper,div#output-container"
				).childElementCount
					? this.defineDocPopupset(doc)
					: this.handleEvent({target: doc});
		}
		if (!btn.hasAttribute("checked")) return;
		var doc = (globalThis.SidebarController || globalThis.SidebarUI).browser.contentDocument;
		if (doc.documentURI != this.url) btn.doCommand();
		else if (doc.readyState == "complete") this.defineDocPopupset(doc);
	},
	defineDocPopupset(doc) {
		this.definePopupset(
			doc.querySelector("popupset") ||
			doc.documentElement.appendChild(doc.createXULElement("popupset"))
		);
	},
	get definePopupset() {
		var append = customElements.get("menuitem")
			? popup => {
				this.popupset.appendChild(popup);
				popup.setAttribute("oncommand", "event.target.cmd()");
				for(var node of [...popup.querySelectorAll("menuitem")]) {
					var menuitem = document.importNode(node, true);
					menuitem.cmd = Services.els.getListenerInfoFor(node)
						.find(inf => inf.type == "command").listenerObject;
					popup.replaceChild(menuitem, node);
				}
				return popup;
			}
			: this.popupset.appendChild.bind(this.popupset);

		delete this.definePopupset;
		return this.definePopupset = popupset => popupset.appendChild = append;
	},
	lss: Services.scriptloader.loadSubScript,
	async handleEvent({target: doc}) {
		if (!doc || doc.documentURI != this.url) return;

		var win = doc.defaultView;
		if (
			win.docShell.name == "toolbox-panel-iframe-webconsole" ||
			doc.DOMContentLoadedEventHandled
		)
			return;
		doc.DOMContentLoadedEventHandled = true;
		if (this instanceof XULElement) // Custom Buttons
		"custombuttonsConsole" in win || this.lss(
			"chrome://custombuttons/content/consoleOverlay.js", win
		);
		var cw = win.isChromeWindow, bc;
		if (!cw) {
			if (doc.visibilityState == "hidden") {
				var {focus} = win;
				win.focus = () => win.focus = focus;
			}
			doc.title = this.title;
			var link = doc.createElement("link");
			link.setAttribute("rel", "shortcut icon");
			link.setAttribute("href", this.icon);
			doc.head.prepend(link);

			var br = win.docShell.chromeEventHandler;
			var cmAttr = br.getAttribute("contextmenu");
			cmAttr && br.removeAttribute("contextmenu");
			win.onbeforeunload = () => {
				if (bc) bc.chromeWindow = {close() {}};
				cmAttr && br.setAttribute("contextmenu", cmAttr);
			}
		}
		bc = await this.console(win);
	},
	get console() {
		// Bug 1579090 - WebConsole should handle ObjectFront when needed (for non-primitive Console API args + Evaluation results) (Firefox 73+)
		https://bugzilla.mozilla.org/show_bug.cgi?id=1579090
		var vers = parseInt(Services.appinfo.platformVersion);
		this.bug1579090 = vers > 73 || (vers == 73 && !(
			"_setCurrentURI" in gBrowser.selectedBrowser // https://bugzil.la/1431214
		));
		delete this.console;
		return this.console = this.bug1579090 ? async win => {
			//await this.loader.bcm._browserConsoleInitializing;
			var key = "CBBrowserConsolePromise", {wins} = this.loader;
			win[key] = win.Object.create(null);
			win[key].promise = new win.Promise(resolve => win[key].resolve = resolve);
			win[key].destroy = () => {
				win[key].resolve();
				delete win[key];
				wins.splice(wins.indexOf(win), 1);
			}
			wins.unshift(win);
			wins.length > 1 && await wins[1][key].promise;

			var bc = await new this.loader.console(win).toggleBrowserConsole();
			win[key].destroy();
			return bc;

		} : async win => {
			this.loader.Services.ww.wins.push(win);
			return await new this.loader.HUDService().toggleBrowserConsole();
		}
	},
	get loader() {
		delete this.loader;
		var url = parseInt(Services.appinfo.platformVersion) >= 96
			? "resource://devtools/shared/loader/Loader.jsm"
			: "resource://devtools/shared/Loader.jsm";
		if (this.bug1579090) {
			var g = Cu.import(url, {}), key = "CBBrowserConsoleLoader";
			addDestructor(reason => reason[5] == e && key in g && g[key].destroy());
			if (key in g) return this.loader = g[key];
			var {BrowserConsoleManager} = g.require(
				"devtools/client/webconsole/browser-console-manager"
			);
			return this.loader = g[key] = {
				wins: [],
				bcm: BrowserConsoleManager,
				console: class extends BrowserConsoleManager.constructor {
					constructor(win) {
						super();
						this.win = win;
					}
					openWindow() {
						var {win} = this;
						win.addEventListener("unload", () => {
							win.CBBrowserConsolePromise &&
								win.CBBrowserConsolePromise.destroy();
							this.closeBrowserConsole.call(this);
						}, {once: true});
						delete this.win;
						return win;
					}
				},
				destroy() {
					this.wins = null;
					delete g[key];
				}
			};
		}
		var id = _id + "-browser-console";
		url += "?" + id;
		var loader = {exports: {}}, nsvo = Cu.import(url, loader);
		addDestructor(reason => reason[5] == "e" && Cu.unload(url));

		if (id in nsvo) return this.loader = nsvo[id];

		var dir = "resource://devtools/client/webconsole/";
		try {
			this.lss(dir + "hudservice.js", loader);
		} catch(ex) {
			// Bug 1570320 - Rename hudservice.js into browser-console-manager.js (Firefox 70+)
			// https://bugzilla.mozilla.org/show_bug.cgi?id=1570320
			this.lss(dir + "browser-console-manager.js", loader);
			this.lss("data:,this.HUDService=BrowserConsoleManager", loader);
		}
		var e = new CustomEvent("DOMContentLoaded", {bubbles: false}), ww = loader.Services.ww;
		loader.Services.ww = Cu.getGlobalForObject(nsvo).Object.create(ww, {
			wins: {value: []},
			openWindow: {value: function() {
				var win = this.wins.shift();
				win.setTimeout(() => win.dispatchEvent(e), 0);
				return win;
			}}
		});
		return this.loader = nsvo[id] = loader;
	},
	element(name, attrs, parent) {
		var node = document.createXULElement(name);
		for(var attr in attrs) node.setAttribute(attr, attrs[attr]);
		parent && parent.append(node);
		return node;
	}
}).init();
this.tooltipText = "Консоль браузера" +"\n"+"\n"+
                   "ЛКМ: В боковой панели" +"\n"+
                   "СКМ: В новой вкладке" +"\n"+
                   "ПКМ: Стандартное меню "


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

Отсутствует

 

№1718713-06-2024 08:34:22

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 481
UA: Firefox 127.0

Re: Custom Buttons

Farby спасибо работает

Отсутствует

 

№1718814-06-2024 10:21:21

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 112
UA: Firefox 127.0

Re: Custom Buttons

Еще один скрипт "Browser Toolbox"

скрытый текст
(function() {

    if (location != 'chrome://browser/content/browser.xhtml')
        return;

    try {
        CustomizableUI.createWidget({
            id: 'browser-toolbox-button',
            type: 'custom',
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onBuild: function(aDocument) {
                var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var props = {
                    id: 'browser-toolbox-button',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: 'Browser Toolbox',
                    tooltiptext: 'Open\n"Browser Toolbox"',
                    style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)',
                    oncommand: '(' + onCommand.toString() + ')()'
                };
                for (var p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
        CustomizableUI.registerToolbarNode(tb);
       } catch(e) { }; 

    function onCommand() {
        var document = event.target.ownerDocument;
        if (!document.getElementById('menu_browserToolbox')) {
            let { require } = Cu.import("resource://devtools/shared/loader/Loader.jsm", {});
            require("devtools/client/framework/devtools-browser");
        };
        document.getElementById('menu_browserToolbox').click();
    };

})();

Отсутствует

 

№17189Вчера 04:08:29

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 450
UA: Firefox 124.0

Re: Custom Buttons

Dumby пишет

Не просто «при открытии закладки», а при открытии закладки в новой вкладке (не в текущей).

Не могу подключить select_open_bookmark ! Его надо в scriptschrome: [ChromeOnly] ?
На [firefox] версии 97 ничего не происходит, на [firefox] 124 ошибка в консоли: gBrowser is undefined
Как я понял - открываю закладку, выбираю другую вкладку, снова открываю эту же закладку и ранее открытая не выбирается…

Отсутствует

 

№17190Вчера 19:46:08

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

Re: Custom Buttons

Dobrov пишет

Его надо в

Код CB-кнопок исполняется в окнах браузера.

На [firefox] версии 97 ничего не происходит

Ага, на 3.6.28 тоже не работает.
На 97 наверно нужен loadURI вместо fixupAndLoadURIString

на [firefox] 124 ошибка в консоли: gBrowser is undefined

Значит код исполняется слишком рано.
Можно сделать обёртку асинхронной, и второй строкой написать
await delayedStartupPromise;

Как я понял - открываю закладку, выбираю другую вкладку, снова открываю эту же закладку

Да, в новой вкладке, и только через некоторые стандартные действия.

Отсутствует

 

Board footer

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