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

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

№1402606-01-2020 16:25:46

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

Отсутствует

 

№1402706-01-2020 20:01:35

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 72.0

Re: Custom Buttons

Может не в тему, но https://forum.mozilla-russia.org/viewto … 48#p773048
Кнопка(скрипт) auto-popup перестал работать с 72+, пробовал отдельно как uc.js похоже дело в коде, смотрел консоль но он молчит или.. в общем там много ошибок и ничего не понятно, не знаю вроде то что менялось в коде нет.
Да и код какой-то большой там половина лишняя похоже, надо лишь чтобы попап был в CB и менюшках, а аддоны не нужны.
Не знаю, если не получится придется искать... видел на гитхабе обновленный ну пол года назад, сейчас не тестил но там он тупо все открывает, и быстро, удалил.

Отредактировано func4ptch4 (06-01-2020 20:01:59)

Отсутствует

 

№1402807-01-2020 13:51:38

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

Re: Custom Buttons

Dumby Помогите пожалуйста!
в [firefox] 72.0 перестали работать кнопки
Ночной режим

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

Выделить код

Код:

(sss => {
    var pref = `CB.${_id.slice(20)}.setStyleForPage`;
    var url = "data:text/css," + encodeURIComponent(this.Help);
    var args = [Services.io.newURI(url), sss.AGENT_SHEET];
    var reg = add => {
        var has = sss.sheetRegistered(...args);
        if (add) has || sss.loadAndRegisterSheet(...args);
        else has && sss.unregisterSheet(...args);
    }
    var setState = () => {
        var state = Services.prefs.getBoolPref(pref, false);
        this.icon.style.backgroundColor = state ? "#696969" : "#CDBA96";
        reg(state);
    }
    setState();
    this._handleClick = () => Services.prefs.setBoolPref(
        pref, !Services.prefs.getBoolPref(pref, false)
    );
    Services.prefs.addObserver(pref, setState, false);
    addDestructor(reason => {
        Services.prefs.removeObserver(pref, setState);
        reason[5] == "e" && reg();
    });
})(
    Cc["@mozilla.org/content/style-sheet-service;1"]
        .getService(Ci.nsIStyleSheetService)
);

// Подсказка для кнопки .......... 
this.tooltipText = self.label + "\nЛ: Переключить черный фон страниц";


Поправте пожалуйста

Отредактировано egorsemenov06 (07-01-2020 16:59:50)

Отсутствует

 

№1402907-01-2020 14:45:48

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 286
UA: Firefox 72.0

Re: Custom Buttons

egorsemenov06
У меня на 72 вот такая кнопка перевода в Google работает

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

Выделить код

Код:

/*Initialization Code*/
  
var lc = navigator.lastClick = {};
addEventListener("mouseup", e => {
    if (e.button) return;
    lc.X = e.screenX - mozInnerScreenX;
    lc.Y = e.screenY - mozInnerScreenY;
}, false, gBrowser.tabpanels || 1);

var createWindow = function(text, status, title, id, pos, size){
var win = window, doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId);
    var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()};
    if(w)w.closeWin();
    w = doc.createElementNS(xhtmlns, 'div');
    w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
    w.id = wId;
    w.closeWin = function(){
        doc.removeEventListener('keydown', keyDown, false);
        this.parentNode.removeChild(this);
    };
    w.addEle = function(str, style){
        var ele = doc.createElementNS(xhtmlns, 'div');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }
                else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
    img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
    img.addEventListener('click', function(){this.parentNode.closeWin()}, false);
    w.appendChild(img);
    var title = w.addEle(title, 'display:table;color:#000;font:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
        title.onclick = e => {
        e.preventDefault();
        var url = e.target.href;
        // Здесь открываем url как хотим.
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
    }
    var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;');
    w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    w.addEventListener('mousedown', function(e){
        if(e.target == w){
            e.preventDefault();
            var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top);
            var mouseMove = function(ev){
                w.style.left = origX+ev.clientX-grabX+'px';
                w.style.top = origY+ev.clientY-grabY+'px';
            };
            doc.addEventListener('mousemove', mouseMove, false);
            doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false);
        }
    }, false);
    doc.documentElement.appendChild(w);
  
    if(size){
        cnt.style.height = size.height;
        cnt.style.width = size.width;
    }
    else{
        for(var i = 3; i < 10; i++){
            if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){
                cnt.style.height = 50*i+'px';
                cnt.style.width = 100*i+'px';
            }
            else break;
        }
    };

    var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
    var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight;
    if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0};
    if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0};
    var hW = parseInt(w.offsetWidth/2);
    w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px';
    w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px';
    w.style.visibility = 'visible';
    doc.addEventListener('keydown', keyDown, false);
    return w;
};

