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

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

№1590112-10-2021 19:57:35

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 162
UA: Firefox 92.0

Re: Custom Buttons

ВВП пишет

Сборки - разницы никакой. Понты одни.

понял, курю бамбук, занимаясь вечным вариантом, ждемс радикальных подвижек [firefox] ...

Отредактировано ALEX_45_ORP (12-10-2021 19:58:37)


Win 10х64

Отсутствует

 

№1590213-10-2021 10:58:38

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

Re: Custom Buttons

ALEX_45_ORP пишет

ждемс радикальных подвижек [firefox] ...

Все ждут только одного , но не дождутся... Это декодер MP4.  Если не DTV-DVD video decoder системный , хрен ролик посмотришь с MP4. Только webm с ютуба....
Гугловоды все себе захапали в этом плане.

Отсутствует

 

№1590315-10-2021 10:51:17

Alex_one
Участник
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 150
UA: Firefox 90.0

Re: Custom Buttons

Всем доброго!
Подскажите пжа код.
Нужна кнопка по нажатию на которую открывалась бы папка заданная мной.

Отсутствует

 

№1590415-10-2021 11:08:09

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

Re: Custom Buttons

Dumby
this.onauxclick = e => e.button != 1 || gShowPopup(this);
popup появляется , но пункт "удалить с панели..." не работает. При ctrl + ПКМ - работает ....Это как код поменяли

скрытый текст
gCustomizeMode.removeFromArea(this.parentNode.triggerNode, 'toolbar-context-menu')

Отсутствует

 

№1590515-10-2021 11:21:22

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

Re: Custom Buttons

Alex_one пишет

Нужна кнопка по нажатию на которую открывалась бы папка заданная мной.

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

Выделить код

Код:

this.onclick =e=> {
   e.button == 0 && runApp();   // ЛКМ
};       
function runApp() {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath( getPath() );
   file.launch();
};
function getPath() {
   try { return Services.prefs.getComplexValue(s, Ci.nsIPrefLocalizedString).data; }
   catch(e) { return "C:\\Путь..."; };
};/*Initialization Code*/


Win7

Отсутствует

 

№1590615-10-2021 12:49:04

Alex_one
Участник
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 150
UA: Firefox 90.0

Re: Custom Buttons

kokoss
Спасибо большое! :beer:

Отсутствует

 

№1590715-10-2021 18:53:09

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

Re: Custom Buttons

ВВП пишет

popup появляется , но пункт "удалить с панели..." не работает. При ctrl + ПКМ - работает ....Это как код поменяли

Да, действительно, вижу.
Это всё этот мерзкий баг, сколько же всего повылезало.
Вот, ещё больше сумбура, но, надеюсь, будет работать.


Custom Buttons 0.0.7.0.0.21
paxmod и bootstrap в zip-папке.

Отсутствует

 

№1590815-10-2021 19:49:28

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

Re: Custom Buttons

Dumby
бЛАГОДАРЮ, тут другое  BrowserUtils.jsm такого понавертели , что кн. "увел. изображение " лопнула... Команда   handleCommand(); не работает. Заманался рихтовать сам BrowserUtils.jsm ....Что делать?  Снят вопрос , люди скрипт подсказали , но можно и кнопкой

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

Выделить код

Код:

/*Initialization Code*/
addEventListener("popupshowing", {
    imgZoom: 190,   // на сколько увеличить изображение из меню
    scrollZoom: 20, // на сколько увеличивать/уменьшать колесиком мыши
    scrollTop: 1,   // или -1, переключение направление прокрутки для увеличение колёсиком

    receiveMessage(msg) {
        var container = document.documentElement
            .appendChild(document.createElement("div"));
        addDestructor(() => container.remove());
        var image = container.appendChild(document.createXULElement("image"));
        image.style.cssText = "width: 100% !important; height: 100% !important;";
        image.setAttribute("validate", "never");

        var st = container.style;
        var dz = this.scrollZoom/100 * this.scrollTop;
        var currScale = 1, x, y, initialZoom = this.imgZoom/100 - 1;

        var hide, props = ["width", "height", "left", "top"], p = n => n + "px";
        var set = (...args) => props.forEach((prop, ind) => st[prop] = p(args[ind]));

        (hide = () => {
            st.cssText = "position: fixed; display: none; z-index: 2147483647;";
            currScale = 1;
            image.src = null;
        })();
        container.onwheel = (e, ds = e.deltaY > 0 ? -dz : dz) => {
            if (currScale < .15 && ds < 0) return;
            st.transform = `scale(${currScale += ds})`;
            var {width, height, left, top, bottom, right} = container.getBoundingClientRect();

            if (height < innerHeight) {
                if (top < 0) st.top = p(y -= top);
                if (bottom > innerHeight) st.top = p(y -= bottom - innerHeight);
            }
            if (width < innerWidth) {
                if (left < 0) st.left = p(x -= left);
                if (right > innerWidth) st.left = p(x -= right - innerWidth);
            }
        }
        (this.receiveMessage = msg => {
            var {src, width, height, left, top} = msg.data;
            image.src = src;
            left -= mozInnerScreenX;
            top -= mozInnerScreenY;

            set(width, height, x = left, y = top);
            st.display = "block";
            container.onwheel(null, initialZoom);
            window.addEventListener("mousedown", hide, {once: true, capture: true});
        })(msg);
    },
    handleEvent(e) {
        if (!gContextMenu.onImage) return;
        var menuitem = document.createXULElement("menuitem");
        menuitem.setAttribute("label", "Увеличить размер");
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADZElEQVR42oXSe0xbVRwH8N8597a35e7SAmUFukGhY66AMiNzw4GvTCQLCssc4pQsmTOa+ERMlrktW1zigpnEuWn8x2eMmiVGMBDCFjS+cJHEDIk8RoSNV1+3tLWX3t72nnO8sETJFrfvP7/k5Pw+Ob9fDoLrYi8ow9GFUbq+5aRLrGraqQcX6hlF2wkFEWn6EDIJAyQy9+3VT58cWb6PrmvmjGZS/FSHlxbXtbtLobGqJlPKMhNepWb0V8hKpi8FNd/gzCCogbdmvtg/8C9gz9+Eor5x5nn2tDOZ98Dx2i3C/uYai9mOGCxiDQIIg1/PgUCEhyvDMox9PXYBkPzaaoAzAFL0yle7ShtqO/eWJ9w1vJ1oGsVzYhTNATMQG4Q1G40ldDw6PB339fs7VgMmA0jnHfioo6F9Z3tDYYJzKSZKMYcDvAILiICfZUNYEYFixMKpKBk8MfTTasBsACnngU/6Wg4+VL/VFSOmBHAYY1BAhzAvgmyMEIkh0EUOBD1Eu49eStwA5D3z4TcPv9TYdHvxEhXSGgaEIMkJkKAS+ONmSKYolOVqMBlRSd8bv8v/AQXlJoiHUE5rZ1tFa/Nhj1uVrCaNMoQxYSaIqDxAGqAuQ2XZ1iS8HUTpkZMXe1eATOdtiCcJblGe1a3PnWp0uEvfv3tbeX5RhSet/q3wxh6xgAncZUmw2hxEryQx9/LHE7I2RV5HNudGFAtcZsuQd919u/kiz56JOwobcjd6xerqKnB4HIB4RvMzCM1DGj8X0GD64pL2Xdf850z+4djKC8wl24XUpj1P75sdfe/+sSHoq3uQnSuwa+s2Vy5uubd2jQWUTAYchJK8HpyIzvv7p/rMkV/OzPeeGEWi+x6LufiR573h8VO7Zr4n9fEZNeiqXHOofFvPsKPkS1fKsX5JU6uNZQh8Wh/hRcuvOC3/fLXrcGj52yOo7zzU9udvbzbN9uglggK2MhsnvfiE0tY9tfed7vM98D+x53tx1DdG0Z2b97Ejf3SRSiGGCysyENvdoipZa4+/8NmPp8+N+Ei2ZEVpQhG71rdcqFFozD+xcoQugFUvlDS8wWsl8Uebk5C79ujjHwyc6R/309ysDBRauEzhJkG9ErAdG0xEe6yVkwqcr+549/zZgcmQ7pAEkH2TDG6RfwCoJI0uEWJP5QAAAABJRU5ErkJggg==");
        menuitem.setAttribute("oncommand", "handleCommand();");
        e.target.append(menuitem);
        addDestructor(() => menuitem.remove());
        menuitem.handleCommand = () => this.cmd();

        this.handleEvent = () => menuitem.hidden = !gContextMenu.onImage;
    },
    cmd() {
                var msg = this.msg = "UCF:GetImageScreenRectForMosuseZoom";
                var code = `(targetIdentifier => {
                    var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm")
                        .ContentDOMReference.resolve(targetIdentifier);
                    var mm = image.ownerGlobal.docShell.messageManager;
                    var rect = image.getBoundingClientRect();
                    var win = image.ownerGlobal;
                    var x = rect.left, y = rect.top;
                    var parentFrame = win.frameElement;
                    while (parentFrame) {
                      win = parentFrame.ownerGlobal;
                      let cstyle = win.getComputedStyle(parentFrame);
                      let framerect = parentFrame.getBoundingClientRect();
                      x +=
                        framerect.left +
                        parseFloat(cstyle.borderLeftWidth) +
                        parseFloat(cstyle.paddingLeft);
                      y +=
                        framerect.top +
                        parseFloat(cstyle.borderTopWidth) +
                        parseFloat(cstyle.paddingTop);
                      parentFrame = win.frameElement;
                    }
                      x += win.mozInnerScreenX;
                      y += win.mozInnerScreenY;
                    var fullZoom = win.windowUtils.fullZoom;
                    mm.sendAsyncMessage("${msg}",
                        {
                            src: image.currentSrc,
                            left: x * fullZoom,
                            top: y * fullZoom,
                            width: rect.width * fullZoom,
                            height: rect.height * fullZoom,
                        }
                    );
                })(`;
                messageManager.addMessageListener(msg, this);
        (this.cmd = () => {
            var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal;
            if (osPid == -1) osPid = Services.appinfo.processID;
            for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) {
                var pmm = Services.ppmm.getChildAt(ind);
                if (pmm.osPid == osPid) break;
            }
            pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent(
                code + JSON.stringify(gContextMenu.targetIdentifier) + ")"
            ), false);
        })();
    }
}, false, document.getElementById("contentAreaContextMenu") || 1);

