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

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

№1590122-09-2021 13:17:21

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

Dumby пишет

egorsemenov06
Не понял.
Этот код и создаёт «отдельные две кнопки».

Да создает.сделайте пожалуйста что бы на одну кнопку был один код т.е. там  в одном коде две кнопки а надо надо чтобы на каждую кнопку был код отдельно если возможно

Отсутствует

 

№1590222-09-2021 15:21:08

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

Re: Custom Buttons

egorsemenov06
А, теперь понял, код разделить.
Хорошо, попробую. Ну так, чисто формально.

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

Выделить код

Код:

(async id => CustomizableUI.createWidget({
	label: "Открыть страницу в другом браузере",
	image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg==",
	tooltiptext: [
		"Л: Открыть меню с браузерами",
		"С: Добавить в меню новый браузер",
		"\nФункции кликов мыши для меню:",
			"\tЛ: Открыть страницу",
			"\tС: Добавить разделитель",
			"\tП: Удалить пункт меню или разделитель",
			"\tCtrl+П: Изменить название пункта меню",
		"Перетаскиванием можно передвигать пункты меню или разделители"
	].join("\n"),

	id,
	localized: false,
	onCreated(btn) {
		btn.owner = this;
		btn.type = "menu";
		btn.setAttribute("image", this.image);
		btn.openPopup = btn.openMenu;
		btn.openMenu = this.openMenu;

		var popup = btn.appendChild(btn.ownerDocument.createXULElement("menupopup"));
		popup.setAttribute("context", "");
		popup.setAttribute("oncommand", "owner.command(event)");

		btn.onauxclick = this.auxclick;
		popup.setAttribute("onpopupshowing", "this.shouldRebuild && owner.rebuild(this)");
		popup.ondragstart = this.dragstart;
		popup.shouldRebuild = true;

		var {openDelay, closeDelay} = this;
		this.autoOpenCloseFeature(btn.ownerGlobal, btn, openDelay, closeDelay);
	},
	file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
	openMenu(...args) {
		if (this.parentNode != this.domParent) {
			this.domParent = this.parentNode;
			this.owner.setPopupPosition(this);
		}
		this.openPopup(...args);
	},
	setPopupPosition(node) {
		if (node.matches(".widget-overflow-list > :scope"))
			var pos = "after_start";
		else var win = node.ownerGlobal, {width, height, top, bottom, left, right} =
			node.closest("toolbar").getBoundingClientRect(), pos = width > height
				? `${win.innerHeight - bottom > top ? "after" : "before"}_start`
				: `${win.innerWidth - right > left ? "end" : "start"}_before`;
		node.firstChild.setAttribute("position", pos);
	},
	// https://github.com/Infocatcher/Custom_Buttons/blob/master/code_snippets/autoOpenCloseMenu.js
	// Automatically open menu on mouse over (and hide it on mouse out)
	autoOpenCloseFeature(win, btn, openDelay = 200, closeDelay = 350) {
		var _openTimer = 0;
		var _closeTimer = 0;
		btn.onmouseover = function(e) {
			win.clearTimeout(_closeTimer);
			if(e.target == btn && closeOtherMenus()) {
				btn.open = true;
				return;
			}
			_openTimer = win.setTimeout(function() {
				btn.open = true;
			}, openDelay);
		};
		btn.onmouseout = function(e) {
			win.clearTimeout(_openTimer);
			_closeTimer = win.setTimeout(function() {
				if(!isContextOpened())
					btn.open = false;
			}, closeDelay);
		};
		function closeOtherMenus() {
			return win.Array.prototype.some.call(
				btn.parentNode.getElementsByTagName("*"),
				function(node) {
					if(
						node != btn
						&& win.XULElement.isInstance(node)
						// See https://github.com/Infocatcher/Custom_Buttons/issues/28
						//&& node.boxObject
						//&& node.boxObject instanceof Components.interfaces.nsIMenuBoxObject
						&& "open" in node
						&& node.open
						&& node.getElementsByTagName("menupopup").length
					) {
						node.open = false;
						return true;
					}
					return false;
				}
			);
		}
		function isContextOpened() {
			return inBtn(win.document.popupNode);
		}
		function inBtn(node) {
			for(; node; node = node.parentNode)
				if(node == btn)
					return true;
			return false;
		}
	},
	get markup() {
		try {var data = Cu.readUTF8URI(Services.io.newURI(
			`chrome://user_chrome_files/content/custom_scripts/${id}-data.txt`
		)).split("\n").filter(line => /\S/.test(line));}
		catch {var data = [
			"D:\\Програмное обеспечение\\Флешка загрузочная\\Windows 7 SP1\\Программы\\ChromePortable\\ChromePortable.exe>Chrome",
			"D:\\Програмное обеспечение\\Флешка загрузочная\\Windows 7 SP1\\Программы\\Opera_1217\\Opera\\launcher.exe>Opera",
			"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe",
			"D:\\Програмное обеспечение\\Флешка загрузочная\\Windows 7 SP1\\Программы\\Microsoft Edge\\ProgramFiles\\msedge.exe",
		];}
		delete this.markup;
		return this.markup = this.dataToMarkup(data);
	},
	setMarkup(popup) {
		this.markup = popup.innerHTML;
		for(var {node} of CustomizableUI.getWidget(id).instances)
			if (node.firstChild != popup) node.firstChild.shouldRebuild = true;
		this.write(Array.from(popup.children,
			node => node.hasAttribute("value")
				? node.tooltipText + (node.value == "true" ? ">" + node.label : "")
				: "separator"
		).join("\n"));
	},
	dataToMarkup(data) {
		var markup = "";
		for(var str of data) markup += str == "separator"
			? "<menuseparator/>" : this.strToMenuitem(str);
		return markup;
	},
	repl: [/^./, c => c.toUpperCase()],
	strToMenuitem(str, ind = str.lastIndexOf(">")) {
		var name, val, path = str;
		if ((val = ind != -1))
			path = str.slice(0, ind),
			name = str.slice(ind + 1);
		else
			this.file.initWithPath(path),
			name = this.file.leafName.split(".")
				.shift().replace(...this.repl);

		return `<menuitem label="${name}" tooltiptext="${path}" value="${val}"`
			+ ` class="menuitem-iconic" image="moz-icon://file://${path}"/>`;
	},
	append(popup, xul = this.markup) {
		popup.append(popup.ownerGlobal.MozXULElement.parseXULToFragment(xul));
	},
	rebuild(popup) {
		popup.textContent = "";
		this.append(popup);
		delete popup.shouldRebuild;
	},
	auxclick(e) {
		var trg = e.target, popup = this.firstChild;
		if (trg == this && e.button == 1)
			return this.owner.addMenuitem(popup);

		else if (trg.parentNode != popup) return;

		if (e.button == 1) {
			var up = e.screenY < trg.screenY + trg.clientHeight/2;
			up = up ? trg.previousSibling : !trg.nextSibling;
			trg[up ? "before" : "after"](
				trg.ownerDocument.createXULElement("menuseparator")
			);
		} else {
			if (e.ctrlKey) {
				if (trg.nodeName.endsWith("r")) return;

				var name = this.owner.prompt(
					"Введите другое название пункта",
					trg.label, trg.ownerGlobal
				);
				if (name && name != trg.label)
					trg.label = name,
					trg.value = true;
			}
			else trg.remove();
		}
		this.owner.changeMarkup(popup);
	},
	prompt(msg, value, domWin) {
		var res = {value};
		return Services.prompt.wrappedJSObject.pickPrompter({
			domWin, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW
		}).nsIPrompt_prompt(this.label, msg, res, null, {})
			? res.value : null;
	},
	addMenuitem(popup) {
		var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
		fp.appendFilters(fp.filterApps);
		fp.init(popup.ownerGlobal, "Укажите путь к программе", fp.modeOpen);
		fp.open(res => {
			if (res == fp.returnOK)
				this.append(popup, this.strToMenuitem(fp.file.path, -1)),
				this.setMarkup(popup);
		});
	},
	changeMarkup(popup) {
		popup.state == "open"
			? popup.addEventListener("popuphidden", this, {once: true})
			: this.setMarkup(popup);
	},
	handleEvent(e) {
		this[e.type](e);
	},
	popuphidden(e) {
		this.setMarkup(e.target);
	},
	dragstart(e) {
		var trg = e.target;
		if (trg.parentNode.nodeName != "menupopup") return;

		var {owner} = this.parentNode;
		var pn = trg.flattenedTreeParentNode;
		owner.dragData = {trg, pn, ns: trg.nextSibling};

		trg.style.cssText = "font-weight: bold; color: red;"
			+ "outline: 2px solid red; outline-offset: -2px;"
				.replace(/;/g, " !important;");
		var win = trg.ownerGlobal;
		win.setCursor("grabbing");
		pn.addEventListener("mousemove", owner);
		win.addEventListener("mouseup", owner, {once: true});
	},
	mousemove(e) {
		var trg = e.target, dtrg = this.dragData.trg;
		if (trg == dtrg) return;

		e.movementY > 0
			? trg.nextSibling != dtrg && trg.after(dtrg)
			: trg.previousSibling != dtrg && trg.before(dtrg);
	},
	mouseup(e) {
		e.preventDefault();
		var {trg, pn, ns} = this.dragData;
		delete this.dragData;
		trg.removeAttribute("style");
		trg.ownerGlobal.setCursor("auto");
		pn.removeEventListener("mousemove", this);
		trg.nextSibling != ns && this.changeMarkup(trg.parentNode);
	},

	command(e) {
		if (e.button) return;
		this.file.initWithPath(e.target.tooltipText);
		if (this.file.exists()) {
			var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
			process.init(this.file);
			return process.run(false, [e.view.gBrowser.currentURI.spec], 1);
		}
		Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
			.showAlertNotification(this.image, this.label, "Файл не существует");
	},
	write(txt) {
		var file = Services.dirsvc.get("UChrm", Ci.nsIFile), CC = Components.Constructor;
		["user_chrome_files", "custom_scripts", id + "-data.txt"].forEach(file.append);
		var te = new (Cu.getGlobalForObject(Cu).TextEncoder)();
		var fos = CC("@mozilla.org/network/file-output-stream;1", "nsIFileOutputStream", "init")
			// MODE_{WRONLY, CREATE, TRUNCATE}, PERMS_FILE
			.bind(null, file, 0x02 | 0x08 | 0x20, 0o644, 0);
		var bos = CC("@mozilla.org/binaryoutputstream;1", "nsIBinaryOutputStream", "setOutputStream");

		(this.write = txt => {
			var stream = new fos();
			try {new bos(stream).writeByteArray(te.encode(txt));}
			catch(ex) {Cu.reportError(ex);}
			finally {stream.close();}
		})(txt);
	}
}))("ucf-cbbtn-OpenPageInOtherBrowser");


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