var getHash = function (txt) {
    TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())');
    function sM(a) {
        var b;
        if (null !== yr)
            b = yr;
        else {
            b = wr(String.fromCharCode(84));
            var c = wr(String.fromCharCode(75));
            b = [b(), b()];
            b[1] = c();
            b = (yr = window[b.join(c())] || "") || ""
        }
        var d = wr(String.fromCharCode(116))
            , c = wr(String.fromCharCode(107))
            , d = [d(), d()];
        d[1] = c();
        c = "&" + d.join("") + "=";
        d = b.split(".");
        b = Number(d[0]) || 0;
        for (var e = [], f = 0, g = 0; g < a.length; g++) {
            var l = a.charCodeAt(g);
            128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
                e[f++] = l >> 18 | 240,
                e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
                e[f++] = l >> 6 & 63 | 128),
                e[f++] = l & 63 | 128)
        }
        a = b;
        for (f = 0; f < e.length; f++)
            a += e[f],
                a = xr(a, "+-a^+6");
        a = xr(a, "+-3^+b+-f");
        a ^= Number(d[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return c + (a.toString() + "." + (a ^ b))
    }

    var yr = null;
    var wr = function(a) {
        return function() {
            return a
        }
    }
        , xr = function(a, b) {
        for (var c = 0; c < b.length - 2; c += 3) {
            var d = b.charAt(c + 2)
                , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d)
                , d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
            a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
        }
        return a
    }; 

    return sM(txt);
}; 
 
  
 
var ujs_google_translate = function (dir){
    var lng = window.navigator.language.slice(0, 2), txt = gContextMenu.selectionInfo.fullText, l = dir.split('|');
    var encTxt = encodeURIComponent(txt);
    var winWait = function(lng){createWindow('', (lng == 'ru' ? '\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u0438\u043C' : 'Translating')+'\u2026', 'Google Translate', '_gt', window.navigator.lastClick)};
    
    if (txt) {
   
        winWait(lng);
    
        var xhr = new XMLHttpRequest();
        var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
        var urle = "http://translate.google.com/translate_t?text="+encTxt+"&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&ujs=gtt";
                  
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
        xhr.onreadystatechange = function() {
            try{
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0'));
                    for(var i = 0, n; n = tmp[0][i]; i++){
                        if(n[0])result += n[0].toString();
                    };
                    result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>';
                    status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
                    createWindow(result, status, '<a href="'+urle.replace(/&/g,'&amp;')+'"  style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
                }
            } catch (x){LOG(x)};
        };
        xhr.send('q=' + encodeURIComponent(txt));
    } else {
        var urlt = gBrowser.currentURI.spec;  
        var url = "http://translate.google.com/translate?u="+encodeURIComponent(urlt)+"&hl="+lng+"&langpair="+dir+"&tbb=1";
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
    };
};

var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-google-translate";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem);
};

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Перевести на русский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("label", "Перевести на английский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII=");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

contextMenu.insertBefore(document.createXULElement("menuseparator"), nextEleMenu);

Отредактировано Garalf (07-01-2020 14:46:47)

Отсутствует

 

№1403007-01-2020 15:13:40

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

Re: Custom Buttons

Garalf пишет

egorsemenov06
У меня на 72 вот такая кнопка перевода в Google работает

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

Выделить код

Код:

/*Initialization Code*/
  
var lc = navigator.lastClick = {};
addEventListener("mouseup", e => {
    if (e.button) return;
    lc.X = e.screenX - mozInnerScreenX;
    lc.Y = e.screenY - mozInnerScreenY;
}, false, gBrowser.tabpanels || 1);

var createWindow = function(text, status, title, id, pos, size){
var win = window, doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId);
    var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()};
    if(w)w.closeWin();
    w = doc.createElementNS(xhtmlns, 'div');
    w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
    w.id = wId;
    w.closeWin = function(){
        doc.removeEventListener('keydown', keyDown, false);
        this.parentNode.removeChild(this);
    };
    w.addEle = function(str, style){
        var ele = doc.createElementNS(xhtmlns, 'div');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }
                else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
    img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
    img.addEventListener('click', function(){this.parentNode.closeWin()}, false);
    w.appendChild(img);
    var title = w.addEle(title, 'display:table;color:#000;font:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
        title.onclick = e => {
        e.preventDefault();
        var url = e.target.href;
        // Здесь открываем url как хотим.
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
    }
    var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;');
    w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    w.addEventListener('mousedown', function(e){
        if(e.target == w){
            e.preventDefault();
            var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top);
            var mouseMove = function(ev){
                w.style.left = origX+ev.clientX-grabX+'px';
                w.style.top = origY+ev.clientY-grabY+'px';
            };
            doc.addEventListener('mousemove', mouseMove, false);
            doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false);
        }
    }, false);
    doc.documentElement.appendChild(w);
  
    if(size){
        cnt.style.height = size.height;
        cnt.style.width = size.width;
    }
    else{
        for(var i = 3; i < 10; i++){
            if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){
                cnt.style.height = 50*i+'px';
                cnt.style.width = 100*i+'px';
            }
            else break;
        }
    };

    var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
    var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight;
    if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0};
    if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0};
    var hW = parseInt(w.offsetWidth/2);
    w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px';
    w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px';
    w.style.visibility = 'visible';
    doc.addEventListener('keydown', keyDown, false);
    return w;
};