Отредактировано ВВП (16-10-2021 10:22:27)

Отсутствует

 

№1590916-10-2021 05:45:55

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

Re: Custom Buttons

Приветствую всех! Как прочитать CSS (текстовый файл) в переменную? Данный код не работает:

Выделить код

Код:

var reader = new FileReader();
reader.readAsText('chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css');
var green = reader.result;

Второй вопрос: перестал работать CSS, переключающий стиль на любой странице на более подходящий для чтения. Остаётся только зелёный фон, а должен меняться и фон и текст.

Выделить код

Код:

/*AGENT_SHEET*/

@-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") {
html *, html {
background: #ccd1d1 !important; text-shadow: none !important;
color: #000000 !important;
-moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important; -moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important;
}
code, pre, input, samp, kbd, var, dfn,.postright {
-moz-appearance: none !important;
background-color: #BADBAD !important;
}
input, select, textarea, button {
-moz-appearance: none !important;
border: 1px solid #BADBAD !important;
background-color: #BADBAD !important;
}
.codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444  !important; -moz-border-bottom-colors: #444 !important;
-moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important; }
}

UCF - Кнопка переключения стиля страниц

Выделить код

Код:

try {	CustomizableUI.createWidget({ tooltiptext: `ЛКМ:	Reader`,
		type: "custom", id: "ucf_Reader", label: "Reader", localized: false,
		onBuild(doc) {
			var trbn = doc.createXULElement("toolbarbutton");
			trbn.id = this.id; trbn.tooltipText = this.tooltiptext; trbn.label = this.label;
			trbn.className = "toolbarbutton-1 chromeclass-toolbar-additional";
			trbn.setAttribute("context", false);
			trbn.style.setProperty("list-style-image", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACS0lEQVR4Xt1VIZCkMBBcGYlERiKRSCQSuTISiUQiVyJXIle8QCKRSOTJkyterDtU8t1cpipVl937f3mpmkuupnt6MjNhTz9v1XWdYi1Jkjit9YilXuGBGYDfySH3WwEAR2xODCLdi+BtiCX32+yVUg8cd5BvJPH/WGZVVRF790lM5ITYqGVZZkhAeVbnnOIOkivLMosIZPARu2ERu5DrY8QXQFNYFgTWsOoZviiKSsSlXBCan5VH84qwXUj/YuSAK2XSsYZJeZb/nUByfQWamHOmM8/z3hiTNU2T/q1A27YpOeTGysSGHeWRqZGrYuwm+J6Wiz5OkHDCGIwZn2eaUnJmNnfUN4/UPIfvPcahMeaX2qVa2/Y62mHdbD/NNitKK2OLF52gBAWNZ6yVPmKIJYdcxgh66buPRwKCI2janZ0eznEf3x9W57n1r3TjHp7pIybkUAjixH1Oo0xPZZoD+Ov37sRIaIbrIRAz+oi53T/x3MlBLEnKnND9leCW4IcIfBzGrIZlFYEd5TE0nmH0kQNsIIAYrU8Kk7id8Gf9zGZANqHAAXaXeQlrGvaMvi8C4a0ZmyU6E1zWZ1/LAyhgZy6D1H0QAX+m78AInlwKlOfzIcDYbLJ8Ilx/m+wcNOy6vXEqnH+ApQj4s6OPGGkyuYzBWPJl9RnpngSF7tdtZzuAzOUSjtwU+d2YvAixB4dcxvDZ9+FTVyDcggmxwUNbi6JIBRvcIqUvxoH42HWdiv0eNFB+4xWx32E9xJMX36CEGGI5++BvjHH6UesPIe4VKP0pWeUAAAAASUVORK5CYII=")', "important");
			trbn.addEventListener("click", function(e) {
				var win = e.view;
				if (e.button == 0) {

					var green = `
@-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") {
html *, html {
background: #ccd1d1 !important; text-shadow: none !important;
color: #000000 !important;
-moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important; -moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important;
}
code, pre, input, samp, kbd, var, dfn,.postright {
-moz-appearance: none !important;
background-color: #BADBAD !important;
}
input, select, textarea, button {
-moz-appearance: none !important;
border: 1px solid #BADBAD !important;
background-color: #BADBAD !important;
}
.codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444  !important; -moz-border-bottom-colors: #444 !important;
-moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important; }
a:link { color: #300090 !important;
}
a:visited { color: #489412 !important; }
a:active { color: #d81e1e !important; }
a:hover { color: #d81e1e !important; }
}`;
					var sss = this.sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
					var uri = this.uri = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService).newURI("data:text/css,"+ encodeURIComponent(green),null,null);

					function setStyleForPages( reason ) {
						var style = sss.sheetRegistered(uri, sss.AGENT_SHEET);
					style
						? sss.unregisterSheet(uri, sss.AGENT_SHEET)
						: sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
					};
					setStyleForPages();
					return;
				}
			}, false);
			return trbn;
		},
	});
} catch(e) {}