Выделить код

Код:

(async () => CustomizableUI.createWidget({
	label: "Открыть внешнее win приложение",
	image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMAAwQAKCImDyo4IWkYaBzFQ6xI8FG/V/VCq0jcGGQbkwAQACQAAAAAAAIAAwAAAAAAAAAAAAAAAAEAAAIAAgIAQy4iYp9YOuZUah3/QMJQ/nfxgP97+Yb/f/+L/m/7ev87v0L1BzwIawAAAAAAAgADAAAAAAEAAAIAAAAAQR4Ki7pwNP//tG79aXQg/CGwM/tL3lP+SeJU/krmVf5I5lT8ROZQ/SjIMf8DQgWFAAAAAAACAAMAAAAAMRoKX5hKHP/qoVT69JtU/WVsGP8RmyP/LMAz/ynHM/4ozTP8Jc4w+x/KK/sbxyn7Daoa/wAlA1QAAAEAAgAAA2o5G9GhVyT/z305/N54Nv9eWxTyAnMR6Qp+DvsIig//CpQR/wucE/8KnQ//CpkG/QedAf8FZADWAwIACigYIklrMln7h0VB/6dcJPvBaCz/XC8RlgABAAACDgAlABUANAAfAUsAKABeAz8RlAhfUvkDZnP/CFtw+gcXKklSLEeVlUiB/6VamPykYGD7o1wl/2A4H5YAAAAAAgEBBAAAAAAAAQMEAAAAAAUoVmcHcfT/AIL5+QCK//8BOZ2rXjJRsJtOhf/SgLr9zoK++5hbW/9AKhaGAAAAAAICAQYAAQACAAMDBwAAAAABLlprD4///wqh9/oJsf//Al7M1FsxT6ucUYf/1Iq//Oyd1vzYkMf/X0FVhQAAAAADAgMEAAAAAAACBAQBAAAAAC1aYRSQ//8lpPr6Irj//wtt1t5GJT2DmlCF/82Juvz2reH/8Kbb/eej1P9jR1t+AAAAAAMCAwQBAwUGAAAAAAYkV2wjkv//PLP7+jzE//8VaMXMHhAaP5FLff+4d6b++rno//iz5P/3suP88rLg/2hPYn8AAAAAAQAAAAgPYW1bXeD/PJL0/1DB/fxSy///EkiRlwAAAABqOFzBp16S/+ev2Pz/we///b7s//u86vr7wev/dFxfcgAJYmhxeP//lJH+/juS+/5q0f/+V7n4/AASODwAAAAAHA4YP5NMgP+6fKj9/Mzw/f3H8/7/y/X/7LvU811Ywd54gPv8r6z//puZ/P1Akff5g+L//y5hmZ8AAAAAAgECAwAAAAA1Gy5vmlGG/8iOuP3/1vX/8sfe811YxNZ6g/f5ubb9/a6u+/uvrfz8TZPt/1GFvMcAAQwNAQAAAAAAAAACAQEDAAAAACoVJVh/QW3umWuP7V5fzeSMk/j9zcn//7+//v7Av///o6Pz+yU2XH0AAwYKAQAAAAAAAQEAAAAAAAAAAAEBAQMAAAAADwkHFAcCKUsJGb3VO0vn9lRf5/RdZMzXRkmTmw4OKTUAAAAAAgIDAwABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
	data: [
		["QTranslate", "C:\\Users\\Роман\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\8sr9ujrx.default-release\\_QTranslate\\QTranslate.exe"],
		["Explorer", "C:\\windows\\explorer.exe"],
		null,
		["Cmd Prompt", "C:\\windows\\system32\\cmd.exe"],
		["Media Player", "C:\\Program Files\\Windows Media Player\\wmplayer.exe"],
		["Task Manager", "C:\\windows\\system32\\taskmgr.exe"],
		["Control Panel", "C:\\windows\\system32\\control.exe"],
		null,
		["Notepad", "C:\\windows\\notepad.exe"],
		["Calculator", "C:\\windows\\system32\\calc.exe"],
		["Virtual Keyboard", "C:\\windows\\system32\\OSK.exe"],
		["Character table", "C:\\windows\\system32\\charmap.exe"]
	],
	id: "ucf-cbbtn-openExternalWinApplication",
	localized: false,
	onCreated(btn) {
		btn.owner = this;
		btn.type = "menu";
		btn.setAttribute("image", this.image);
		btn.openPopup = btn.openMenu;
		btn.openMenu = this.openMenu;

		var popup = btn.appendChild(btn.ownerDocument.createXULElement("menupopup"));
		popup.setAttribute("context", "");
		popup.setAttribute("oncommand", "owner.command(event)");

		btn.tooltipText = btn.label;
		btn.ownerGlobal.Object.defineProperty(btn, "domParent", this);

		var {openDelay, closeDelay} = this;
		this.autoOpenCloseFeature(btn.ownerGlobal, btn, openDelay, closeDelay);
	},
	file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
	openMenu(...args) {
		if (this.parentNode != this.domParent) {
			this.domParent = this.parentNode;
			this.owner.setPopupPosition(this);
		}
		this.openPopup(...args);
	},
	setPopupPosition(node) {
		if (node.matches(".widget-overflow-list > :scope"))
			var pos = "after_start";
		else var win = node.ownerGlobal, {width, height, top, bottom, left, right} =
			node.closest("toolbar").getBoundingClientRect(), pos = width > height
				? `${win.innerHeight - bottom > top ? "after" : "before"}_start`
				: `${win.innerWidth - right > left ? "end" : "start"}_before`;
		node.firstChild.setAttribute("position", pos);
	},
	// https://github.com/Infocatcher/Custom_Buttons/blob/master/code_snippets/autoOpenCloseMenu.js
	// Automatically open menu on mouse over (and hide it on mouse out)
	autoOpenCloseFeature(win, btn, openDelay = 200, closeDelay = 350) {
		var _openTimer = 0;
		var _closeTimer = 0;
		btn.onmouseover = function(e) {
			win.clearTimeout(_closeTimer);
			if(e.target == btn && closeOtherMenus()) {
				btn.open = true;
				return;
			}
			_openTimer = win.setTimeout(function() {
				btn.open = true;
			}, openDelay);
		};
		btn.onmouseout = function(e) {
			win.clearTimeout(_openTimer);
			_closeTimer = win.setTimeout(function() {
				if(!isContextOpened())
					btn.open = false;
			}, closeDelay);
		};
		function closeOtherMenus() {
			return win.Array.prototype.some.call(
				btn.parentNode.getElementsByTagName("*"),
				function(node) {
					if(
						node != btn
						&& win.XULElement.isInstance(node)
						// See https://github.com/Infocatcher/Custom_Buttons/issues/28
						//&& node.boxObject
						//&& node.boxObject instanceof Components.interfaces.nsIMenuBoxObject
						&& "open" in node
						&& node.open
						&& node.getElementsByTagName("menupopup").length
					) {
						node.open = false;
						return true;
					}
					return false;
				}
			);
		}
		function isContextOpened() {
			return inBtn(win.document.popupNode);
		}
		function inBtn(node) {
			for(; node; node = node.parentNode)
				if(node == btn)
					return true;
			return false;
		}
	},
	configurable: true,
	get() {
		delete this.domParent;
		var doc = this.ownerDocument, df = doc.createDocumentFragment();
		for(var arr of this.owner.data) {
			if (!arr) {
				df.append(doc.createXULElement("menuseparator"));
				continue;
			}
			var menuitem = df.appendChild(doc.createXULElement("menuitem"));
			menuitem.className = "menuitem-iconic";
			menuitem.setAttribute("label", arr[0]);
			menuitem.setAttribute("image", "moz-icon://file://" + arr[1]);
		}
		this.firstChild.append(df);
	},
	command(e) {
		this.file.initWithPath(e.target.getAttribute("image").slice(18));
		this.file.launch();
	}
}))();

