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

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

№152628-04-2024 16:08:37

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

egorsemenov06
Наверняка где то ошибку синтаксиса допустили, все там должно работать

СПАСИБО ЕЩЕ РАЗ!!!!!!!мой косяк  дело в пути к скриптк было

Отсутствует

 

№152729-04-2024 04:23:05

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. раз тут завал просьб, добавлю свои 3 копейки:


Просьба улучшить ucf_contextmenuopenwith для нормальной работы с yt-dlp:
1) в режиме "Открыть страницу в …" если в Clipboard только одна строка и текст заканчивается на .m3u8, то передавать его вместо %OpenURI
2) есть выделенный текст ? передать его вместо %OpenURI. Чтобы работало на moz-extension://, где Video DownloadHelper открывает «Детали» со ссылками.

ucf_contextmenuopenwith.js – возможно, этот код устарел

Выделить код

Код:

(this.contextmenuopenwith = {
	_eventlisteners: [],
	menupage: {},
	menulink: {},
	init(that) {
		var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет
		var submenu = false; // true или false Добавить подменю для пунктов или нет
		var prelabpage = false; // Добавить вначале "Открыть страницу в ";
		var prelablink = false; // Добавить вначале "Открыть ссылку в ";
		// [true или false Показывать пункт на странице или нет, true или false Показывать пункт на ссылках или нет, 'ID пункта', 'имя приложения', 'путь к приложению', 'аргументы через пробел (то что в двойных кавычках считается за один аргумент)', 'иконка (для Windows необязательно)'],
		var arrayWindows = [
//			[true, true, 'edge', 'Microsoft Edge', 'C:\\Windows\\explorer.exe', '"microsoft-edge:%OpenURI "', 'moz-icon://file://C:\\ndows\\SystemApps\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\MicrosoftEdge.exe?size=16'],
			[true, true, 'videodownloader', '4K Downloader', 'C:\\Program Files (x86)\\4KDownload\\4kvideodownloader\\4kvideodownloader.exe', '%OpenURI'],
//			[true, true, 'potplayer', 'DAUM PotPlayer', 'C:\\Program Files\\PotPlayer\\PotPlayerMini64.exe', '%OpenURI'],
//			[true, true, 'vlc', 'VLC', 'C:\\Program Files\\VideoLAN\\VLC\\vlc.exe', '%OpenURI'],
		];
		var arrayLinux = [ // для Linux
			// [true, true, 'vlc', 'VLC', '/usr/bin/vlc', '%OpenURI', 'moz-icon://stock/vlc?size=menu'],
			// [false, true, 'thunderbird', 'Thunderbird', '/usr/bin/thunderbird', '-compose "to=%OpenURI"', 'moz-icon://stock/thunderbird?size=menu'],
			[true, true, 'yt-dlp', 'Скачать видео в yt-dlp', '/usr/bin/xterm', '-e "yt-dlp \'%OpenURI\'; beep; sleep 3"', 'moz-icon://stock/go-down?size=menu'], // терминал вашей Рабочей среды, в ~/.config/yt-dlp.conf указан каталог загрузки
			[false, true, 'mpv', 'Смотреть в MPV плеер', '/usr/bin/mpv', '--ytdl-format=bestvideo[height<=?720][fps<=?30]+bestaudio/best[height<=?720][fps<=?30] "%OpenURI"', 'moz-icon://stock/mpv?size=menu'],
		];
		var arrayMacos = [ // для MacOS
			// [true, true, 'downie', 'Скачать видео в Downie 4', '/usr/bin/open', '-b com.charliemonroe.Downie-4 %OpenURI', 'moz-icon://file:///Applications/Downie 4.app?size=16'],
			[true, true, 'yt-dlp', 'Найти/скачать видео: yt-dlp', '/usr/bin/osascript', `-e "tell app %quotTerminal%quot to activate do script %quotyt-dlp '%OpenURI' && say 'download complete'; exit%quot"`, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAACNJREFUCNdjYH/AgBX9/89Q/4/B/g+D/A8G/g8gEeYDDIwNAIB7EDCcKCcMAAAAAElFTkSuQmCC'], // 'moz-icon://file:///System/Library/Image Capture/Support/Application/AutoImporter.app?size=16'
			[true, true, 'mpv', 'Смотреть в MPV плеер', '/usr/bin/open', '-n -a mpv --args --ytdl-format=bestvideo[height<=?720][fps<=?30]+bestaudio/best[height<=?720][fps<=?30] %OpenURI', 'moz-icon://file:///Applications/mpv.app?size=16'],
			[true, true, 'Safari', 'Обзор страницы в Safari', '/usr/bin/open', '-b com.apple.Safari %OpenURI', 'chrome://branding/content/icon32.png'],
		];

		var arrayOS, platform = AppConstants.platform, length;
		if (platform == "win")
			arrayOS = arrayWindows;
		else if (platform == "linux")
			arrayOS = arrayLinux;
		else if (platform == "macosx")
			arrayOS = arrayMacos;
		else
			return;
		if (!(length = arrayOS.length))
			return;
		var addEventListener = this.addEventListener.bind(this);
		var popup = document.querySelector("#contentAreaContextMenu");
		var create = evt => {
			if (evt.target != popup || gContextMenu.webExtBrowserType === "popup") return;
			popup.removeEventListener("popupshowing", create);
			var seppage = popup.querySelector("#context-sep-selectall") || popup.querySelector("#frame-sep") || popup.lastElementChild;
			var seplink = popup.querySelector("#context-sep-copylink") || popup.querySelector("#context-sep-open") || popup.firstElementChild;
			var fragpage = document.createDocumentFragment(), fraglink = document.createDocumentFragment(), _prelabpage = "", _prelablink = "";
			if (length == 1) submenu = false;
			if (!submenu)
				_prelabpage = prelabpage ? "Открыть страницу в " : "", _prelablink = prelablink ? "Открыть ссылку в " : "";
			arrayOS.forEach(item => {
				var id = item[2], name = item[3], path = item[4], arg = !item[5] ? "" : item[5];
				if (!id || !name || !path) return;
				var iconpath = !item[6] ? (`moz-icon://file://${path}?size=16`) : item[6];
				if (item[0]) {
					let menuitem_0 = document.createXULElement("menuitem");
					menuitem_0.id = `open-current-page-with-${id}`;
					menuitem_0.className = "menuitem-iconic open-current-page-with-application";
					menuitem_0.setAttribute("label", `${_prelabpage}${name}`);
					menuitem_0.applicationpath = path;
					menuitem_0.applicationarg = arg;
					if (attrimage)
						menuitem_0.setAttribute("image", iconpath);
					fragpage.append(menuitem_0);
					addEventListener(menuitem_0, "command", function page(event) {
						try {
							var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
							file.initWithPath(target.applicationpath);
							if (!file.exists() || !file.isExecutable()) return;
							arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
								if (/%OpenURI/g.test(sp)) {
									let uri = gBrowser.selectedBrowser.currentURI.displaySpec;
									try {
										let _uri = ReaderMode.getOriginalUrl(uri);
										if (_uri)
											uri = Services.io.newURI(_uri).displaySpec;
									} catch(e) {}
									try {
										uri = decodeURIComponent(uri);
									} catch(e) {}
									return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri);
								}
								return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"');
							}) : [];
							var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
							process.init(file);
							process.runwAsync(arg, arg.length);
						} catch(e) {}
					});
				}
				if (item[1]) {
					let menuitem_1 = document.createXULElement("menuitem");
					menuitem_1.id = `open-link-with-${id}`;
					menuitem_1.className = "menuitem-iconic open-link-with-application";
					menuitem_1.setAttribute("label", `${_prelablink}${name}`);
					menuitem_1.applicationpath = path;
					menuitem_1.applicationarg = arg;
					if (attrimage)
						menuitem_1.setAttribute("image", iconpath);
					fraglink.append(menuitem_1);
					addEventListener(menuitem_1, "command", function link(event) {
						try {
							var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
							file.initWithPath(target.applicationpath);
							if (!file.exists() || !file.isExecutable() || !window.gContextMenu?.linkURI?.displaySpec) return;
							arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
								if (/%OpenURI/g.test(sp)) {
									let uri = gContextMenu.linkURI.displaySpec;
									try {
										let _uri = ReaderMode.getOriginalUrl(uri);
										if (_uri)
											uri = Services.io.newURI(_uri).displaySpec;
									} catch(e) {}
									try {
										uri = decodeURIComponent(uri);
									} catch(e) {}
									return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri);
								}
								return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"');
							}) : [];
							var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
							process.init(file);
							process.runwAsync(arg, arg.length);
						} catch(e) {}
					});
				}
			});
			that.unloadlisteners.push("contextmenuopenwith");
			var funcpopupshowing, funcpopuphiding;
			if (!submenu) {
				seppage.after(fragpage);
				seplink.before(fraglink);
				funcpopupshowing = () => {
					var link = gContextMenu.onLink || gContextMenu.onMailtoLink;
					for(let arr of this._eventlisteners) {
						if (arr[2].name === "page")
							arr[0].hidden = link;
						else if (arr[2].name === "link")
							arr[0].hidden = !link;
					}
				};
				funcpopuphiding = () => {
					for(let arr of this._eventlisteners) {
						if (arr[1] === "command")
							arr[0].hidden = true;
					}
				};
			} else {
				if (fragpage.children.length) {
					let menu = this.menupage = document.createXULElement("menu");
					menu.id = "open-current-page-with-submenu";
					menu.className = "menu-iconic open-current-page-with-application";
					menu.setAttribute("label", "Открыть страницу в...");
					let menupopup = document.createXULElement("menupopup");
					menupopup.append(fragpage);
					menu.append(menupopup);
					seppage.after(menu);
				}
				if (fraglink.children.length) {
					let menu = this.menulink = document.createXULElement("menu");
					menu.id = "open-link-with-submenu";
					menu.className = "menu-iconic open-link-with-application";
					menu.setAttribute("label", "Открыть ссылку в...");
					let menupopup = document.createXULElement("menupopup");
					menupopup.append(fraglink);
					menu.append(menupopup);
					seplink.before(menu);
				}
				funcpopupshowing = () => {
					var link = gContextMenu.onLink || gContextMenu.onMailtoLink;
					this.menupage.hidden = link;
					this.menulink.hidden = !link;
				};
				funcpopuphiding = () => {
					this.menupage.hidden = true;
					this.menulink.hidden = true;
				};
			}
			funcpopupshowing();
			addEventListener(popup, "popupshowing", e => {
				if (e.target != popup || gContextMenu.webExtBrowserType === "popup") return;
				funcpopupshowing();
			});
			addEventListener(popup, "popuphiding", e => {
				if (e.target != popup) return;
				funcpopuphiding();
			});
		};
		popup.addEventListener("popupshowing", create);
	},
	addEventListener(...arr) {
		var elm = arr[0];
		if (!elm)
			return;
		elm.addEventListener(...arr.slice(1));
		this._eventlisteners.push(arr);
	},
	destructor() {
		for(let arr of this._eventlisteners)
			arr.shift().removeEventListener(...arr);
		delete this._eventlisteners;
	}
}).init(this);