Отсутствует

 

№1591016-10-2021 06:12:26

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 93.0

Re: Custom Buttons

ВВП пишет

кн. "увел. изображение " лопнула..

Вот же рабочая №8293

Отсутствует

 

№1591116-10-2021 10:06:00

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

Re: Custom Buttons

voqabuhe
Класс !

Отсутствует

 

№1591216-10-2021 12:18:39

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

Re: Custom Buttons

Приветствую всех! Есть папка по пути C:\ФАЙЛЫ нужно вывести true или false в зависимости от того есть ли файл(ы) в папке. Папки не в счёт. Заранее благодарю!

Отредактировано Senflex (16-10-2021 12:21:41)

Отсутствует

 

№1591316-10-2021 13:41:30

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

Re: Custom Buttons

Dobrov пишет

Как прочитать CSS (текстовый файл) в переменную? Данный код не работает

Интересно, зачем бы это могло понадобиться.
FileReader здесь совсем неудобен. Мало того, что ему
в качестве аргумента нужен Blob или File, так он ещё и читает асинхронно.
Можно так:
var green = Cu.readUTF8URI(Services.io.newURI("chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css"));


Senflex пишет

Есть папка по пути C:\ФАЙЛЫ нужно вывести true или false в зависимости от того есть ли файл в папке.

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