var getHash = function (txt) {
    TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())');
    function sM(a) {
        var b;
        if (null !== yr)
            b = yr;
        else {
            b = wr(String.fromCharCode(84));
            var c = wr(String.fromCharCode(75));
            b = [b(), b()];
            b[1] = c();
            b = (yr = window[b.join(c())] || "") || ""
        }
        var d = wr(String.fromCharCode(116))
            , c = wr(String.fromCharCode(107))
            , d = [d(), d()];
        d[1] = c();
        c = "&" + d.join("") + "=";
        d = b.split(".");
        b = Number(d[0]) || 0;
        for (var e = [], f = 0, g = 0; g < a.length; g++) {
            var l = a.charCodeAt(g);
            128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
                e[f++] = l >> 18 | 240,
                e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
                e[f++] = l >> 6 & 63 | 128),
                e[f++] = l & 63 | 128)
        }
        a = b;
        for (f = 0; f < e.length; f++)
            a += e[f],
                a = xr(a, "+-a^+6");
        a = xr(a, "+-3^+b+-f");
        a ^= Number(d[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return c + (a.toString() + "." + (a ^ b))
    }

    var yr = null;
    var wr = function(a) {
        return function() {
            return a
        }
    }
        , xr = function(a, b) {
        for (var c = 0; c < b.length - 2; c += 3) {
            var d = b.charAt(c + 2)
                , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d)
                , d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
            a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
        }
        return a
    }; 

    return sM(txt);
}; 
 
  
 
var ujs_google_translate = function (dir){
    var lng = window.navigator.language.slice(0, 2), txt = gContextMenu.selectionInfo.fullText, l = dir.split('|');
    var encTxt = encodeURIComponent(txt);
    var winWait = function(lng){createWindow('', (lng == 'ru' ? '\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u0438\u043C' : 'Translating')+'\u2026', 'Google Translate', '_gt', window.navigator.lastClick)};
    
    if (txt) {
   
        winWait(lng);
    
        var xhr = new XMLHttpRequest();
        var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
        var urle = "http://translate.google.com/translate_t?text="+encTxt+"&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&ujs=gtt";
                  
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
        xhr.onreadystatechange = function() {
            try{
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0'));
                    for(var i = 0, n; n = tmp[0][i]; i++){
                        if(n[0])result += n[0].toString();
                    };
                    result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>';
                    status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
                    createWindow(result, status, '<a href="'+urle.replace(/&/g,'&amp;')+'"  style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
                }
            } catch (x){LOG(x)};
        };
        xhr.send('q=' + encodeURIComponent(txt));
    } else {
        var urlt = gBrowser.currentURI.spec;  
        var url = "http://translate.google.com/translate?u="+encodeURIComponent(urlt)+"&hl="+lng+"&langpair="+dir+"&tbb=1";
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
    };
};

var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-google-translate";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem);
};

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Перевести на русский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("label", "Перевести на английский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII=");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

contextMenu.insertBefore(document.createXULElement("menuseparator"), nextEleMenu);

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

Отсутствует

 

№1403107-01-2020 18:43:56

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

Re: Custom Buttons

egorsemenov06 пишет

Ночной режим

А что с ней не так?
Она же только регистрацию стиля со Справки переключает.
У меня работает даже на втором билде Firefox 74.0a1

Отсутствует

 

№1403207-01-2020 18:51:56

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

Re: Custom Buttons

Dumby пишет
egorsemenov06 пишет

Ночной режим

А что с ней не так?
Она же только регистрацию стиля со Справки переключает.
У меня работает даже на втором билде Firefox 74.0a1

ни фига она не переключает стиль
только на одном фейсбуке включается и все

Отредактировано egorsemenov06 (08-01-2020 10:21:06)

Отсутствует

 

№1403308-01-2020 09:27:41

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 72.0

Re: Custom Buttons

Нашел тот AutoPopup.uc.js, но он не универсальный, работает только на аддоны и на гамбургер-меню, не на всех менюшках как тут(не работает на CB), когда проверял на 71 работал везде. Больше тот код(старый) интересует его реанимировать никак? нашел еще такой код, но это же ... столько кнопок, сколько меню, да и работает ли не ясно.
Можно просто маленький код для CB и стандартные окна фф(меню и т.д.) без аддонов сделать?
Хоть пошлите а то сижу как не знаю кто думаю может кто заметит, или хотя бы скажите что трудно и делать не будете, хоть какой-то отклик а то будто самому себе пишу. Прошлый раз писал про кнопку, там код маленький и по теме так тоже игнор, я тут под игнором?

Отредактировано func4ptch4 (08-01-2020 10:02:00)

Отсутствует

 

№1403408-01-2020 15:04:42

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

Re: Custom Buttons

Dumby подскажи что изменить в кнопке для 72. Кнопка работает, если включить и выключить персонализацию

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

Выделить код

Код:

/*Initialization Code*/
this.type != "menu" ? this.type = "menu" : (popup => {
    var inserter = {
        get docShell() {
            delete this.docShell;
            return this.docShell = "docShell" in document
                && document.docShell instanceof Ci.nsIDocShell
                ? document.docShell : window.docShell;
        },
        get insertText() {
            delete this.insertText;
            return this.insertText = text => {
                if (!this.docShell.isCommandEnabled("cmd_insertText")) return;
                var params = "createCommandParams" in Components.utils
                    ? Cu.createCommandParams()
                    : Components.classes["@mozilla.org/embedcomp/command-params;1"]
                        .createInstance(Components.interfaces.nsICommandParams);
                params.setStringValue("state_data", text);
                this.docShell.doCommandWithParams("cmd_insertText", params);
            }
        },
        insert(text) {
            var br = document.activeElement;
            !br || br.localName != "browser" || !br.isRemoteBrowser
            ? this.insertText(text) : br.messageManager.loadFrameScript(
                `data:,(${this.insertText})${encodeURIComponent(text.toSource())}`
            , false, true);
        }
    };
    this.onmousedown = e => {
        if (e.button) return;
        this.onmousedown = null;

        var data, save = () => {
            var link = custombuttons.makeButtonLink("update", _id);
            var params = custombuttons.cbService.getButtonParameters(link).wrappedJSObject;
            params.help = JSON.stringify(data, null, "\t");
            custombuttons.cbService.installButton(params.wrappedJSObject = params);
        }
        popup.setAttribute("context", "");
        popup.setAttribute("onpopupshowing", "firstChild.disabled = !gClipboard.read();");

        popup.add = () => save(data.push(gClipboard.read()));

        var menuitem = popup.appendChild(document.createXULElement("menuitem"));
        menuitem.setAttribute("label", "Добавить из буфера");
        menuitem.setAttribute("oncommand", "parentNode.add();");

        if (!(data = JSON.parse(this.Help || "[]")).length) return;

        popup.insert = ind => inserter.insert(data[ind]);
        popup.delete = ind => save(data.splice(ind, 1));

        var df = document.createDocumentFragment();
        df.append(document.createXULElement("menuseparator"));

        var menugroup = df.appendChild(document.createXULElement("menugroup"));
        menugroup.setAttribute("oncommand", "parentNode.insert(event.target.index);");
        menugroup.setAttribute("orient", "vertical");
        menugroup.setAttribute("context", "_child");

        var context = menugroup
            .appendChild(document.createXULElement("menupopup"))
            .appendChild(document.createXULElement("menuitem"));
        context.setAttribute("label", "Удалить элемент?");
        context.setAttribute("oncommand", "event.stopPropagation(); menupopup.delete(popupNode.index);");
        context.menupopup = popup;

        data.forEach((text, ind) => {
            var menuitem = menugroup.appendChild(document.createXULElement("menuitem"));
            menuitem.setAttribute("label", text.trimLeft().replace(/\s+/g, " ").slice(0, 70));
            menuitem.index = ind;
        });
        popup.append(df);
    }
})(this.appendChild(document.createXULElement("menupopup")));


и еще одна нарисовалась
скрытый текст

Выделить код

Код:

/*Initialization Code*/
window.arycb_BBCodeClipboardStrings = this.clipboardStrings = [];   // Массив буфера обмена

// -------------------------------------------------------
// Функция fHLD_Get_ListClipboardPrim 
// получить список сохранёного буфера обмена
//
fnHLD_Get_ListClipboardPrim = function (){
var cs = arycb_BBCodeClipboardStrings; 
return (cs.slice(0)); 
}; 

//Список сохранёного буфера обмена
//Не вызываем это, обработка по таймеру или по событию ЛКМ
//-----Обработчики буфера обмена

this.MAX_ENTRIES = 16;               //Максимальное число записей 16
this.CHECK_INTERVAL = 1000;      //Время опроса буфера 1000 миллисекунд
this.type = "menu";
this.orient = "horizontal";
this._menupopup = this.appendChild(document.createXULElement("menupopup"));
this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);");

this.checkClipboard = function() {
    var clipStr = readFromClipboard();
    if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1)
        this.storeString(clipStr);
};

this.storeString = function(str) {
    var cs = this.clipboardStrings;
    cs.push(str);
    while(cs.length > this.MAX_ENTRIES)
        cs.shift(); 

    var mi = document.createXULElement("menuitem");
    mi.setAttribute("label", str);
   

    this._menupopup.appendChild(mi);
    while(this._menupopup.childNodes.length > this.MAX_ENTRIES)
        this._menupopup.removeChild(this._menupopup.firstChild);
};

this.handleCommand = function(mi) {
    var indx = Array.indexOf(mi.parentNode.childNodes, mi);
    if(indx != -1)
        inserter.insert(this.clipboardStrings[indx]);
};