Отсутствует

 

№152830-04-2024 11:29:13

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

если в Clipboard только одна строка и текст заканчивается на .m3u8

Ссылки с m3u не всегда так заканчиваются, может быть так .m3u8?бла-бла-бла, и почему только плейлисты m3u а просто медиа файлы и т.д.
Кстати для прямых ссылок на медиа и m3u не нужен yt-dlp, см. ниже пример копирования потока с FFmpeg, можно сразу конвертировать с заданным кодеком.
Короче сделал так, при зажатой клавише Shift ссылка берется из буфера, и ещё добавил аргумент %OpenClipboardURI можно добавить пункт для работы с буфером обмена, кстати на этом пункте зажатие клавиши Shift наоборот вызывает ссылку со страницы или выделенный текст.

Dobrov пишет

Чтобы работало на moz-extension://, где Video DownloadHelper

А разве не работает на moz-extension:// там вроде только в popup отключено, короче не знаю проверь сам на Video DownloadHelper


Код упростил теперь один и тот же пункт для ссылок, страницы, выделенного, буфера

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

Выделить код

Код:

(this.contextmenuopenwith = {
    _eventListeners: [],
    init(that) {
        var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет
        var submenu = true; // true или false Добавить подменю для пунктов или нет
        var selector = "#context-sep-open"; // селектор в контекстном меню перед которым добавлять пункты
/*
        name: 'Название приложения',
        path: 'путь к приложению',
        * Необязательные параметры:
        args: `аргументы через пробел (то что в двойных кавычках считается за один аргумент)`,
        iconpath: 'иконка',
*/
        var Linux = [
            {
                name: 'VLC',
                path: '/usr/bin/vlc',
                iconpath: 'moz-icon://stock/vlc?size=menu',
            },
            {
                name: 'Yt-dlp',
                path: '/usr/bin/konsole',
                // yt-dlp скачать видео предпочтительно .mp4 с кодеком hevc|h265|avc|h264 с разрешением <=1080
                args: `--hold --workdir ~/Загрузки -e "yt-dlp -f %quotbv[height<=1080][ext=mp4][vcodec~='^(hevc|h265|avc|h264)']+ba[ext~='(aac|m4a)']/best[height<=1080][ext=mp4]/best[height<=1080]/best%quot %OpenURI"`,
                iconpath: 'moz-icon://stock/youtube-dl?size=menu',
            },
            {
                name: 'FFmpeg',
                path: '/usr/bin/konsole',
                // ffmpeg копировать поток видео аудио в контейнер mp4
                args: `--hold --workdir ~/Загрузки -e "ffmpeg -i %OpenClipboardURI -c copy -f mp4 video.mp4"`,
                iconpath: 'moz-icon://stock/utilities-terminal?size=menu',
            },
        ];
        var Windows = [

        ];
        var Macos = [

        ];

        var arrOS, platform = AppConstants.platform, length;
        if (platform === "linux")
            arrOS = Linux;
        else if (platform === "win")
            arrOS = Windows;
        else if (platform === "macosx")
            arrOS = Macos;
        else
            return;
        if (!(length = arrOS.length))
            return;
        var addListener = (...arr) => {
            var elm = arr[0];
            if (!elm)
                return;
            elm.addEventListener(...arr.slice(1));
            this._eventListeners.push(arr);
        };
        var readFromClipboard = () => {
            var url = "";
            try {
                let trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
                trans.init(docShell.QueryInterface(Ci.nsILoadContext));
                trans.addDataFlavor("text/plain");
                let {clipboard} = Services;
                clipboard.getData(trans, clipboard.kGlobalClipboard);
                let data = {};
                trans.getTransferData("text/plain", data);
                if (data.value)
                    url = data.value.QueryInterface(Ci.nsISupportsString).data;
            } catch (ex) {}
            return url;
        };
        var getCurrentURL = () => {
            var url = gBrowser.selectedBrowser.currentURI.displaySpec;
            try {
                let _url = ReaderMode.getOriginalUrl(url);
                if (_url)
                    url = Services.io.newURI(_url).displaySpec;
            } catch(e) {}
            return url;
        };
        var getURL = key => {
            return !key
            ? gContextMenu?.linkURI?.displaySpec || getCurrentURL()
            : readFromClipboard();
        };
        var popup = document.querySelector("#contentAreaContextMenu");
        var create = e => {
            if (e.target != popup || gContextMenu.webExtBrowserType === "popup" ||
                (gContextMenu.isContentSelected || gContextMenu.onTextInput) && !gContextMenu.linkURL) return;
            popup.removeEventListener("popupshowing", create);
            this._eventListeners.shift();
            var contextsel = popup.querySelector(`:scope > ${selector}`) || popup.querySelector(":scope > menuseparator:last-of-type");
            var fragment = document.createDocumentFragment(), preitem = "";
            if (length == 1)
                submenu = false;
            if (!submenu)
                preitem = "Открыть в ";
            var itemId = 0;
            arrOS.forEach(item => {
                var name = item.name, path = item.path, args = item.args || "";
                if (!name || !path) return;
                var iconpath = item.iconpath || `moz-icon://file://${path}?size=16`;
                let mitem = document.createXULElement("menuitem");
                mitem.id = `ucf-menu-open-with-${++itemId}`;
                mitem.className = "menuitem-iconic ucf-menu-open-with";
                mitem.setAttribute("label", `${preitem}${name}`);
                mitem.apppath = path;
                mitem.appargs = args;
                if (attrimage)
                    mitem.setAttribute("image", iconpath);
                fragment.append(mitem);
                addListener(mitem, "command", function command(e) {
                    try {
                        let target = e.currentTarget, args = target.appargs, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                        file.initWithPath(target.apppath);
                        if (!file.exists()) return;
                        if (file.isExecutable()) {
                            let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                            process.init(file);
                            if (args) {
                                let openuri = false;
                                args = args.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/).map(sp => {
                                    if (/%OpenURI/.test(sp)) {
                                        openuri = true;
                                        return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"').replace("%OpenURI", getURL(e.shiftKey));
                                    }
                                    if (/%OpenClipboardURI/.test(sp)) {
                                        openuri = true;
                                        return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"').replace("%OpenClipboardURI", getURL(!e.shiftKey));
                                    }
                                    return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"');
                                });
                                if (!openuri)
                                    args.push(getURL(e.shiftKey));
                            } else
                                args = [getURL(e.shiftKey)];
                            process.runwAsync(args, args.length);
                        } else
                            file.launch();
                    } catch(e) {}
                });
            });
            var funcpopupshowing, funcpopuphiding;
            if (submenu) {
                let rootmenu = {};
                if (fragment.children.length) {
                    rootmenu = document.createXULElement("menu");
                    rootmenu.id = "ucf-menu-open-with-submenu";
                    rootmenu.className = "menu-iconic ucf-menu-open-with";
                    rootmenu.setAttribute("label", "Открыть в...");
                    let mpopup = document.createXULElement("menupopup");
                    mpopup.append(fragment);
                    rootmenu.append(mpopup);
                    contextsel.before(rootmenu);
                }
                funcpopupshowing = () => {
                    rootmenu.hidden = false;
                };
                funcpopuphiding = () => {
                    rootmenu.hidden = true;
                };
            } else {
                contextsel.before(fragment);
                funcpopupshowing = () => {
                    for(let arr of this._eventListeners) {
                        if (arr[2].name === "command")
                            arr[0].hidden = false;
                    }
                };
                funcpopuphiding = () => {
                    for(let arr of this._eventListeners) {
                        if (arr[2].name === "command")
                            arr[0].hidden = true;
                    }
                };
            }
            addListener(popup, "popupshowing", function popupshowing(e) {
                if (e.target != popup || gContextMenu.webExtBrowserType === "popup" ||
                    (gContextMenu.isContentSelected || gContextMenu.onTextInput) && !gContextMenu.linkURL) return;
                funcpopupshowing();
            });
            addListener(popup, "popuphiding", function popuphiding(e) {
                if (e.target != popup) return;
                funcpopuphiding();
            });
        };
        addListener(popup, "popupshowing", create);
        that.unloadlisteners.push("contextmenuopenwith");
    },
    destructor() {
        for(let arr of this._eventListeners)
            arr.shift().removeEventListener(...arr);
    }
}).init(this);

