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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№1482629-06-2020 18:54:29

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 494
UA: unknown 0.0

Re: Custom Buttons

Dumby
Этот код упал

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

Выделить код

Код:

// Проверка орфографии 
addEventListener('click', e=> {
   if ( e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT'))
        e.target.setAttribute('spellcheck', 'true');
}, content.document.body);

Отсутствует

 

№1482729-06-2020 22:11:49

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

Re: Custom Buttons

solombala пишет

Этот код упал

С чего бы ему упасть?
Разве что только однопроцессный режим слетел.


И что там за странный замысел, что третий аргумент
функции addEventListener() должен от чего-то зависеть,
да ещё и приколачивать ссылку на боди (if any) в _handlers?
Убери content.document.body

Отсутствует

 

№1482829-06-2020 23:24:16

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 494
UA: unknown 0.0

Re: Custom Buttons

Dumby
Гуд...Не в курсе, что там с поисковиками понакрутили?  Вставляю от 77 search-extensions и не фига...Google и Mailru , а остальные не того...
И youtube - cходу запускается, автовоспроизведение - прибито (5) , что за мансы?

Отредактировано solombala (29-06-2020 23:27:54)

Отсутствует

 

№1482930-06-2020 09:24:58

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

Re: Custom Buttons

solombala пишет

Не в курсе, что там с поисковиками понакрутили?  Вставляю от 77 search-extensions и не фига...Google и Mailru , а остальные не того...

Откуда же, я таким не занимаюсь.
Дефолтное значение настройки browser.search.modernConfig изменили.
Если имеется в виду папка resource:///chrome/browser/search-extensions/
то, если её выложишь, тогда попробую подменить, посмотрю в консоль,
может что-нибудь обнаружится. Без эксперимента на практике никак.

Отсутствует

 

№1483030-06-2020 10:46:10

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 494
UA: unknown 0.0

Re: Custom Buttons

Dumby

Dumby пишет

Дефолтное значение настройки browser.search.modernConfig изменили.

Уй, хвала!  Не постоje речи!

Отсутствует

 

№14831Вчера 09:27:05

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 153
UA: Firefox 60.0

Re: Custom Buttons

Добрый день. Просьба починить код кнопки, под FF60.0 ESR . С тройной функцией кнопки 1-е, исходное-"Без прокси" , 2-е, нажатие-"Ручная настройка прокси", 3-е ,нажатие-"URL автоматической настройки прокси" . Сама кнопка работает ,но при нажатии не меняет отображение состояния на самой кнопке, там под каждое состояние своя иконка и сама иконка блёклая.
Заранее спасибо.

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

Выделить код

Код:

/*Initialization Code*/

// Proxy, от 25.02.2016.


// Настройка функций кликов мыши для кнопки ...................
this.onmousedown =e=> {
   
   this.onmouseup =e=>{                  // левый клик
        if ( e.button ) return;
        clearTimeout(self.timer);           

        switch( cbu.getPrefs("network.proxy.type") ) {
           case 0:  var data = 1; break;            
           case 1:  var data = 2; break; 
           case 2:  var data = 0; break;
           default: var data = 0; 
        }
        cbu.setPrefs("network.proxy.type", data);  
   }

   if ( e.button == 0 )                  // длинный левый клик
        self.timer = setTimeout(()=>{     
           self.onmouseup = '';
           cbu.getPrefs("CB.Proxy.connectionsInTab") ? openConnectionsInTab() : openConnections();
        }, 500);
   
   if ( e.button == 2 )                  // правый клик
        menuPopup.showPopup(self, -1, -1, "popup", "bottomleft", "topleft");
};
self.onclick =e=> e.preventDefault();



// Подсказка для кнопки ...................
this.onmouseover =()=> {
   this.tooltipText = "Proxy \nЛ: Переключить прокси \nДЛ: Открыть настройки прокси"
                    + "\nП: Mеню кнопки \n\nТекущие настройки прокси: " 
                    + "\nIP: " + Services.prefs.getComplexValue("network.proxy.http", Ci.nsISupportsString).data
                    + "\nПорт: "+ cbu.getPrefs("network.proxy.http_port");                                                    
};



// Создать меню для кнопки ...................
var array = [
   { label: "Добавление прокси в контекстом меню", value: 'CB.Proxy.inContextMenu' },
   { label: "Открывать настройки прокси как вкладку", value: 'CB.Proxy.connectionsInTab' },
   { label: "Переключать на режим 'Без прокси' при закрытии браузера ", value: 'CB.Proxy.reset' }    
];

var menuPopup = document.getElementById('mainPopupSet').appendChild(document.createElement("menupopup"));
array.forEach((m)=> {
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m.label);
   mItem.setAttribute('type', 'checkbox');
   mItem.setAttribute('checked', cbu.getPrefs(m.value) );
   mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
   menuPopup.appendChild(mItem);
});
addDestructor(()=> menuPopup.remove() );