Отредактировано Dumby (22-09-2021 15:32:19)

Отсутствует

 

№1590322-09-2021 15:36:26

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

Dumby пишет

Ну так, чисто формально.

Спасибо Вам Dumby

Отсутствует

 

№1590422-09-2021 17:44:23

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

Re: Custom Buttons

egorsemenov06
Подскажите, как удалить эту кнопку. А то там нет такого пункта меню
f7ae67a06493b394421b84ab95dd2116.png

или отредактировать

Отредактировано vending_machine (22-09-2021 18:06:26)

Отсутствует

 

№1590522-09-2021 18:15:49

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

vending_machine пишет

egorsemenov06
Подскажите, как удалить эту кнопку. А то там нет такого пункта меню

или отредактировать

Если Вы об этом "Л: Открыть меню с браузерами",откройте в Notepad++ и удалите эту строку.

Отсутствует

 

№1590622-09-2021 18:19:39

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

Re: Custom Buttons

egorsemenov06 пишет
vending_machine пишет

egorsemenov06
Подскажите, как удалить эту кнопку. А то там нет такого пункта меню

или отредактировать

Если Вы об этом "Л: Открыть меню с браузерами",откройте в Notepad++ и удалите эту строку.

Кнопку как удалить, через какие клавиши? Вторая удаляется, эта — нет.