Выделить код

Код:

var result = false, en = FileUtils.File("C:\\ФАЙЛЫ").directoryEntries;
while(en.hasMoreElements())
	if ((result = en.getNext().QueryInterface(Ci.nsIFile).isFile())) break;
alert(result);

Отсутствует

 

№1591416-10-2021 14:41:12

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

Re: Custom Buttons

Dumby
Как сюда Ваш код прилепить? this.onclick = e => e.button != 1 || gShowPopup(this);  ....Тут reload идет на СКМ ...Чет знает зачем.

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

Выделить код

Код:

/*Initialization Code*/
var src = "gBrowser.addTab = " + gBrowser.addTab.toString()
    .replace(/^(?!function )/, "function ");
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };    
this.tooltipText = "Л: См. ПАРОЛИ\nП: См. КУКИ"; 
(obj => {
    this.setAttribute("context", "");
    this.onclick = e => obj[e.button < 2](e);
})({
    true(e) {
        var domain = this.domain();
        if (!domain) return;

        this.cookies(domain);
        this.webappstore(domain);
        this.macromedia();

        if (e.button) for(var br of gBrowser.browsers) try {
            this.domain(br) == domain && br.reload();
        } catch(ex) {}
    },
    false(e) {
        e.ctrlKey || e.shiftKey ? gShowPopup(self) : this.window();
    },
    domain(br = gBrowser.selectedBrowser, res) {
        try {
            res = new URL(br.currentURI.spec).hostname;
            res = res.includes(".")
                ? Services.eTLD.getBaseDomainFromHost(res)
                : undefined;
        } finally {return res;}
    },
    remove(...args) {
        (this.remove = Services.cookies.remove.length == 4
            ? Services.cookies.remove
            : (h, n, p, a) => Services.cookies.remove(h, n, p, false, a)
        )(...args);
    },
    cookies(domain, has) {
        for(var {host, name, path, originAttributes, rawHost} of (
            Services.cookies.enumerator || Services.cookies.cookies
        )) Services.eTLD.hasRootDomain(rawHost, domain)
            && this.remove(host, name, path, originAttributes);
    },
    webappstore(domain) {
        var db = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]);
        var conn = Services.storage.openDatabase(db);
        conn.executeSimpleSQL(`DELETE FROM webappsstore2 WHERE scope LIKE "%${
            domain.split("").reverse().join("") + "."
        }%"`);
        conn.close();
    },
    macromedia() {
        var dir = Services.dirsvc.get("AppData", Ci.nsIFile);
        dir.append("Macromedia");
        dir.exists() && dir.isDirectory() && dir.remove(true);
        dir.create(dir.DIRECTORY_TYPE, 0o755);
    },
    get sdm() {
        this.url = "chrome://browser/content/preferences/dialogs/siteDataSettings.x" +
            (parseInt(Services.appinfo.platformVersion) <= 71 ? "ul" : "html");
        delete this.sdm;
        return this.sdm = ChromeUtils.import(
            "resource:///modules/SiteDataManager.jsm"
        ).SiteDataManager;
    },
    async window() {
        var domain = this.domain();
        var win = Services.wm.getMostRecentWindow("Browser:SiteDataSettings");
        win && win.close();

        await this.sdm.updateSites();
        win = openDialog(this.url, "_blank", "");
        if (!domain) return;

        await new Promise(resolve => 
            win.addEventListener("DOMContentLoaded", resolve, {once: true})
        );
        var list = win.document.getElementById("sitesList");
        list.clearSelection = () => {
            delete list.clearSelection;
            list.selectedIndex = 0;
            list.focus();
        }
        win.document.getElementById("searchBox").inputField.editor
            .QueryInterface(Ci.nsIPlaintextEditor).insertText(domain);
    }
});