// добавить стандартное контекстное меню 
menuPopup.appendChild(document.createElement("menuseparator"));
menuPopup.appendChild(document.createElement("menu")).setAttribute("label", "Меню кнопки");
var clone = menuPopup.lastChild.appendChild(document.getElementById("custombuttons-contextpopup").cloneNode(true));
clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + _id + "')");



// Функция открывает настройки прокси в окне ...................
function openConnections() {
   for ( var win, nm = Services.wm.getEnumerator(null); win = nm.getNext(); ) 
         if ( win.name == 'Proxy') {
              win.focus();  
              break;
              }
   var win = openDialog("chrome://browser/content/preferences/connection.xul", "Proxy", "centerscreen");

   // добавить атрибут "prefwindow"
   win.addEventListener("load", function f(e) {
       this.removeEventListener("load", f, true); 
       e.target.documentElement.setAttribute("type", "prefwindow");
   }, true );
   
   // закрыть настройки прокси по клику на странице 
   gBrowser.addEventListener("click", function c() {
      this.removeEventListener("click", c );
      try { win.close() } catch(e) {}; 
   }, true );
};



// Функция открывает настройки прокси в вкладке ...................
function openConnectionsInTab() { 
   var connections = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("chrome://browser/content/preferences/connection.xul") ); 
          
   // oбработчик ждет пока откроется прокси, удаляет себя и добавляет атрибут
   connections.addEventListener("pageshow", function c(e) {         
      this.removeEventListener(e.type, c);         
      e.originalTarget.documentElement.setAttribute("type", "prefwindow");
   })   
};



// Установливать нужную иконку кнопки при старте баузера или при изменениях в 'about:config' ...................
var s = "network.proxy.type";
function toggleImage() {
   var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");
   switch( cbu.getPrefs(s) ) {
      case 0: icon.src = self.image; break;          
      case 1: icon.src = 'data:image/png;base64,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'; break;
      case 2: icon.src = 'data:image/gif;base64,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'; break;
      default:icon.src = self.image; 
   }
};  
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );



// Переключать на режим 'Без прокси' при закрытии браузера если это разрешено в 'about:config' ...................
var switchOffProxy = {
    observe: function(subject, topic, data) {
       if ( data == "shutdown" && cbu.getPrefs("CB.Proxy.reset") ) cbu.setPrefs("network.proxy.type", 0);  
    }
};
Services.obs.addObserver(switchOffProxy, "quit-application", false);