Отредактировано Vitaliy V. (01-05-2024 01:07:32)

Отсутствует

 

№152901-05-2024 04:42:13

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. – спасибо!


Вопрос: делаю общие функции в MJS-скрипте через scriptsbackground: [ // In background [System Principal]:
Почему напрямую не работает globalThis[Symbol.for('Dobrov')] = Dobrov; и можно ли сделать проще, без
ChromeUtils.domProcessChild.childID || ({
………
}).init("browser-delayed-startup-finished");

Выделить код

Код:

var {Services} = globalThis || ChromeUtils.import("resource://gre/modules/Services.jsm");
var win = wm.getMostRecentWindow("navigator:browser") || globalThis;
var name = "Dobrov", EXPORTED_SYMBOLS = [`${name}Child`];
// так не работает: globalThis[Symbol.for('Dobrov')] = Dobrov;

ChromeUtils.domProcessChild.childID || ({
	init(topic) {
		globalThis[Symbol.for('Dobrov')] = Dobrov; //общие функции
	}
}).init("browser-delayed-startup-finished");

var Dobrov = {
	toTab(url = 'about:serviceworkers', go){ //открыть вкладку | закрыть её | выбрать
		for(var tab of win.gBrowser.visibleTabs)
			if(tab.linkedBrowser.currentURI.spec == url)
				{go ? win.gBrowser.selectedTab = tab : win.gBrowser.removeTab(tab); return;}
		win.gBrowser.addTrustedTab(url);
		win.gBrowser.selectedTab = win.gBrowser.visibleTabs[win.gBrowser.visibleTabs.length -1];
	},
	async Status(text,time){
		var StatusPanel = win.StatusPanel;
		if(StatusPanel.update.tid)
			win.clearTimeout(StatusPanel.update.tid)
		else {
			var {update} = StatusPanel;
			StatusPanel.update = () => {};
			StatusPanel.update.ret = () => {
				StatusPanel.update = update,StatusPanel.update();
			}
		}
		StatusPanel.update.tid = win.setTimeout(StatusPanel.update.ret,time || 5e3);
		StatusPanel._label = text;
	},
};

Отсутствует

 

№153001-05-2024 17:24:31

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

Почему напрямую не работает globalThis[Symbol.for('Dobrov')] = Dobrov;

Так а как она заработает если на тот момент переменная var Dobrov = ещё не определена. Тогда пиши ниже или сразу так
globalThis[Symbol.for('Dobrov')] = {
    toTab(url = 'about:serviceworkers', go){ и т.д.
И вообще почему нормально не использовать export var Dobrov = {
потом где надо импортировать модуль
var {Dobrov} = ChromeUtils.importESModule(...
Или если это для JSWindowActorChild то должно быть что то вроде
export class DobrovChild extends JSWindowActorChild {
Вообще конечно странный код, зачем например это нужно
var {Services} = globalThis || ChromeUtils.import("resource://gre/modules/Services.jsm");
при том что импорт после || ни при каких условиях не будет выполнено даже если Services отсутствует в globalThis

Отредактировано Vitaliy V. (01-05-2024 17:35:02)

Отсутствует

 

№153104-05-2024 08:36:14

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Bug 1892965 - Rename Sidebar launcher and SidebarUI


Vitaliy V.
Затрагивает две сайдбарские кнопки в составе UCF.



Кстати, ещё, из-за этого бага,
если у тулбара отсутствует атрибут "key", то
в Главное меню —> Вид —> Панели инструментов
(аналогично и в customize-режиме «Настройка панели инструментов…»)


onViewToolbarsPopupShowing()
проставляет на тулбарский менюитем атрибут "key" как "null".


В результате, в консоли появляется запись типа
«Key null of menuitem Панель меню could not be found».


Так вот, это относится и к тулбарам UCF.
Может задать им пустой атрибут "key" (ну, как для "accesskey").
Или подождать, вдруг сами исправят.

Отсутствует

 

№153204-05-2024 08:44:17

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1480
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V.
Dumby
Я помню что по dom вы не любите, но на [aurora] и [nightly] начало задалбывать копирование адреса источника вместе с копируемым текстом, есть решение, или может скрипт придумаете? Если это вообще dom.

Отредактировано _zt (04-05-2024 08:45:59)

Отсутствует

 

№153304-05-2024 13:15:03

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. спасибо за новый ucf_contextmenu_openwith !
Вопрос - как получить stdout при выполнении команд (терминала) ?


Скрипт создаёт строку в контекст-меню даже при отсутствии yt-dlp, поэтому нужна ещё проверка.
Например, берём последнюю строку из stdout, если «0», значит всё ОК:
which yt-dlp; echo $?

Отсутствует

 

№153404-05-2024 14:54:02

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

В результате, в консоли появляется запись типа
«Key null of menuitem Панель меню could not be found»
Может задать им пустой атрибут "key" (ну, как для "accesskey").

Хорошо, буду иметь ввиду если не исправят, пока это ничего не ломает, останова кода нигде не вызывает,
это всего лишь мусорит в консоли console.error(msg); в menu.js -> _computeAccelTextFromKeyIfNeeded() {

_zt пишет

по dom вы не любите

Смотря какой, DOM есть не только на сайтах, а где есть HTML XHTML XML, интерфейс браузера в том числе.

_zt пишет

на [aurora] и [nightly] начало задалбывать копирование адреса источника вместе с копируемым текстом, есть решение, или может скрипт придумаете?

А подробнее как воспроизвести это, может как раз какой-нибудь скрипт у вас это и делает.

Dobrov пишет

Скрипт создаёт строку в контекст-меню даже при отсутствии yt-dlp, поэтому нужна ещё проверка.

Такие проверки дорого стоят, может быть задержка появления меню или пунктов, лучше сделать например так: при клике на пункт если приложение отсутствует, то выводится уведомление типа такое то приложение по данному пути не найдено, установите, или скрыть пункт меню

Отредактировано Vitaliy V. (04-05-2024 15:24:00)

Отсутствует

 

№153505-05-2024 19:12:34

Алексей У.
Участник
 
Группа: Members
Зарегистрирован: 10-04-2021
Сообщений: 166
UA: Firefox 69.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

А где можно достать UserChromeFiles для Firefox 88? Тот, который для последних версий, в нем не работает.

Отсутствует

 

№153605-05-2024 21:23:52

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1734
UA: Firefox 115.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Алексей У. пишет

А где можно достать UserChromeFiles для Firefox 88?

Проверяйте!l


Win7

Отсутствует

 

№153707-05-2024 15:14:53

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Добавил поддержку Гром-птицы, но без панелей и кнопок, CustomizableUI там урезанный поэтому кнопки таким способом не добавить.
Для доступа к настройкам UserChromeFiles добавленны пункты в меню.
Для версии [thunderbird] 115-116 нужно также заменить файлы из архива UserChromeFiles_Fix_115_ESR.zip

скрытый текст
UserChromeFilesTB.png

Отредактировано Vitaliy V. (07-05-2024 15:15:54)

Отсутствует

 

№153808-05-2024 12:18:50

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 100
UA: Firefox 124.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

В [firefox]125 Add Toolbar Buttons отвалился, само расширение есть, а кнопок нет... в 117, вроде, было подобное. Можно ли как-то вылечить..?
Пока откатился на 124.0.2.

Отсутствует

 

№153908-05-2024 13:34:38

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

LGS
У меня какая версия firefox ?! Если работает на 126 думаете на 125 не будет.
Короче у вас либо старая версия Add Toolbar Buttons, либо слетел код для отключения подписи.
P.S. если старая версия от 2021 сначала её нужно удалить, потом ставить новую, а то будет два расширения установленно, т.к. в новой изменился ID

Отредактировано Vitaliy V. (08-05-2024 13:41:33)

Отсутствует

 

№154008-05-2024 14:47:44

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1480
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

А подробнее как воспроизвести это, может как раз какой-нибудь скрипт у вас это и делает.

Да нет, нет такого и никогда не ставил, даже в обезьяну, просто такое не интересует.
Вот например - https://vyborok.com
Попробуйте скопировать что угодно (текст). И таких сайтов сейчас все больше и больше.
Конечно это от версии [firefox] не зависит, а то я выше так написал, что можно подумать, что это только в 126+ так.

Отредактировано _zt (08-05-2024 14:50:12)

Отсутствует

 

№154108-05-2024 15:02:51

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt
dom.event.clipboardevents.enabled = false

Отсутствует

 

№154208-05-2024 17:48:47

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1480
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V.
Точно, спасибо. А ведь раньше было отключено, но потом arkenfox с толку сбил.

Отсутствует

 

№154308-05-2024 19:16:37

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 100
UA: Firefox 124.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

У меня какая версия firefox ?! Если работает на 126 думаете на 125 не будет

Я немного по другому думаю - почему у вас и других работает, а у меня нет..?

Vitaliy V. пишет

у вас либо старая версия Add Toolbar Buttons, либо слетел код для отключения подписи

Ни 2021, ни 2024 версии не работают. АТВ устанавливается, в списке установленных отображается, но кнопок нет. В ФФ124 все нормально.
Антиподписной код у меня этот:
https://forum.mozilla-russia.org/viewto … 59#p800159
Вроде бы не менялся, хотя, может, я что-то и пропустил...

Отредактировано LGS (08-05-2024 19:25:02)

Отсутствует

 

№154408-05-2024 19:48:49

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

LGS пишет

Антиподписной код у меня этот:
https://forum.mozilla-russia.org/viewto … 59#p800159
Вроде бы не менялся, хотя, может, я что-то и пропустил...

Попробуйте этот: https://forum.mozilla-russia.org/viewto … 53#p808453


«The Truth Is Out There»

Отсутствует

 

№154508-05-2024 20:28:47

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

unter_officer пишет

Попробуйте этот: https://forum.mozilla-russia.org/viewto … 53#p808453

С этим заработало. Тысяча благодарностей.

Отсутствует

 

№154609-05-2024 05:16:58

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

Добавил поддержку Гром-птицы, но без панелей и кнопок

Скрипты в Thunderbird всё же редко необходимы…
Вот бы UCF ещё в Palemoon добавить!, его свежие сборки ещё актуальны, т.к. Firefox слишком тормозной.

Отсутствует

 

№154709-05-2024 13:45:20

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

Вот бы UCF ещё в Palemoon добавить!

В текущую сборку UCF добавить поддержку Palemoon нереально, там код древний. Разве что как отдельную сборку, но абсолютно весь код UCF переписывать на древний такое себе... Да и зачем там же xul расширения можно установить или свои написать.

Отсутствует

 

№154809-05-2024 13:47:25

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

Добавил поддержку Гром-птицы, но без панелей и кнопок

А какая минимальная поддерживаемая версия Гром-птицы? На [thunderbird] 78 или 91 будет работать?

Отредактировано unter_officer (09-05-2024 13:55:09)


«The Truth Is Out There»

Отсутствует

 

№154909-05-2024 14:16:11

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2122
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

unter_officer
Нет как и [firefox] с версии [thunderbird] 115 (с заменой css файлов из архива), ES модули и др. компоненты не подерживаются указанными версиями.

Отредактировано Vitaliy V. (09-05-2024 14:16:46)

Отсутствует

 

№155009-05-2024 16:51:22

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1480
UA: Firefox 126.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Vitaliy V. пишет

dom.event.clipboardevents.enabled = false

Не подходит, ломает работу расширений. Например этого Link Text and Location Copier
Так что вопрос со скриптом остается открытым.

Отсутствует

 

Board footer

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