var inserter = {
        get docShell() {
            delete this.docShell;
            return this.docShell = "docShell" in document
                && document.docShell instanceof Ci.nsIDocShell
                ? document.docShell : window.docShell;
        },
        get insertText() {
            delete this.insertText;
            return this.insertText = text => {
                if (!this.docShell.isCommandEnabled("cmd_insertText")) return;
                var params = "createCommandParams" in Components.utils
                    ? Cu.createCommandParams()
                    : Components.classes["@mozilla.org/embedcomp/command-params;1"]
                        .createInstance(Components.interfaces.nsICommandParams);
                params.setStringValue("state_data", text);
                this.docShell.doCommandWithParams("cmd_insertText", params);
            }
        },
        insert(text) {
            var br = document.activeElement;
            !br || br.localName != "browser" || !br.isRemoteBrowser
            ? this.insertText(text) : br.messageManager.loadFrameScript(
                `data:,(${this.insertText})${encodeURIComponent(text.toSource())}`
            , false, true);
        }
    };

setInterval(function(button) {
    button.checkClipboard();
}, this.CHECK_INTERVAL, this);

this.setAttribute("onpopupshowing", "this.checkClipboard();");


var ios = Components.classes["@mozilla.org/network/io-service;1"].
  getService(Components.interfaces.nsIIOService);
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].
  getService(Components.interfaces.nsIStyleSheetService);
  
var css = new String();
css = css + '@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");';
css = css + 'tooltip[label^="' + this.label + '\\000a\\000a"] {';
css = css + "-moz-appearance: none !important;";
css = css + "border: 1px solid silver !important;";
css = css + "max-width: none !important;";
css = css + "background: black !important;";
css = css + "color: silver !important;";
css = css + "font-family: monospace !important;";
css = css + "}";
var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null);

if (!sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.loadAndRegisterSheet(uss, sss.AGENT_SHEET);
this.onDestroy = function(reason) {
  if (reason == "update") {
    if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET);
  }
  if (reason == "delete") {
    if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET);
  }
}

this.showClipboard = function() {
  var code = custombuttons.cbService.readFromClipboard();
 this.tooltipText = code ? this.label + "\n\n" + code: this.label;
}
this.setAttribute("onmouseover", "this.showClipboard()");


В последней требуется заменить Array.indexOf (на что?)
скрытый текст

Выделить код

Код:

this.handleCommand = function(mi) {
    var indx = Array.indexOf(mi.parentNode.childNodes, mi);
    if(indx != -1)
        inserter.insert(this.clipboardStrings[indx]);
};

Отредактировано Andrey_Krropotkin (08-01-2020 15:54:47)

Отсутствует

 

№1403508-01-2020 17:27:32

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

Re: Custom Buttons

func4ptch4 пишет

Хоть пошлите а то сижу как не знаю кто думаю может кто заметит, или хотя бы скажите что трудно и делать не будете, хоть какой-то отклик а то будто самому себе пишу. Прошлый раз писал про кнопку, там код маленький и по теме так тоже игнор, я тут под игнором?

Это про «New Button at Right from current»?
Если так, то да, небольшой момент игнора есть.

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

А насчёт трудно, для меня, например, да.
Просидел несколько часов, и ничего не получилось.

Andrey_Krropotkin пишет

подскажи что изменить

Первую строку.
Там, как-бы, небольшая оптимизация под XBL, чтобы
код не исполнялся целиком при переинициализации,
которая происходила при установке this.type = "menu"

Но XBL теперь тю-тю, а при соответствующей переделке в CB,
я не стал делать какую-либо специальную мимикрию,
чтобы принудително имитировать эту особенность кнопок.

Получилась некая несовместимость, но, думаю,
так оформленных кнопок не должно быть много.
Вобщем, попробуй заменить на