// Создаем меню для добавление прокси в контекстном меню выделенного текста на странице ...................
((contextMenu)=> {

  // создать новый пункт меню
  var menuitem = contextMenu.appendChild( document.createElement("menuitem") );      
  menuitem.setAttribute("label", "Добавить прокси"); 
  menuitem.setAttribute("class", "menuitem-iconic");
  menuitem.setAttribute("image", self.image);
  menuitem.onclick =()=> addNewProxy();
  addDestructor(()=> menuitem.remove() );
  
  // устанавливаем где показывать пункт меню 
  addEventListener("popupshowing", ()=>{
     menuitem.hidden = !cbu.getPrefs("CB.Proxy.inContextMenu") || !gContextMenu.isContentSelected; // !gContextMenu.isTextSelected;
  }, false, contextMenu);
  
  
  // добавление прокси
  function addNewProxy(sel) {  
     var selection = document.commandDispatcher.focusedWindow.getSelection().toString();
     var sel = ( sel == undefined ) ? selection : sel.toString();
     sel = sel.replace(/^\s+|\s+$/g, ""); // удалить пробелы, слева и справа от строки
     sel = sel.replace(/\s+/g,":"); // заменить пробелы внутри строки

     // если только порт ...
     if ( sel.length < 6 && isFinite(sel) ) { 
          sel = sel.replace(/:/g, "");
          var lab = 'порт';
          cbu.setPrefs("network.proxy.http_port", +sel);                    
          }
     
     // если только адрес ...
     if ( sel.length > 5 && !/:/.test(sel) && sel.split(".").length == 4 ) {   
          var lab = 'адрес';
          cbu.setPrefs("network.proxy.http", convertFromUnicode("UTF-8", sel));  
          }   
     
     // если адрес и порт ...    
     if ( sel.length > 5 && /:/.test(sel) && sel.split(":").length == 2 && sel.split(".").length == 4 ) {
          var lab = 'адрес и порт';
          var array = sel.split(":");  
          array.forEach((str)=> addNewProxy(str) );          
          }     

     if ( lab == undefined ) return;

     // всплывающая подсказка рядом с выделенным текстом ...     
     function showTooltip() {
        var tooltip = gBrowser.appendChild( document.createElement("tooltip") );
        tooltip.style.cssText = "color: red !important; font-weight: bold !important; font-size: 14px !important; -moz-box-orient: horizontal; text-align: center;";
   
        var image = tooltip.appendChild( document.createElement("image") );
        image.setAttribute("src", self.image);
   
        var label = tooltip.appendChild( document.createElement("label"));
        label.setAttribute("value", "Установлен " + lab + " прокси: " + sel);
    
        var focused = document.commandDispatcher.focusedWindow;
        var selection = focused.getSelection().getRangeAt(0).getBoundingClientRect();
        var posX = focused.mozInnerScreenX + selection.left;
        var posY = focused.mozInnerScreenY + selection.bottom - 5;   

        tooltip.showPopup(gBrowser, posX, posY);
        setTimeout(()=> gBrowser.removeChild(tooltip), 3000);
     };
     showTooltip();    
  };
   
})(document.getElementById("contentAreaContextMenu"));

Отсутствует

 

№14832Вчера 09:37:39

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 394
UA: unknown 0.0

Re: Custom Buttons

о, кстати, да. у меня тоже кнопка "прокси" не совсем работает. ну свои функции выполняет штатно, то есть переключает настройки прокси, а остальное так себе. при попытке открыть настройки прокси выводит вот такое
a80cc62290829ca4dd5d05a417ec1547.png
саму кнопку взял ессно из этой темы, она столько раз менялась, конкретную редакцию кнопки даже не помню, код такой

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

Выделить код

Код:

/*Initialization Code*/
// Настройка функций кликов мыши для кнопки ...................
this.onmousedown = e => {

    if (e.button == 0) // длинный левый клик
        self.timer = setTimeout(() => {
            self.onmouseup = null;
            cbu.getPrefs("CB.Proxy.connectionsInTab")
                ? openConnectionsInTab() : openConnections();
        }, 500);

    this.onmouseup = e => { // левый клик
        if (e.button) return;
        clearTimeout(self.timer);

        switch(cbu.getPrefs("network.proxy.type")) {
            case 0:  var data = 1; break;
            case 1:  var data = 2; break;
            case 2:  var data = 0; break;
            default: var data = 0; 
        }
        cbu.setPrefs("network.proxy.type", data);
    }
}
// правый клик
this.oncontextmenu = e => e.detail == 2 && !menuPopup.hidePopup()
    || e.ctrlKey || !!menuPopup.openPopup(this, "after_start");