Отредактировано vending_machine (22-09-2021 18:19:52)

Отсутствует

 

№1590722-09-2021 18:37:40

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

vending_machine пишет

Кнопку как удалить, через какие клавиши? Вторая удаляется, эта — нет.

я не пойму какую кнопку удалить?

Отсутствует

 

№1590822-09-2021 18:40:27

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

Re: Custom Buttons

egorsemenov06 пишет
vending_machine пишет

Кнопку как удалить, через какие клавиши? Вторая удаляется, эта — нет.

я не пойму какую кнопку удалить?

Из этой кнопки, кнопку открытия в другом браузере.
bae2c0d2476f158195fcdf7f1702cec7.png

Отредактировано vending_machine (22-09-2021 18:41:40)

Отсутствует

 

№1590922-09-2021 18:44:07

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

vending_machine пишет
egorsemenov06 пишет
vending_machine пишет

Кнопку как удалить, через какие клавиши? Вторая удаляется, эта — нет.

я не пойму какую кнопку удалить?

Из этой кнопки, кнопку открытия в другом браузере.
https://s1.hostingkartinok.com/uploads/ … 02cec7.png

https://forum.mozilla-russia.org/viewto … 31#p794931 Dumby ее же разделил

Отредактировано egorsemenov06 (22-09-2021 18:48:24)

Отсутствует

 

№1591022-09-2021 18:50:42

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

Re: Custom Buttons

egorsemenov06
У кнопки обычно, даже всегда, есть пункт удалить кнопку. И вот, как же всё-таки удалить кнопку открывающую страницу в другом браузере. Вторая из двух удаляется благополучно, оставляя эту.
А у этой нет такого пункта в меню.

f7ae67a06493b394421b84ab95dd2116.png


Dumby ее же разделил

У меня разделённые не работают

Отсутствует

 

№1591122-09-2021 18:58:02

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 256
UA: Firefox 92.0

Re: Custom Buttons

vending_machine пишет

egorsemenov06
У кнопки обычно, даже всегда, есть пункт удалить кнопку. И вот, как же всё-таки удалить кнопку открывающую страницу в другом браузере. Вторая из двух удаляется благополучно, оставляя эту.
А у этой нет такого пункта в меню.

https://s1.hostingkartinok.com/uploads/ … dd2116.png


Dumby ее же разделил

У меня разделённые не работают

у меня это для UCF файлы а не CB buttons и у меня вообще нет пункта удалить кнопку

Отсутствует

 

№1591223-09-2021 12:22:21

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 254
UA: Firefox 52.0

Re: Custom Buttons

Dumby
Возможно ли как-то отключить обновление иконок всех закладок при импорте закладок из файла?


Дело в том, что при импорте закладок из файла (в моём случае из html-файла), Firefox начинает ломиться в инет и обновлять иконки всех закладок.
А если учесть, что у меня более 5400 закладок, то Firefox начинает создавать тысячи запросов на разные IP.
Как бы отключить такое поведение Firefox?


Метод отключения не важен - с помощью СВ, UCF или через config.js (лучше бы через config.js).


P.S. Для Firefox 91 ESR.


«The Truth Is Out There»

Отсутствует

 

№1591323-09-2021 16:04:42

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

Re: Custom Buttons

unter_officer пишет

лучше бы через config.js

Неужели это такое частое действие?
Не лучше ли: перевёл лису в оффлайн и импортируй.


А код, даже не знаю, наверно так попробовать
(закомментированое можно расскомментировать,
если insertFaviconForNode() может использоваться сторонним кодом).

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

Выделить код

Код:

(async url => {
	var nsvo = Cu.import(url, {}), key = "insertFaviconForNode", func = nsvo[key];
	nsvo[key] = node => {
		if (
			node.iconUri?.startsWith("http")
			//&& Components.stack.caller.filename == url
		)
			node.iconUri = null;
		func(node);
	}
})("resource://gre/modules/BookmarkHTMLUtils.jsm");

Отсутствует

 

№1591423-09-2021 19:01:46

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 254
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Неужели это такое частое действие?

Да. Очень много приходится работать с закладками и потом переносить на другой комп.
Пару раз синхронизация убила мне все закладки (хорошо, что бэкап был сделан), поэтому от синхронизации пришлось отказаться от слова совсем, и использовать экспорт/импорт.


Dumby пишет

Не лучше ли: перевёл лису в оффлайн и импортируй.

Так и делал, но жутко надоело.


Dumby пишет

наверно так попробовать

Код работает, но при импорте из файла в консоль сыплется большое количество одинаковых ошибок:

Выделить код

Код:

Failed to import favicon data:[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIFaviconService.replaceFaviconDataFromDataURL]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: resource://gre/modules/BookmarkHTMLUtils.jsm :: insertFaviconForNode :: line 1066"  data: no]          BookmarkHTMLUtils.jsm:1081

Хотя, как по мне, то лучше пусть ошибки в консоли, чем тысячи запросов в минуту в инет.


Большое спасибо.

Отредактировано unter_officer (23-09-2021 19:27:59)


«The Truth Is Out There»

Отсутствует

 

№1591523-09-2021 22:08:45

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

Re: Custom Buttons

unter_officer пишет

Код работает, но в консоль сыплется большое количество одинаковых ошибок

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


Можно попробовать вырезать репортинг.
Вот, переписал так, импортирую и ... тишина.

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

Выделить код

Код:

(async url => {
	var nsvo = Cu.import(url, {});
	var code = `eval(\`${nsvo.insertFaviconForNode}\`);`
		.replace(
			".iconUri",
			'$& || node.iconUri.startsWith("http")'
				//+ `\n    && Components.stack.caller.filename == "${url}"\n  `
		)
		.replace(/(catch \(ex\) {).+?}/s, "$1}");

	var subst = "bookmarks-html-import-meds-tmp-script";
	var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
	var rph = ios.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
	rph.setSubstitution(subst, ios.newURI("data:," + encodeURIComponent(code)));
	Cc["@mozilla.org/moz/jssubscript-loader;1"]
		.getService(Ci.mozIJSSubScriptLoader).loadSubScript("resource://" + subst, nsvo);
	rph.setSubstitution(subst, null);
	
})("resource://gre/modules/BookmarkHTMLUtils.jsm");

Отсутствует

 

№1591623-09-2021 22:16:08

Senflex
Участник
 
Группа: Members
Зарегистрирован: 18-07-2021
Сообщений: 28
UA: Chrome 93.0

Re: Custom Buttons

Уважаемые форумчане! Как запустить cmd с командой, к примеру pause?
Можно ли это сделать?
Нужно запустить через CB.

384528d7375c.png

Отредактировано Senflex (23-09-2021 22:17:05)

Отсутствует

 

№1591723-09-2021 22:38:33

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 254
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Вот, переписал так, импортирую и ... тишина.

То, что надо. Огромное спасибо!


«The Truth Is Out There»

Отсутствует

 

№1591824-09-2021 11:18:12

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 150
UA: Firefox 92.0

Re: Custom Buttons

Почему это не работает ? goDoCommand("cmd_closeWindow");

Добавлено 24-09-2021 11:25:03
Senflex
Команда пауза в батнике

скрытый текст
ping -n 1 -w 1000 192.168.254.254 >nul
Где 1000 -миллесекунды
Код для СВ . Батник - в профиле !
скрытый текст

Выделить код

Код:

var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
         file.initWithPath(file.path + "\\твой.cmd");
file.launch();

Отредактировано ВВП (24-09-2021 11:25:03)

Отсутствует

 

№1591924-09-2021 12:02:18

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

Re: Custom Buttons

ВВП пишет

Почему это не работает ? goDoCommand("cmd_closeWindow");

Потому, что для этой команды нет контроллера.
Можно запускать её код напрямую:
BrowserTryToCloseWindow();


ВВП пишет

Батник - в профиле !

Хмм, а мне показалось, что спрашивалось запускать
не «твой.cmd», а непосредственно сам cmd.exe, ну типа так

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

Выделить код

Код:

var cmd = Services.dirsvc.get("SysD", Ci.nsIFile);
cmd.append("cmd.exe");

var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(cmd);

var args = ["/k", "echo Как видно?", "&&", "pause"];
process.runwAsync(args, args.length);

Отсутствует

 

№1592024-09-2021 16:44:08

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 150
UA: Firefox 92.0

Re: Custom Buttons

Dumby
BrowserTryToCloseWindow(); Этот код в кн. плеер надо ,хотя бы на левый клик. Плеер запустился, а браузер - закрылся...И никак толком..

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

Выделить код

Код:

(func => {
	var sysPlayerName = "Pot Player";
	var path = "D:\\PotPlayer\\PotPlayerMini64.exe";
	var videoMoved = "Видео перенесено в " + sysPlayerName;
	var noFound = "Не найдено видео на странице, доступное для переноса в " + sysPlayerName;

	
	this.label = "Открыть видео в " + sysPlayerName;
	this.tooltipText = "Л: Видео в плеер\nП: Видео из Clipboard";

	this._handleClick = () => {
		var msgName = _id + ":Player";
		var listener = ({data}) => data ? run([data]) : notify();
		messageManager.addMessageListener(msgName, listener);
		addDestructor(() => messageManager.removeMessageListener(msgName, listener));

		var url = "data:charset=utf-8," + encodeURIComponent(
			`(${func})()`.replace("MSG_NAME", msgName)
				.replace("VIDEO_MOVED", encodeURIComponent(videoMoved))
				.replace("CONFIRM", encodeURIComponent("Открыть ссылку в плеере ?"))
		);
		(this._handleClick = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))();
                
	}
	this.onauxclick = e => e.button != 1 || gShowPopup(this);
	this.oncontextmenu = e => {
		if (e.ctrlKey || e.shiftKey || e.altKey) return;
		e.preventDefault();
		custombuttons.confirmBox(null, "Запустить плеер из буфера обмена ?", "Да", "Нет")
                       && run([gClipboard.read(),]);
			
	}
	var popup = document.getElementById("contentAreaContextMenu");
	addEventListener("popupshowing", {
		get hidden() {
			return !(gContextMenu.onLink || gContextMenu.onVideo || gContextMenu.onPlainTextLink);
		},
		handleEvent() {
			if (this.hidden) return;
			var menuitem = document.createXULElement("menuitem");
			for(var args of Object.entries({
				image: self.image,
				oncommand: "play()",
				class: "menuitem-iconic",
				label: "Открыть в " + sysPlayerName
			}))
				menuitem.setAttribute(...args);
			menuitem.play = () => play(gContextMenu.linkURL || gContextMenu.mediaURL);
			document.getElementById("context-savelink").before(menuitem);
			addDestructor(() => menuitem.remove());
			this.handleEvent = e => {
				if (e.target == popup) menuitem.hidden = this.hidden;
			}
		}
	}, false, popup || 1);

	var play = link => custombuttons.confirmBox(null, "Открыть ссылку в плеере ?", "Да", "Отмена") && run([link]);
	var run = args => {
		var file = FileUtils.File(path);
		(run = args => {
			if (!file.exists()) return custombuttons.alertBox("File not exists!", path);
			var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
			process.init(file);
			process.runwAsync(args, args.length);
		})(args);
	}
	var notify = () => {
		var name = _id + "-noFound";
		var as = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
		(notify = () => setTimeout(as.closeAlert, 1150, name, as.showAlertNotification(
			"chrome://global/skin/icons/question-48.png", "", noFound, false, "", null, name
		)))();
	}

})(() => {

	var found, videoMoved, SEND = msg => {
		found = true;
		if (!msg || Cc["@mozilla.org/embedcomp/prompt-service;1"]
			.getService(Ci.nsIPromptService)
			.confirm(content, null, decodeURIComponent("CONFIRM"))
		) {
			if (msg) videoMoved = decodeURIComponent("VIDEO_MOVED");
			sendAsyncMessage("MSG_NAME", msg);
		}
		else return true;
	}

	var YoutubeID = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:\W|$)/;

	var tmp = '',
	tmpp = '',
	innerA = '<div style="display:block!important;color:#00ff00!important;width:250px!important;font:bold 16px serif!important;z-index:999!important;opacity:1!important;visibility: visible!important;',
	innerB = 'left:5px!important;position:absolute!important;height:auto!important;box-sizing:border-box!important;padding:5px!important;margin:5px!important;',
	//stopPl = "javascript:(function(){v=document.getElementById('movie_player');if(v){v.stopVideo()}else{v=document.getElementsByTagName('video');if(v){v[0].src='';try{v[0].load()}catch(e){}};}})();",
	ytIMGouter = function (ytID) {
		return '<div width="100%"><br /><a target="_blank" href="https://www.youtube.com/watch?v=' + ytID + '"><img src="https://i.ytimg.com/vi/' + ytID + '/hqdefault.jpg"></a><br />' + innerA + 'background-color:black!important;position:relative!important;bottom:20px!important;">&nbsp;&nbsp;' + videoMoved + '</div><br /></div><br />'
	},
	handlWin = function (currentWin) {
		tmp = '';
		var elem = currentWin.document.getElementsByTagName('video'),
		currLoc = currentWin.location;
		if (elem.length > 0) {
			if (currLoc.hostname.indexOf('youtu') != -1 && (tmp = currLoc.toString().match(YoutubeID)) && tmp[1].length == 11) {

				if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return;

				videoMovedbox = currentWin.document.createElement('videoMoved');
				videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>';

				//loadURI(stopPl);
				(function(d){var v=d.getElementById('movie_player');if(v){try{v.stopVideo()}catch{}}
					else{v=d.getElementsByTagName('video');if(v[0]){v[0].src='';try{v[0].load()}catch{}};}})(currentWin.document);

				currentWin.document.getElementById('eow-title').appendChild(videoMovedbox);
				return true;
			};
			for (i = 0; i < elem.length; i++) {
				if (((tmp = getSrc(elem[i].parentNode, currLoc)) && tmp.length > 2) || (i == 0 && currentWin.document.body.innerHTML.substring(0, 7) == '<video ' && (tmp = currLoc.toString()))) {

					if (SEND(tmp)) return;

					videoMovedbox = currentWin.document.createElement('videoMoved');
					videoMovedbox.innerHTML = innerA + innerB + 'top:20px!important;background-color:black!important;">' + videoMoved + '</div>';

					if (currLoc.hostname == 'www.youtube.com') {
						elem[i].parentNode.parentNode.appendChild(videoMovedbox);
					} else {
						elem[i].parentNode.appendChild(videoMovedbox);
					};
					elem[i].src = '';
					try {
						elem[i].load()
					} catch (e) {};
					return true;
				}
			}
		};

		currentWin._elems = currentWin.document.getElementsByTagName('iframe');
		if (currentWin._elems.length > 0) {
			for (currentWin._iCounter = 0; currentWin._iCounter < currentWin._elems.length; currentWin._iCounter++) {
				if ((currentWin._elems[currentWin._iCounter].src.indexOf('youtube.com') > -1) && (tmp = currentWin._elems[currentWin._iCounter].src.match(YoutubeID)) && (tmp[1].length == 11)) {

				if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return;

				currentWin._elems[currentWin._iCounter].outerHTML = ytIMGouter(tmp[1]);
					return true;
				};
				if (currentWin._elems[currentWin._iCounter].clientWidth > 80 && currentWin._elems[currentWin._iCounter].clientHeight > 40 && handlWin(currentWin._elems[currentWin._iCounter].contentWindow))
					return true;
			}
		};

		elem = currentWin.document.getElementsByTagName('object');
		currLoc = currentWin.location;
		if (elem.length == 0) {
			elem = currentWin.document.getElementsByTagName('embed')
		};
		if (elem.length > 0) {
			for (i = 0; i < elem.length; i++) {
				if (elem[i].innerHTML.indexOf('youtu') != -1 && (tmp = elem[i].innerHTML.match(YoutubeID)) && tmp[1].length == 11) {

					if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return;

					elem[i].outerHTML = ytIMGouter(tmp[1]);
					return true;
				} else {
					if (elem[i].clientWidth > 80 && elem[i].clientHeight > 40) {
						if (((tmp = getSrc(elem[i].parentNode, currLoc)) || (tmp = getLink(elem[i], currLoc))) && tmp.length > 2) {

							if (SEND(tmp)) return;

							elem[i].outerHTML = innerA + 'background-color:black!important;bottom:20px!important;">&nbsp;&nbsp;' + videoMoved + '</div>';
							return true;
						};
					};
				}
			};
		};
		return false;
	};

	function restProtHost(lnkR, curLoc) {
		if (lnkR.length == 0)
			return '';
		let tr = lnkR.replace(/^:\/\//, curLoc.protocol + "//");
		if (!tr.match(/^https?:\/\//i)) {
			lnkR = tr.replace(/^\/+/, '');
			if (lnkR.split('/')[0].split('?')[0].split('#')[0].toLowerCase().match(/^(?:[-a-z\d]+\.)+[a-z\d]{2,6}$/)) {
				tr = curLoc.protocol + '//' + lnkR;
			} else {
				tr = curLoc.protocol + '//' + curLoc.host + "/" + lnkR;
			}
		};
		return tr;
	};

	function getSrc(vobj, currentLoc) {
		var t = '',
		tt = '';
		if ((((t = vobj.innerHTML.match(/<video.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*))/i)) && (t) && (tt = t[1] || t[2] || t[3]) && tt.indexOf('blob:') == -1) || ((t = vobj.innerHTML.match(/<source.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*)).*?\stype=['"]?video\//i)) && (t) && (tt = t[1] || t[2] || t[3]))) && tt.length > 2 && tt.indexOf('blob:') == -1) {
			if (tt.indexOf(".mp4/?") == -1) {
				tt = tt.replace(/&amp;/g, "&")
			};
			t = restProtHost(tt, currentLoc);
			return t;
		};
		return '';
	};

	function getLink(obj, curLocation) {

		if (!obj || !obj.tagName)
			return '';
		q = obj.tagName.toLowerCase();

		var getParam = function (e, n) {
			var v = '',
			r = new RegExp('^(' + n + ')$', 'i'),
			param = e.getElementsByTagName('param');
			for (var igp = 0, p; p = param[igp]; igp++) {
				if (p.hasAttribute('name') && p.getAttribute('name').match(r)) {
					v = p.getAttribute('value');
					break
				};
			};
			return v;
		};

		var restPath = function (f, s) {
			return (f.substring(0, 4) == 'http') ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f)
		};

		function videoLinkExtract(fl) {
			alert(fl);
			var linkArr = [],
			outLinks = [],
			jj = 0,
			lba = '',
			lbb = '',
			decodeURL = gBrowser.currentURI.spec; {
				try {
					return decodeURIComponent(s)
				} catch (e) {
					return unescape(s)
				}
			};

			for (var ij = 0; ij < 3; ij++) {
				lba = lba + String.fromCharCode(parseInt((Math.random() * 15 + 1) + '', 10));
				lbb = lbb + String.fromCharCode(parseInt((Math.random() * 15 + 16) + '', 10));
			};

			function pushWithMerit(lnk) {

				var merit = -11;
				if (lnk.match(/^https?:\/\//i))
					merit = merit + 40;
				if (outLinks.length == 0)
					merit = merit + 1;
				if (lnk.match(/^\//))
					merit = merit + 7;
				if (lnk.match(/^\/\//))
					merit = merit + 30;
				if (lnk.match(/240p([^a-z]|$)/i))
					merit = merit + 1;
				if (lnk.match(/[^a-z]240([^a-z0-9]|$)/i))
					merit = merit + 1;
				if (lnk.match(/360p([^a-z]|$)/i))
					merit = merit + 3;
				if (lnk.match(/[^a-z]360([^a-z0-9]|$)/i))
					merit = merit + 3;
				if (lnk.match(/480p([^a-z]|$)/i))
					merit = merit + 5;
				if (lnk.match(/[^a-z]480([^a-z0-9]|$)/i))
					merit = merit + 5;
				if (lnk.match(/720p([^a-z]|$)/i))
					merit = merit + 7;
				if (lnk.match(/[^a-z]720([^a-z0-9]|$)/i))
					merit = merit + 7;
				if (lnk.match(/\.mp4([^a-z]|$)/i))
					merit = merit + 8;
				if (lnk.match(/_hd([^a-z]|$)/i))
					merit = merit + 6;
				if (lnk.match(/\.(jpg|xml)([^a-z]|$)/i))
					merit = merit - 40;
				if (merit > 0)
					outLinks.push(merit + lba + lnk);
				Services.console.logStringMessage('merit:' + merit + ' lnk->' + lnk);
			};

			linkArr.push(fl);
			while (linkArr.length > jj && jj < 30) {

				var testPaths = [];
				testPaths = linkArr[jj].split(/(\.(?:flv|mp4|m3u8))/i);
				if (testPaths[testPaths.length - 1] == '')
					testPaths.pop();

				for (k = 1; k < testPaths.length; k = k + 2) {

					if (testPaths[k - 1].indexOf(lba) > -1) {
						pref = testPaths[k - 1];
					} else {
						var testAboutDom = testPaths[k - 1].toLowerCase().split(/(https?:\/\/)/);
						if (testAboutDom[testAboutDom.length - 1] == '')
							testAboutDom.pop();
						var pTest = testAboutDom[testAboutDom.length - 1].split(/(\?[^\?]*?&)/);
						if (pTest.length > 2) {
							pTest.pop();
							pTest.pop();
						};
						testAboutDom[testAboutDom.length - 1] = pTest.join('');
						pref = testPaths[k - 1].substring(testAboutDom.join('').lastIndexOf("&") + 1);
					};

					t2 = pref.lastIndexOf(lbb);
					if (t2 > -1) {
						pref = pref.substring(t2 + 3);
					} else {

						t2 = pref.lastIndexOf('{"');
						if (t2 > -1)
							pref = pref.substring(t2 + 2);
						t2 = pref.lastIndexOf('["');
						if (t2 > -1)
							pref = pref.substring(t2 + 2);
						t2 = pref.lastIndexOf(',"');
						if (t2 > -1)
							pref = pref.substring(t2 + 2);
						t2 = pref.toLowerCase().lastIndexOf('"http://');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf('"https://');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf(',http://');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf(',https://');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf(';http');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf('*https://');
						if (t2 > -1)
							pref = pref.substring(t2 + 1);
						t2 = pref.toLowerCase().lastIndexOf(' or ');
						if (t2 > -1)
							pref = pref.substring(t2 + 4);

						pref = pref.substring(pref.split('/')[0].toLowerCase().split('%2f')[0].lastIndexOf('=') + 1);

					}

					if (pref.length > 0) {

						if (pref.split('?')[0].toLowerCase().match(/%[2-3][0-9a-f]/)) {

							t2 = pref.indexOf('"')
								if (t2 > -1)
									pref = pref.substring(t2 + 1);
								suff = testPaths[k + 1] ? testPaths[k + 1].split('&')[0].split('"')[0].split(';')[0].split(/,http/i)[0] : '';
							if ((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) {
								if (testPaths.length > k + 1) {
									testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length)
								};
								t2 = pref.lastIndexOf(lba);
								if (t2 > -1)
									pref = pref.substring(t2 + 3)
										linkArr.push(decodeURL(pref + testPaths[k] + suff));

							} else {
								testPaths[k + 1] = (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff
							}
						} else {
							suff = testPaths[k + 1] ? testPaths[k + 1].split(';')[0].split('"]')[0].split('"}')[0].split('",')[0].split(/,https?:\/\//i)[0].split('*https://')[0].split(' or ')[0] : '';
							t2 = suff.indexOf('&');
							if ((t2 > -1) && (pref != testPaths[k - 1])) {
								if (t2 == 0)
									suff = '';
								if (suff.charAt(0) != '?')
									suff = suff.split(/(&[^&]+=https?:\/\/)/i)[0];
							};
							if ((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) {
								if (testPaths.length > k + 1) {
									testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length)
								};
								t2 = pref.lastIndexOf(lba);
								if (t2 > -1)
									pref = pref.substring(t2 + 3);
								pushWithMerit(pref + testPaths[k] + suff);

							} else {
								testPaths[k + 1] = lba + (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff
							}
						}
					}
				};
				jj = jj + 1;
			};

			if (outLinks.length == 0)
				return '';
			function srt(a, b) {
				a = parseInt(a.substr(0, a.indexOf(lba)), 10);
				b = parseInt(b.substr(0, b.indexOf(lba)), 10);
				if (a < b)
					return 1;
				if (a > b)
					return -1;
				return 0
			};
			outLinks.sort(srt);
			outLinks[0] = outLinks[0].substr(outLinks[0].indexOf(lba) + 3)
				if (outLinks[0].indexOf('_hq.mp4/?time=') > 0)
					outLinks[0] = outLinks[0].replace(/&/g, '&amp;');
				return outLinks[0];
		};

		if (!ol)
			return '';
		//ol = ol.replace(/^:?\/\//, curLocation.protocol + "//");
		//return restPath(ol, src);
		return restProtHost(ol, curLocation);
	};

	try {handlWin(content);} finally {found || SEND();}
});

 var style = custombutton.buttonGetHelp(self).replace(/id/g, _id);
var uri = makeURI('data:text/css,'+ encodeURIComponent(style));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, 0);

Отсутствует

 

№1592124-09-2021 18:30:09

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

Re: Custom Buttons

ВВП пишет

хотя бы на левый клик. Плеер запустился, а браузер - закрылся...И никак толком..

Не браузер, а окно браузера. Это не всегда одно и то же.
Закрыть браузер (выход из приложения) — это goQuitApplication({});


Не знаю что там за «никак толком», добавил после
process.runwAsync(args, args.length);
и всё работает как написано.


А вот чтобы только «на левый клик», чуть сложнее,
нужно аргументом пробросить, что запуск именно оттуда.
Но, судя по «хотя бы», видимо, необязательная задача.

Отсутствует

 

№1592224-09-2021 19:09:42

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 150
UA: Firefox 92.0

Re: Custom Buttons

Dumby
Ну, так просто как-то. Выход с любого действа с плеером...В Browser.js вставил это:

скрытый текст
function BrowserTryToCloseWindow() {
if (Services.prompt.confirm(null, "ВНИМАНИЕ !", "Закрыть Браузер ?"))
  if (WindowIsClosing()) {
    window.close();
  } // WindowIsClosing does all the necessary checks
}

В кнопку это BrowserTryToCloseWindow() . Тоже не того. Хотелось бы только на левый клик  goQuitApplication({}); , естественно,если есть перехват....

Отсутствует

 

№1592324-09-2021 20:08:55

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

Re: Custom Buttons

ВВП пишет

Хотелось бы только на левый клик

Тогда так

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

Выделить код

Код:

//		var listener = ({data}) => data ? run([data]) : notify();
		var listener = ({data}) => data ? run([data], true) : notify();
Выделить код

Код:

/*
	var run = args => {
		var file = FileUtils.File(path);
		(run = args => {
			if (!file.exists()) return custombuttons.alertBox("File not exists!", path);
			var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
			process.init(file);
			process.runwAsync(args, args.length);
		})(args);
	}
*/
	var run = (...a) => {
		var file = FileUtils.File(path);
		(run = (args, quit) => {
			if (!file.exists()) return custombuttons.alertBox("File not exists!", path);
			var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
			process.init(file);
			process.runwAsync(args, args.length);
			quit && goQuitApplication({});
		})(...a);
	}

Отсутствует

 

№1592424-09-2021 20:31:47

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 150
UA: Firefox 92.0

Re: Custom Buttons

Dumby
От это класс ! Не постоjе речи ! А, это не косяк? . А то вечно хлопнешь и браузер закрылся , может скрипт какой?

скрытый текст
function BrowserTryToCloseWindow() {
if (Services.prompt.confirm(null, "ВНИМАНИЕ !", "Закрыть Браузер ?"))
  if (WindowIsClosing()) {
    window.close();
  } // WindowIsClosing does all the necessary checks
}

Отсутствует

 

№1592524-09-2021 22:03:53

Senflex
Участник
 
Группа: Members
Зарегистрирован: 18-07-2021
Сообщений: 28
UA: Chrome 93.0

Re: Custom Buttons

Выделить код

Код:

var cmd = Services.dirsvc.get("SysD", Ci.nsIFile);
cmd.append("cmd.exe");

var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(cmd);

var args = ["/k", "echo Как видно?", "&&", "pause"];
process.runwAsync(args, args.length);

Великолепно, от всей души БЛАГОДАРЮ Dumby!
Можно ли дополнить ваш код, моментальным сворачиванием cmd, пример: cmd ярлык, если в свойствах ярлыка выбрать "Свёрнутое в значок" то произойдет сворачивание, без вывода консоли.

Отредактировано Senflex (25-09-2021 21:10:11)

Отсутствует

 

Board footer

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