(this.type != "menu" && (this.type = "menu") && !this.hasAttribute("is")) || (popup => {

Andrey_Krropotkin пишет

требуется заменить Array.indexOf (на что?)

Парочка вариантов

    var indx = Array.prototype.indexOf.call(mi.parentNode.childNodes, mi);

    var indx = Array.from(mi.parentNode.childNodes).indexOf(mi);

Отсутствует

 

№1403608-01-2020 17:39:21

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

Re: Custom Buttons

Dumby спасибо, все работает

Отсутствует

 

№1403711-01-2020 04:22:14

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Вопрос к знающим людям.
Если мне надо получить список линков на текущей странице, я получаю это так:
var links = window.document.getElementsByTagName("a");
и alert(links.lenght) говорит сколько на ней линков
Как мне получить список линков на другой странице, заданной url?
Я пытался сделать это так:
var g = document.createElement("window");
g.src = 'https://youtu.be/8PvVaYmjlk4';
var links = g.document.getElementsByTagName("a");
alert(links.lenght);

Однако
var links = g.document.getElementsByTagName("a");
всё портит - до алерта вообще не доходит.
Как же мне получить список линков на другой странице, заданной url, удалённо, то есть не заходя на неё?

Отредактировано difabor (11-01-2020 04:29:04)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1403811-01-2020 05:11:49

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 431
UA: unknown 0.0

Re: Custom Buttons

difabor.  Есть у мя такая ф-ция для этого дела. Как на 57+ не знаю, пользуюсь на PM и >57 .
Т.к. это все находися в меню, то сделано через this.  Замени на function  getUrls() {  и вызывай отдельно.

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

Выделить код

Код:

// ---------------------------- Взять все Ссылки на странице ----------------------------------------------------------------   
 this.getUrls =()=> {
     const foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
      let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      let prof = Services.dirsvc.get('ProfD', Ci.nsIFile);
       prof.append("custombuttons");
       prof.append("urllist" + Math.random() + ".txt");     

 let win = document.commandDispatcher.focusedWindow, doc = win.document;
 let sel = doc, winSel = win.getSelection();

    if(winSel.toString()){
       sel = doc.createElement('div');
       sel.appendChild(winSel.getRangeAt(0).cloneContents());
       };

   let str = '', links = sel.getElementsByTagName('a');
       for(let i = 0, lnk; lnk = links[i]; i++) {
         if(lnk.href)str += lnk.href + '\r\n'
         };

// в буфер берем домен сайта, для своих нужд. другая ф-ция берет домен, здесь не привожу.
//      gClipboard.write(getDomain());

     foStream.init(prof, 0x02|0x08|0x20, 0666, 0);
     foStream.write(str, str.length);
     foStream.close();
     launchAP(prof);
// можно просто сразу запустить файл с сылками в текстовом редакторе ОС. 
// тогда то шо ниже разделителя убрать\закоментить 
//     file.launch(); 
// ----------------------------------------------------------------------------

function launchAP(file) {
      progPath = PROF.path + "\\SOFT_PM\\AkelPad-my\\sAkelPad.cmd";
     arg = [file.path];
      startProcess(progPath, arg);  // тоже другая ф-ция, проверяет параметры, наличие файла и запускает программу. не стандартная. не привожу(есть тут на форуме)
     }
// -----------------------------------------------------------------------------
  };

Добавлено 11-01-2020 05:16:19
ай, не понял что надо. Звиняй, не то.
Надо ж наверное загрузить этот документ который в window  и только потом считать ссылки. Онож незагруженно и ничего не считает КМК.

Отредактировано mokujin (11-01-2020 05:16:19)


...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation

Отсутствует

 

№1403911-01-2020 07:03:40

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

mokujin пишет

difabor.  Есть у мя такая ф-ция для этого дела. Как на 57+ не знаю, пользуюсь на PM и >57 .
Т.к. это все находися в меню, то сделано через this.  Замени на function  getUrls() {  и вызывай отдельно.
...
Добавлено 11-01-2020 05:16:19
ай, не понял что надо. Звиняй, не то.
Надо ж наверное загрузить этот документ который в window  и только потом считать ссылки. Онож незагруженно и ничего не считает КМК.

Спасибо, mokujin!
Вот мне и нужно как-то загрузить этот документ...
Причём, я хочу это сделать скриптом и не зависеть ни от СВ ни от браузера.
Моя мозилла полетела с треском, я уже неделю её пытаюсь привести в чувство, пока сижу на Гугл Хроме и пытаюсь что-то наворотить на Тамперманки (аналог Грэйсманки)

Отредактировано difabor (11-01-2020 07:08:51)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404011-01-2020 08:54:16

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

Re: Custom Buttons

difabor попробуй

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

Выделить код

Код:

javascript:var sLFd=document,DlnK=document.links;sLFw=window.name;w=window.open();w.document.write('<base%20target='+sLFw+'><b>%20Всего%20ссылок '+DlnK.length+' с</b>:<br><b>'+sLFd.title+'</b><br>'+sLFd.URL.link(sLFd.URL)+'<hr>');for(lNK=0;lNK<DlnK.length;lNK++) w.document.write('<p>'+'<b>'+lNK+'. '+'</b>'+DlnK[lNK].text+'&nbsp;'+DlnK[lNK].href.link(DlnK[lNK]));


Dumby в этом коде на 72 не определяется селектор в var elm = doc.querySelector(selectors.shift());
скрытый текст

Выделить код

Код:

//Добавыть в контекстное меню страницы пункт "Запомнить изображение как base64"..........................................................................................
(popup => addEventListener("popupshowing", {
    handleEvent(e) {
        if (this.shouldHide) return;

        var menuitem = document.createXULElement("menuitem");
        menuitem.id = "content-baseItem";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("oncommand", "copyImageAsBase64()");
        menuitem.setAttribute("label", "Запомнить изображение как base64");
        menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ==");
        popup.append(menuitem);
        addDestructor(() => menuitem.remove());

        menuitem.copyImageAsBase64 = () => gBrowser.selectedBrowser.messageManager
            .loadFrameScript("data:;charset=utf-8," + encodeURIComponent(this.code()), false);

        this.handleEvent = () => menuitem.hidden = this.shouldHide;
    },
    get shouldHide() {
        return !gContextMenu.onImage;
    },
    code: () => `(selectors => {

        var getImage = doc => {
            var elm = doc.querySelector(selectors.shift());
            if (selectors.length) elm = getImage(elm.contentDocument);
            return elm;
        }
        var image = getImage(content.document);

        var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas");
        canvas.width = image.naturalWidth;
        canvas.height = image.naturalHeight;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(image, 0, 0);
        var base64 = canvas.toDataURL();

        Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper)
            .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard);

        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
            .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64");
    })(${
        JSON.stringify(gContextMenu.targetSelectors)
    })`
}, false, popup || 1))(document.getElementById("contentAreaContextMenu"));


а такая же беда только в другом куске коде для for(var sel of selectors)
скрытый текст

Выделить код

Код:

cmd() {
        var msg = "CB:GetImageScreenRectForMosuseZoom";
        var code = `(selectors => {
            var doc = content.document;
            for(var sel of selectors) {
                var node = doc.querySelector(sel);
                node instanceof HTMLImageElement
                    ? sendAsyncMessage("${msg}", Object.assign(
                        {src: node.currentSrc}, BrowserUtils.getElementBoundingScreenRect(node)
                    )) : doc = node.contentDocument;
            }
        })(`;
        messageManager.addMessageListener(msg, this);
        addDestructor(() => messageManager.removeMessageListener(msg, this));


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

Отредактировано Andrey_Krropotkin (11-01-2020 13:59:18)

Отсутствует

 

№1404111-01-2020 13:59:07

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Я что-то совсем не понял.
Мне нужно как-то загрузить документ со страницы, например, https://lenta.ru/, а нахожусь я на другой странице, напр. на этом форуме.
Как это сделать?
Когда я пытаюсь определить некую переменную g как var g = document.createElement("window");
то g.src = 'https://lenta.ru/'; для объекта window не релевантно: он не создаёт полноценно этот объект
Когда же я пытаюсь определить g как var g = document.createElement("iframe");,
то b]g.src = 'https://lenta.ru/';[/b]  релевантно для объекта iframe,
но для iframe не релевантно var links = g.document.getElementsByTagName("a"); которое релевантно для window
Получается замкнутый (для меня) круг:
Я не могу создать g как window т.к. для него вообще не релевантно g.src,
и хотя могу создать g как iframe, но не знаю, как получить от него список линков,
поскольку для iframe не релевантно вот это: g.document.getElementsByTagName("a");
Получается замкнутый круг...

Отредактировано difabor (11-01-2020 14:02:08)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404211-01-2020 14:12:31

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

Re: Custom Buttons

difabor да я Вас не дочитал до конца, этот скрипт дает ссылки с текущей страницы, на которой Вы находитесь. Попробую доделать

Отсутствует

 

№1404311-01-2020 15:28:24

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Andrey_Krropotkin пишет

difabor да я Вас не дочитал до конца, этот скрипт дает ссылки с текущей страницы, на которой Вы находитесь. Попробую доделать

Спасибо, Андрей.
Мне нужно создать объект по урл который будет содержать линки, подобно объекту window и знать как получить список этих линков.
Собственно говоря, число линков мне особо не важно - я просто с помощью alert(links.length) проверяю или я получил линки в переменную links или не получил.
Для меня самое важное - получить линки в некую переменную, которую я обозвал links.
Если я на текущей странице - у меня нет проблем, я получаю линки так:
var links = window.document.getElementsByTagName("a");
и дальше знаю, что с этим делать.
Проблема в том, что я не знаю как создать объект типа window, задав урл (подобно iframe),
а если я создаю объект типа iframe по урл, то не знаю как получить линки типа ххх.document.getElementsByTagName("a");
То есть мне нужно:
- либо знать как можно получить объект типа window но с заданным урл, тогда дальше я знаю, что делать,
- либо знать как от объекта iframe получить список линков (я ведь даже не знаю, содержит iframe линки подобно window или нет);
Если я получу список линков, дальше я сам знаю что делать.

Отредактировано difabor (11-01-2020 15:37:16)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404411-01-2020 16:33:40

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

Re: Custom Buttons

difabor там чуть посложней будет, чтобы получить линки в некую переменную - links, надо скорей всего формировать GET запрос страницы, получить ответ и вставить, примерно как перевод в окне.

Отсутствует

 

№1404511-01-2020 16:57:57

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Andrey_Krropotkin пишет

difabor там чуть посложней будет, чтобы получить линки в некую переменную - links, надо скорей всего формировать GET запрос страницы, получить ответ и вставить, примерно как перевод в окне.

А как это сделать?
Допустим, я хочу получить линки от https://lenta.ru/, находясь на другой странице, напр. на этой странице форума.
Что значит "вставить, примерно как перевод в окне"?

Отредактировано difabor (11-01-2020 17:08:20)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404611-01-2020 17:50:19

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 140
UA: Firefox 68.0

Re: Custom Buttons

Привет всем,с прошедшими!
Для 68й есть код-кнопка,для запуска программ?И вот эту под 68ю никто не адаптировал?

Отсутствует

 

№1404711-01-2020 20:04:00

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

Re: Custom Buttons

Andrey_Krropotkin пишет

на 72 не определяется селектор

Ну да, нету больше никаких селекторов,
всё окончательно переделали под Fission.
Теперь примерно как-то так, наверно

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

Выделить код

Код:

(popup => addEventListener("popupshowing", {
    handleEvent(e) {
        if (this.shouldHide) return;

        var menuitem = document.createXULElement("menuitem");
        menuitem.id = "content-baseItem";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("oncommand", "copyImageAsBase64()");
        menuitem.setAttribute("label", "Запомнить изображение как base64");
        menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ==");
        popup.append(menuitem);
        addDestructor(() => menuitem.remove());

        menuitem.copyImageAsBase64 = () => {
            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(this.code()), false);
        }
        this.handleEvent = () => menuitem.hidden = this.shouldHide;
    },
    get shouldHide() {
        return !gContextMenu.onImage;
    },
    code: () => `(targetIdentifier => {

        var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm")
            .ContentDOMReference.resolve(targetIdentifier);

        var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas");
        canvas.width = image.naturalWidth;
        canvas.height = image.naturalHeight;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(image, 0, 0);
        var base64 = canvas.toDataURL();

        Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper)
            .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard);

        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
            .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64");
    })(${
        JSON.stringify(gContextMenu.targetIdentifier)
    })`
}, false, popup || 1))(document.getElementById("contentAreaContextMenu"));

Отсутствует

 

№1404811-01-2020 21:01:23

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

Re: Custom Buttons

Вопрос к знатокам.

Все в курсе, что при заходе на сайты по HTTPS браузер проверяет сертификат и показывает разные иконки 1-connection-secure.png2-connection-mixed-passive-loaded.png3-connection-mixed-active-loaded.png

Вопрос в следующем. Может кто-нибудь из знатаков набросать такой код:
Если HTTPS и сертификат действительный — alert("1").
Если HTTPS, сертификат действительный, но страница имеет смешанное содержимое — alert("2").
Если HTTPS и сайт добавлен пользователем в исключение — alert("3").
Если HTTPS и сертификат недействительный — alert("4").

Отсутствует

 

№1404912-01-2020 17:38:17

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

Re: Custom Buttons

VORON пишет

вот эту под 68ю

Перенёс ресайз с дерева на родительский vbox,
а то что-то со скроллбаром непонятки.
То есть, resizer будет чуть пониже.

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

Выделить код

Код:

((panel, css) => addEventListener("popupshowing", {
    pref: "CB.editBMPanel_folderTreeRow_WidthHeight",
    handleEvent(e) {
        css = encodeURIComponent(css.replace(/;/g, " !important;"));
        var args = ["data:text/css," + css, windowUtils.USER_SHEET];
        windowUtils.loadSheetUsingURIString(...args);

        var row = this.row = document.getElementById("editBMPanel_folderTreeRow");
        addEventListener("popuphidden", this, false, panel);

        addDestructor(reason => {
            windowUtils.removeSheetUsingURIString(...args);
            row.removeAttribute("width");
            row.removeAttribute("height");
            reason == "delete" && Services.prefs.clearUserPref(this.pref);
        });
        this.handleEvent = e => e.target == panel && this[e.type]();
        this.popupshowing();
    },
    popupshowing() {
        var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" ");
        this.row.width = width; this.row.height = height;
        gEditItemOverlay.toggleFolderTreeVisibility();
    },
    popuphidden() {
        var {width, height} = this.row;
        Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height));
    }
}, false, panel || 1))(document.getElementById("editBookmarkPanel"), `

    #editBookmarkPanel #editBMPanel_folderTreeRow {
        resize: both;
        overflow: hidden;
        min-width: 332px;
    }

    #editBookmarkPanel box.panel-header {
        padding: 0;
        border: none;
    }
    #editBookmarkPanel #editBookmarkPanelInfoArea {
        display: none;
    }
    #editBookmarkPanel #editBookmarkPanelRows {
        padding-top: 0;
    }
    #editBookmarkPanel #editBMPanel_keywordRow,
    #editBookmarkPanel #editBMPanel_locationRow {
        visibility: visible;
    }
    #editBookmarkPanel #editBMPanel_tagsRow > hbox,
    #editBookmarkPanel #editBMPanel_folderRow > hbox,
    #editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) {
        display: flex;
        align-items: center;
    }
    #editBookmarkPanel #editBMPanel_tagsField,
    #editBookmarkPanel #editBMPanel_folderMenuList,
    #editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * {
        flex-grow: 1;
    }
    #editBookmarkPanel moz-input-box {
        width: 100%;
    }
`);

Отсутствует

 

№1405013-01-2020 11:19:24

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 140
UA: Firefox 68.0

Re: Custom Buttons

Dumby
Супер!
А по кнопке для запуска программы есть мысли?Вот это у меня на 54-й отлично работало,на 68-й - ноль реакции

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

Выделить код

Код:

startProcess("c:\\Program Files\\Proga\\proga.exe",[""]);
 
function startProcess(path, args) {
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
     file.initWithPath(path);
    if(file.exists()) {
       var process = Components.classes["@mozilla.org/process/util;1"]
              .createInstance(Components.interfaces.nsIProcess);
       process.init(file);
        process.run(false, args, args.length);
      } else custombuttons. alertBox ("Файл не найден", path);  
};

Отсутствует

 

Board footer

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