// Подсказка для кнопки ...................
this.onmouseover = () => this.tooltipText =
    "Proxy \nЛ:  Переключить прокси \nДЛ: Открыть настройки прокси" +
    "\nП:  Mеню кнопки \nДП: CB меню \n\nТекущие настройки прокси: " +
    "\nIP: " + cbu.getPrefs("network.proxy.http") + "\nПорт: " +
    cbu.getPrefs("network.proxy.http_port");


// Создать меню для кнопки ...................
var array = [
    {label: "Добавление прокси в контекстом меню", value: 'CB.Proxy.inContextMenu'},
    {label: "Открывать настройки прокси как вкладку", value: 'CB.Proxy.connectionsInTab'},
    {label: "Переключать на режим 'Без прокси' при закрытии браузера ", value: 'CB.Proxy.reset'}
];

var menuPopup = document.getElementById('mainPopupSet').appendChild(document.createElementNS(xulns, "menupopup"));
array.forEach(m => {
    var mItem = document.createElementNS(xulns, "menuitem");
    mItem.setAttribute("label", m.label);
    mItem.setAttribute("type", "checkbox");
    mItem.setAttribute("checked", cbu.getPrefs(m.value));
    mItem.onclick = () => cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
    menuPopup.appendChild(mItem);
});
addDestructor(() => menuPopup.remove());


var listenClick = win => {
    var args = ["click", win.close.bind(win), true];
    var unload = () => gBrowser.removeEventListener(...args);
    gBrowser.addEventListener(...args);
    win.addEventListener("unload", unload, {once: true});
}
var version = parseInt(Services.appinfo.platformVersion);
var url = `chrome://browser/content/preferences/connection.x${version >= 72 ? "htm" : "u"}l`;

var fox73 = version >= 73, noop = () => {};
if (fox73) var grid = win => {
    var url = "data:text/css;charset=utf-8," + encodeURIComponent(`
        #proxy-grid, #dnsOverHttps-grid {
            display: grid;
            grid-template-columns: auto 1fr;
            align-items: center;
        }
        #proxy-grid > .thin {
            grid-column-end: 3;
            height: 20px;
        }
        #dnsOverHttps-grid.custom-container-hidden #networkCustomDnsOverHttpsInput,
        #dnsOverHttps-grid.custom-container-hidden #networkCustomDnsOverHttpsInputLabelContainer {
            display: none;
        }
    `);
    (grid = win => win.windowUtils.loadSheetUsingURIString(url, win.windowUtils.AUTHOR_SHEET))(win);
}
var winOpen = win => win.addEventListener("readystatechange", winReady, {once: true, capture: true});
var winReady = e => {
    var win = e.target.ownerGlobal, cw = win.isChromeWindow;
    if (cw || (win.location == url && !win.docShell.name)) winPatch(win, cw);
}
var winPatch = (win, cw) => {
    win.opener = {gSubDialog: {_dialogs: [{
        _frame: {get contentDocument() {
            cw && listenClick(win);
            delete this.contentDocument;
            return this.contentDocument = win.document;
        }},
        resizeVertically: cw ? () => win.sizeToContent() : noop
    }]}};
    fox73 && grid(win);
}
addEventListener("MozBeforeInitialXULLayout", winReady, false, gBrowser.tabpanels || 1);

for(var {contentWindow: win} of gBrowser.browsers)
    win && win.location == url && !win.opener && winPatch(win);


// Функция открывает настройки прокси в окне ...................  
function openConnections() {
    var win = [...Services.wm.getEnumerator(null)].find(w => w.location == url);
    win ? win.focus() : winOpen(openDialog(url, "Proxy", "centerscreen"));
}