Отсутствует

 

№1591516-10-2021 14:46:05

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 162
UA: Firefox 85.0

Re: Custom Buttons

.

Отредактировано ALEX_45_ORP (16-10-2021 14:46:30)


Win 10х64

Отсутствует

 

№1591616-10-2021 16:10:51

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

Re: Custom Buttons

ВВП пишет

Тут reload идет на СКМ ...Чет знает зачем

Что ещё за зачемки, эту просили перерисовать, вот и идёт.

прилепить

Ну, например, если много не менять, то удалить это:

if (e.button) for(var br of gBrowser.browsers) try {
            this.domain(br) == domain && br.reload();
        } catch(ex) {}

И после true(e) { добавить
        if (e.button) return gShowPopup(self);

Отсутствует

 

№1591716-10-2021 16:24:36

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

Re: Custom Buttons

Dumby

Dumby пишет

И после true(e) { добавить
        if (e.button) return gShowPopup(self);

Вроде так и делал , так да не так...Благодарю. Кстати, как культурно избавиться от trash в папке extensions ?  Рихтанул XPIProvider.jsm . Избавился от features в профиле, но эта шняга(trash) иногда вылазит. А в ней опять мутные аддоны...

Отредактировано ВВП (16-10-2021 18:19:50)

Отсутствует

 

№1591817-10-2021 10:12:55

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

Re: Custom Buttons

Dumby пишет

Интересно, зачем бы это могло понадобиться. «Как прочитать CSS (текстовый файл) в переменную?»

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

Отсутствует

 

№1591917-10-2021 14:58:39

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

Re: Custom Buttons

ВВП пишет

Избавился от features в профиле, но эта шняга(trash) иногда вылазит. А в ней опять мутные аддоны...

Не знаю, у меня нет в профиле features. А от «мутных аддонов»,
возможно, избавит DisableSystemAddonUpdate в policies.json


Dobrov пишет

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

Я не вижу здесь со стороны браузера какого-то отказа читать CSS самому.

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

Выделить код

Код:

(async () => CustomizableUI.createWidget({
	label: "Reader",
	tooltiptext: "ЛКМ:	Reader",
	id: "ucf_Reader",
	localized: false,
	onCreated(btn) {
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
		var args = [Services.io.newURI("chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css"), sss.AGENT_SHEET];
		var reg = () => (this.flag = !this.flag) ? sss.loadAndRegisterSheet(...args) : sss.unregisterSheet(...args);

		(this.onCreated = btn => {
			btn._handleClick = reg;
			btn.style.setProperty("list-style-image", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACS0lEQVR4Xt1VIZCkMBBcGYlERiKRSCQSuTISiUQiVyJXIle8QCKRSOTJkyterDtU8t1cpipVl937f3mpmkuupnt6MjNhTz9v1XWdYi1Jkjit9YilXuGBGYDfySH3WwEAR2xODCLdi+BtiCX32+yVUg8cd5BvJPH/WGZVVRF790lM5ITYqGVZZkhAeVbnnOIOkivLMosIZPARu2ERu5DrY8QXQFNYFgTWsOoZviiKSsSlXBCan5VH84qwXUj/YuSAK2XSsYZJeZb/nUByfQWamHOmM8/z3hiTNU2T/q1A27YpOeTGysSGHeWRqZGrYuwm+J6Wiz5OkHDCGIwZn2eaUnJmNnfUN4/UPIfvPcahMeaX2qVa2/Y62mHdbD/NNitKK2OLF52gBAWNZ6yVPmKIJYdcxgh66buPRwKCI2janZ0eznEf3x9W57n1r3TjHp7pIybkUAjixH1Oo0xPZZoD+Ov37sRIaIbrIRAz+oi53T/x3MlBLEnKnND9leCW4IcIfBzGrIZlFYEd5TE0nmH0kQNsIIAYrU8Kk7id8Gf9zGZANqHAAXaXeQlrGvaMvi8C4a0ZmyU6E1zWZ1/LAyhgZy6D1H0QAX+m78AInlwKlOfzIcDYbLJ8Ilx/m+wcNOy6vXEqnH+ApQj4s6OPGGkyuYzBWPJl9RnpngSF7tdtZzuAzOUSjtwU+d2YvAixB4dcxvDZ9+FTVyDcggmxwUNbi6JIBRvcIqUvxoH42HWdiv0eNFB+4xWx32E9xJMX36CEGGI5++BvjHH6UesPIe4VKP0pWeUAAAAASUVORK5CYII=")', "important");
		})(btn);
	}
}))();

Отсутствует

 

№1592017-10-2021 22:27:10

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

Re: Custom Buttons

Dumby

Dumby пишет

DisableSystemAddonUpdate в policies.json

Не понял...В schema.jsm есть это:
"DisableSystemAddonUpdate": {
      "type": "boolean"
    },

Отсутствует

 

№1592118-10-2021 05:08:16

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

Re: Custom Buttons


«The Truth Is Out There»

Отсутствует

 

№1592218-10-2021 09:57:20

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

Re: Custom Buttons

unter_officer
а на кой черт эта ссылка? Может какой-то закодированный смысл ?

Отсутствует

 

№1592319-10-2021 20:39:45

Пострел
Участник
 
Группа: Members
Зарегистрирован: 08-04-2021
Сообщений: 51
UA: Firefox 93.0

Re: Custom Buttons

Dumby,
Пожалуйста, если будет время и настроение, адаптируйте кнопку для Firefox 93.

Изменить уровень яркости экрана

Выделить код

Код:

const prefName = "Изменить уровень яркости экрана";

function getDarkLevel() {
	try {
		return cbu.ps.getIntPref(prefName);
	} catch (ex) {
		return 0;
	}
}

function getOpacity(aDarkLevel) {
	var opacity = 0;
	if (aDarkLevel === 50)
	opacity = aDarkLevel / 100;
	else
	opacity = (100 - aDarkLevel) / 100;
	return opacity;
}

function mouseWheel(aEvent) {
	var darkLevel = getDarkLevel();
	if (aEvent.detail > 0) {
		if (darkLevel < 100)
		darkLevel++;
		else
		aEvent.stopPropagation();
	}
	else {
		if (darkLevel > 0)
		darkLevel--;
		else
		aEvent.stopPropagation();     // else stop (min = 0)
	}
	gBrowser.style.opacity = getOpacity(darkLevel);
	cbu.ps.setIntPref(prefName, darkLevel);
}

this.onclick = function onclick(aEvent) {
	if (aEvent.button !== 1)
	return;
	gBrowser.style.opacity = "1";
	cbu.ps.setIntPref(prefName, 0);
}

this.addEventListener("DOMMouseScroll", mouseWheel);

var browser = document.getElementById("browser");
	browser.style.backgroundColor = "black";
	gBrowser.style.opacity = getOpacity(getDarkLevel());

this.tooltipText = this.name + "\n" + this.Help;

Отсутствует

 

№1592419-10-2021 23:33:44

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

Re: Custom Buttons

Dumby
Забыл как...Снова кнопку закачку поставил с YT.dl.exe ...Но закачка идет в каталог браузера, а надо там где сам D:\\Загрузки\\видео\\youtube-dl.exe

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

Выделить код

Код:

(func => {
	var sysPlayerName = "YTPlayer";
	var path = "D:\\Загрузки\\видео\\youtube-dl.exe";
	var videoMoved = "Видео перенесено в " + sysPlayerName;
	var noFound = "Не найдено видео на странице, доступное для переноса в " + sysPlayerName;

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

	this._handleClick = () => {
		var msgName = _id + ":Player";
		var listener = ({data}) => data ? run([data]) : notify();
                var listener = ({data}) => data ? run([data], true) : 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.onclick = 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 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);
			
		})(...a);
	}
	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);


А,по-наитию сменил на это, вроде заработало, не косяк?
process.init(FileUtils.File(String.raw`D:\Загрузки\видео\youtube-dl.exe`));
process.run(false, args, args.length);
Не, фуфло , пришлось так process.init(FileUtils.File(String.raw`D:\Загрузки\видео\youtube-dl.exe.lnk`));

Почему только через ярлык ?  D:\Загрузки\видео\youtube-dl.exe.lnk

Отредактировано ВВП (20-10-2021 16:04:31)

Отсутствует

 

№1592521-10-2021 15:33:30

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

Re: Custom Buttons

Пострел пишет

Пожалуйста, если будет время и настроение, адаптируйте кнопку для Firefox 93.

Не, я не понимаю почему там что-то сделано именно так,
а описание не предоставленно.
Но можешь завернуть код следующим образом, и должно работать

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

Выделить код

Код:

(gBrowser => {

	// Здесь этот код

})(document.getElementById("tabbrowser-tabpanels"));


Или вот вариант, но это не совсем то же самое
скрытый текст

Выделить код

Код:

((ovar, obs) => {
	this.appendChild(document.createElement("style")).append(
		"#tabbrowser-tabbox {background-color: black !important;}\n"
		+ `#tabbrowser-tabpanels {opacity: var(${ovar}) !important;}`
	);
	var pref = "CB.tabbrowser-tabpanels.opacity";
	var gp = () => Services.prefs.getIntPref(pref, 100);
	var sp = val => Services.prefs.setIntPref(pref, val);

	var st = document.documentElement.style;
	(obs = () => st.setProperty(ovar, gp() / 100, "important"))();
	Services.prefs.addObserver(pref, obs);

	this.onwheel = e => {
		var val = gp() + (e.deltaY < 0 ? 1 : -1);
		val < 0 || val > 100 || sp(val);
	}
	this.onauxclick = e => e.button != 1 || sp(100);

	addDestructor(reason => {
		st.removeProperty(ovar);
		Services.prefs.removeObserver(pref, obs);
		reason == "delete" && Services.prefs.clearUserPref(pref);
	});
})("--cb-tabbrowser-tabpanels-opacity");

ВВП пишет

Почему только через ярлык ?

Доку, видимо, стоит почитать.

For example for -o %(title)s-%(id)s.%(ext)s and an mp4 video with title youtube-dl test video and id BaW_jenozKcj,
this will result in a youtube-dl test video-BaW_jenozKcj.mp4 file created in the current directory.

Наверно можно и без ярлыка, если в коде (перед process.runwAsync) прописать

Выделить код

Код:

args.unshift("-o", "D:/Загрузки/видео/%(title)s-%(id)s.%(ext)s");

но это не то, что я могу проверить, сколько раз уже говорил.

Отредактировано Dumby (21-10-2021 15:35:16)

Отсутствует

 

Board footer

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