// Функция открывает настройки прокси в вкладке ...................
function openConnectionsInTab() {
    var connections = gBrowser.getBrowserForTab(
        gBrowser.selectedTab = gBrowser.addTrustedTab(url)
    );

    // oбработчик ждет пока откроется прокси, удаляет себя и добавляет атрибут
    connections.addEventListener("pageshow",
        e => e.target.documentElement.setAttribute("type", "prefwindow")
    , {once: true});
}


// Установливать нужную иконку кнопки при старте баузера или при изменениях в 'about:config' ...................
var s = "network.proxy.type";
function toggleImage() {
    var {icon} = self;
    switch( cbu.getPrefs(s) ) {
        //case 0: icon.src = self.image; break;
        case 1: icon.src = 'data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAQAAAAAIAA4GQAAnFmkAHQ5fAAQAKAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAgICAgICAgICAgMBAQEAAAQBJBFQOLQ+nX38ecev/mu6of8gfFvtAyUXewAAAAsAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEBAAAAAAMLUza7PKd//3S7oP2849X9zuvh/mW4mf4XiV7/AB4QZwAAAAAAAAAAAQEBAQAAAAAZGhgTKSwnLyYqJDErKCUnID8vXgaAUP9BlnH8b7ea/ojHrv+q2sf/a7CT+zGWbf8PakXGAAIAAAEBAQMHBwcbAAAAD2BiXn76/ff/4ebg/Onm4f+DtZ7/A31L/j2Wb/+Fwaj/ls23/7rh0v9+vaT+M5du/xKGWO0DIxIdAAAAAAEBAQEAAAABBgYFEaSmorbP08z239vX/4OwnP4ail3/RJlz/5HHsP/T7+X/ms64/3K2mP40k2r/D3tM7AUiExwhIx8meXt1mXt+eKJ3eXSce353n6esouDMysf/o7eq/kOdeP92uZv/vuPT/9Hs4P/C4tT/eLWa+juWbv8bcEq7AAYBAF1gWn7//////f39/P//////////////////////////lcKx/3i9pf/K7OD/2O/l/7ndzf6Fw6n/VK+I/AsxHj8AAAAAXF5bf+Ln2P+AnU/4fZ1N+4WiV/yKp13+jKlh/5CsZf+GpFj/Zpxh/4C5nf+i0L7+k8ex/1udf+UTOCZFAAAAAAEBAQJfYF5/3uXR/16IIPxciiH/Z5Iv/26YOP9ymz3/cpw+/3OcPf9wlzb/YI80/1mKNPu707X/YmZjiAAAAAAEBAQGAAAAAF9gXoDg5tT/cJU6/HGaPf9/pE3/hqtX/4uvXf+NsF7/iKxZ/4KoU/9+o0r/cpY6+9zjyf9ubm2JAAAAAAMEAwQAAAAAX2BegODm1P94nEX8e6JJ/4quXP+Vt2n/nb1z/6LBef+jwXz/ob96/527d/+NrGP71+HG/2praogAAAAABAQDBAAAAABfYF2A4ObU/4WlVvyPsmP/osB7/7HMj/+81J3/wdik/8DXo/+60pz/tc6X/6G6ffvY4sf/amtqiAAAAAAEBAMEAAAAAF9gXn/e5dL/n7l7/LLMk//B16X/zuG2/9jpwv/b68b/2enE/9Pkvv/Q4bv/uMud+9jhyP9qa2mHAAAAAAQEAwQAAAAAX2Bef97k0v+gt335sceT/LrNnfzC1Kj8ydmx/MzatfzK2bP8xtav/MbVr/ywwpL41+HH/2tsaokAAAAABAQDBAAAAABZW1Z3+fz1/+Dm1Pzj6db/5u3b/+nv3v/r8eD/6vDe/+ft2//k69j/4efT/9ngzPv7//b/ZGdhfwAAAAADBAMEAAAAABcZFRpZW1Z6YGFfgWBiYIBhYmGAYmJhgGJjYoBiY2KAYmJhgGFiYYBgYWCAX2BegF1fWoAbHRkeAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; break;
        case 2: icon.src = 'data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAQAAAAAIAAcHQAAYGGkAEBBfAAEBKAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAQEAAgICAAICAgACAgMBAQEAAAEBJAA6OrQAf3/8ALCw/gCiov8AXl7tABkZewAAAAsAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEBAAAAAAMAOTm7AIOD/wCjo/0A1tb9AOHh/gCcnP4AY2P/ABISZwAAAAAAAAAAAAEBAQAAAAAAGBgTACgoLwAmJjEAJiYnADIyXgBWVv8Adnb8AJ2d/gCxsf8Aycn/AJeX+wBycv8ASkrGAAACAAABAQMABwcbAAAADwBfX34A+fn/AOHh/ADj4/8AoaH/AFJS/gB1df8Aq6v/ALm5/wDT0/8Ap6f+AHNz/wBeXu0AFRUdAAAAAAABAQEAAAABAAUFEQCjo7YAzs72ANnZ/wCfn/4AY2P/AHl5/wCzs/8A5ub/ALu7/wCcnP4AcHD/AFNT7AAVFRwAICAmAHd3mQB6eqIAdXWcAHl5nwClpeAAyMj/AK2t/gB9ff8An5//ANXV/wDh4f8A1tb/AJ6e+gB0dP8AUFC7AAEGAABcXH4A////AP39/AD///8A////AP///wD///8A////ALOz/wCnp/8A4eH/AObm/wDPz/4ArKz/AI2N/AAhIT8AAAAAAFxcfwDd3f8Aa2v4AGpq+wBycvwAeHj+AHt7/wB/f/8Ac3P/AHNz/wCiov8AwMD+ALS0/wCEhOUAKSlFAAAAAAABAQIAXl5/ANjY/wBGRvwARkb/AFJS/wBaWv8AX1//AF9f/wBfX/8AWVn/AFRU/wBRUfsAvr7/AGNjiAAAAAAABAQGAAAAAABeXoAA2tr/AFtb/ABeXv8AbGz/AHV1/wB6ev8Ae3v/AHd3/wBxcf8Aamr/AFtb+wDS0v8AbW2JAAAAAAADAwQAAAAAAF5egADa2v8AZGT8AGlp/wB5ef8AhYX/AI2N/wCTk/8AlJT/AJKS/wCPj/8AfX37AM/P/wBqaogAAAAAAAMDBAAAAAAAXl6AANra/wBycvwAf3//AJOT/wClpf8AsLD/ALa2/wC1tf8Ar6//AKqq/wCTk/sA0ND/AGpqiAAAAAAAAwMEAAAAAABeXn8A2dn/AJGR/ACnp/8At7f/AMXF/wDQ0P8A09P/ANHR/wDLy/8AyMj/AK2t+wDR0f8AaWmHAAAAAAADAwQAAAAAAF5efwDY2P8AkpL5AKWl/ACurvwAuLj8AL+//ADCwvwAwMD8AL29/AC8vPwAo6P4ANDQ/wBqaokAAAAAAAMDBAAAAAAAV1d3APf3/wDa2vwA3d3/AOHh/wDk5P8A5ub/AOTk/wDh4f8A39//ANra/wDT0/sA+fn/AGNjfwAAAAAAAwMEAAAAAAAWFhoAV1d6AF9fgQBgYIAAYWGAAGFhgABiYoAAYmKAAGFhgABhYYAAYGCAAF5egABbW4AAGhoeAAAAAAABAQEAAAAA/oOAQeEAgEH6AIBBoACAQQAAAEGAAABBAACAQQAAgEEAAQBBAAKAQQACgEEAAoBBAAKAQQACgEEAAoBBAAKAQQACgEE='; break;
        default: icon.src = self.image;
    }
}
toggleImage();
Services.prefs.addObserver(s, toggleImage, false);
addDestructor(() => Services.prefs.removeObserver(s, toggleImage));


// Переключать на режим 'Без прокси' при закрытии браузера если это разрешено в 'about:config' ...................
var toggleButton = {
    observe(s, t, data) {
        cbu.getPrefs("CB.Proxy.reset") && data == "shutdown" && cbu.setPrefs("network.proxy.type", 0);
    }
};
Services.obs.addObserver(toggleButton, "quit-application", false);


// Создаем меню для добавление прокси в контекстном меню выделенного текста на странице ...................
var contextMenu = document.getElementById("contentAreaContextMenu");
var menuitem = document.createElementNS(xulns,"menuitem");
menuitem.setAttribute("label", "Добавить прокси");
menuitem.setAttribute("class", "menuitem-iconic");
menuitem.setAttribute("image", self.image);
menuitem.onclick =()=> addNewProxy(menuitem);
contextMenu.appendChild(menuitem); // как последний пункт меню
addDestructor(() => menuitem.remove());
addEventListener("popupshowing", () => {
    menuitem.hidden = !cbu.getPrefs("CB.Proxy.inContextMenu") || !gContextMenu.isContentSelected; // !gContextMenu.isTextSelected;
}, false, contextMenu);


// добавление прокси ...................
function addNewProxy(menuitem) {
    var sel = gBrowser.contentDocument
        ? gBrowser.contentDocument.defaultView.getSelection().toString() // Pale Moon  
        : gContextMenu.selectionInfo.fullText; // Firefox

    sel = sel.replace(/^\s+|\s+$/g, ""); // удалить пробелы, слева и справа от строки
    sel = sel.replace(/\s+/g, ":");      // заменить пробелы внутри строки

    // если только порт ...
    if (sel.length < 6 && isFinite(sel)) { 
        var lab = 'порт';
        cbu.setPrefs("network.proxy.http_port", +sel);                    
    }

    // если только адрес ...
    if (sel.length > 5 && !/:/.test(sel) && sel.split(".").length == 4) {
        var lab = 'адрес';
        cbu.setPrefs("network.proxy.http", convertFromUnicode("UTF-8", sel));  
    }

    // если адрес и порт ...    
    if (sel.length > 5 && /:/.test(sel) && sel.split(":").length == 2 && sel.split(".").length == 4) {
        var lab = 'адрес и порт';
        var arr = sel.split(":"), IP = arr[0], port = arr[1];
        cbu.setPrefs("network.proxy.http_port", +port);
        cbu.setPrefs("network.proxy.http", convertFromUnicode("UTF-8", IP));
    }

    // всплывающая подсказка рядом с выделенным текстом ...
    var mainPopupSet = document.getElementById('mainPopupSet');
    var tooltip = mainPopupSet.appendChild(document.createElementNS(xulns,"tooltip"));
    tooltip.style.cssText = "color: red !important; font-weight: bold !important; font-size: 14px !important; -moz-box-orient: horizontal; text-align: center;";

    var image = tooltip.appendChild(document.createElementNS(xulns, "image"));
    image.setAttribute("src", self.image);

    var label = tooltip.appendChild(document.createElementNS(xulns, "label"));
    label.setAttribute("value", "Установлен " + lab + " прокси: " + sel);

    tooltip.openPopup(menuitem.parentNode, "before_start");
    setTimeout(() => mainPopupSet.removeChild(tooltip), 3000);
};


// Конвертировать текст в юникод .............  
function convertFromUnicode(charset, str) {
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    converter.charset = charset;
    str = converter.ConvertFromUnicode(str);
    return str + converter.Finish();
}

FF 78 ESR

Отредактировано sonyas75 (Вчера 09:38:42)

Отсутствует

 

№14833Вчера 09:43:35

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 128
UA: unknown 0.0

Re: Custom Buttons

На 78 версии перестал работать Custom Buttons (custom_buttons-0.0.7.0.0.9-fx-paxmod). Хотя в дополнениях значится. Все кнопки исчезли. На попытку добавить новую кнопку выходит вот это:
5a85a8c42bc7t.jpg
Может кто знает как исправить?

Отсутствует

 

№14834Вчера 09:47:18

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

Re: Custom Buttons

Black_Monk пишет

Может кто знает как исправить?

https://forum.mozilla-russia.org/viewto … 38#p782238

Отсутствует

 

№14835Вчера 09:56:27

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 128
UA: unknown 0.0

Re: Custom Buttons

vending_machine пишет

https://forum.mozilla-russia.org/viewto … 38#p782238

Не помогло... Всё по прежнему не работает...:(

Отсутствует

 

№14836Вчера 10:19:38

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

Re: Custom Buttons

Black_Monk пишет
vending_machine пишет

https://forum.mozilla-russia.org/viewto … 38#p782238

Не помогло... Всё по прежнему не работает...:(

Надо очистить startupCache из локального каталога и перегрузить [firefox]

Отредактировано vending_machine (Вчера 10:20:07)

Отсутствует

 

№14837Вчера 10:49:15

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 128
UA: unknown 0.0

Re: Custom Buttons

vending_machine пишет

Надо очистить startupCache из локального каталога и перегрузить

Ура, заработало! Сенькаю! :cool:

p.s. Как же надоело всё налаживать при переходе на новую версию. :mad: Иногда начинаешь понимать тех знакомых, которые ненавидят Мозиллу...:lol:

Отсутствует

 

№14838Вчера 12:00:31

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 190
UA: Firefox 68.0

Re: Custom Buttons

del

Отредактировано thrower (Вчера 12:27:13)

На форуме

 

№14839Вчера 15:57:08

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

Re: Custom Buttons

Duche пишет

Сама кнопка работает ,но при нажатии не меняет отображение состояния на самой кнопке, там под каждое состояние своя иконка и сама иконка блёклая.

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

Выделить код

Код:

...
                    //+ "\nIP: " + Services.prefs.getComplexValue("network.proxy.http", Ci.nsISupportsString).data
                    + `\nIP: ${Services.prefs.getStringPref("network.proxy.http") || "< empty string >"}`
...

//gPrefService.addObserver(s, toggleImage, false);
//addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );
Services.prefs.addObserver(s, toggleImage);
addDestructor(() => Services.prefs.removeObserver(s, toggleImage));

sonyas75 пишет

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

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

Выделить код

Код:

//var url = `chrome://browser/content/preferences/connection.x${version >= 72 ? "htm" : "u"}l`;
var url = `chrome://browser/content/preferences/${version >= 77 ? "dialogs/" : ""}connection.x${version >= 72 ? "htm" : "u"}l`;

Отсутствует

 

№14840Вчера 15:59:55

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 394
UA: unknown 0.0

Re: Custom Buttons

Dumby пишет

sonyas75 пишет

заработало! спасибо большое :)

Отсутствует

 

№14841Вчера 18:00:53

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 153
UA: Firefox 38.0

Re: Custom Buttons

Dumby пишет

Сама кнопка работае


Работает. Dumby  примите искреннюю благодарность.

Отсутствует

 

№14842Вчера 21:14:48

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

Re: Custom Buttons

Вопрос не совсем по теме.
Возможность назначать для определенных сайтов свой UserAgent в крайних версиях [firefox] выпилили окончательно?
Теперь для этого придется использовать только дополнения или все-таки возможно как-то реализовать это с помощью СВ?

Отсутствует

 

№14843Вчера 22:40:50

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

Re: Custom Buttons

Dumby что-то на 78 кнопка - консоль браузера не хочет работать.
Выдает ошибку:   Uncaught (in promise) TypeError: Cu.isCrossProcessWrapper is not a function)        в строчке         if (!doc || Cu.isCrossProcessWrapper(doc) || doc.documentURI != this.url) return;

Отсутствует

 

Board footer

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