Открыть страницу в другом браузере из контекстного меню( Firefox 24 + )
Авторы: bunda1
Версия: от 23.05.2019.
Описание: код добавляет подменю Открыть страницу в другом браузере... в контекстное меню страницы, подменю даёт возможность открыть текущую страницу в других браузерах. В коде легко добавить свои браузеры или удалить лишние. Если браузеры указанные в коде не установлены в системе или в коде к ним указан неправильный путь иконки соответствующих браузеров не будет отображаться в подменю.

Скриншот подменю Открыть страницу в другом браузере:
5659fdef09c20f1eb9730c915278a96b.jpg

Выделить код

Код:

// Открыть страницу в другом браузере из контекстного меню, от 23.05.2019. ..................
(()=>{
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var savepage = document.getElementById("context-savepage");

   var menu = contextMenu.insertBefore(document.createElement("menu"), savepage);
   menu.setAttribute("label", "Открыть страницу в другом браузере...");
   menu.setAttribute("class", "menu-iconic");
   menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg==");
   menu.onclick =e=> e.target == menu && openWith(array[0][1]);
   addEventListener("popupshowing", ()=> menu.hidden = savepage.hidden, true, contextMenu);
   addDestructor(()=> menu.remove());

   var arr = [
      [ "Internet Explorer", "C:\\Program Files\\Internet Explorer\\iexplore.exe"],
      [ "Google Chrome", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"],
      [ "Opera", "C:\\Program Files\\Opera\\Opera.exe"],
      [ "Maxthon", "C:\\Program Files\\Maxthon\\Bin\\Maxthon.exe"],
      [ "SeaMonkey", "C:\\Program Files\\SeaMonkey\\seamonkey.exe"]
             ]
   var menuPopup = menu.appendChild(document.createElement("menupopup"));              
   arr.forEach(m=>{
      var label = m[0], path = m[1];
      var mItem = document.createElement("menuitem");
      mItem.setAttribute("label", label);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("image", "moz-icon://file://" + path); 
      mItem.onclick =()=> openWith(path);
      menuPopup.appendChild(mItem);
   });

   function openWith(path) {
      var uri = gBrowser.currentURI.spec;
      var uri = /.рф/.test(uri) ? Services.io.newURI(uri, null, null).asciiSpec : uri;  

      var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
      file.initWithPath(path);
      !file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
      var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);
      process.run(false, [uri], 1);
   };
})();

Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Уважаемый  bunda1!
В своё время, если мне не изменяет память, Вы опубликовали похожую кнопку с выпадающим меню на самой кнопке.
Нельзя ли в ту кнопку добавить такое же подменю в контекстное меню?
Тогда настройка путей к браузерам будет одна.
Спасибо

difabor пишет

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

Добавлять такое же подменю как у кнопки в контекстное меню страници можно, но сложно. Может позже.

bunda1
Есть-ли возможность добавить подменю "Открыть ссылку в другом браузере"

rgdru пишет

bunda1
Есть-ли возможность добавить подменю "Открыть ссылку в другом браузере"

А если так:

Выделить код

Код:

// Открыть страницу в другом браузере из контекстного меню, от 27.12.2015. ..................
((contextMenu, savepage)=> {

   var menu = contextMenu.insertBefore(document.createElement("menu"), savepage);
   menu.setAttribute("label", "Открыть в другом браузере...");
   menu.setAttribute("class", "menu-iconic");
   menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg==");
   menu.onclick =e=> e.target == menu && openWith(array[0][1]);
   addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu, false, contextMenu);
   addDestructor(()=> menu.remove() );

   var arr = [
      [ "Internet Explorer", "C:\\Program Files\\Internet Explorer\\iexplore.exe"],
      [ "Google Chrome",  "C:\\Documents and Settings\\Администратор\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe"],
      [ "Opera", "C:\\Program Files\\Opera\\Opera.exe"],
      [ "Maxthon",  "C:\\Program Files\\Maxthon\\Bin\\Maxthon.exe"],
      [ "SeaMonkey", "C:\\Program Files\\SeaMonkey\\seamonkey.exe"]
               ]
   var menuPopup = menu.appendChild( document.createElement("menupopup") );              
   arr.forEach((m)=>{
      var label = m[0], path = m[1];
      var mItem = document.createElement("menuitem");
      mItem.setAttribute("label", label);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("image", "moz-icon://file://" + path); 
      mItem.onclick =()=> openWith(path);
      menuPopup.appendChild( mItem );
   });

   function openWith(path) {  
      var loc = content.document.location;
      var url = (loc.host.slice(-3) == '.рф') ? Services.io.newURI(loc.href, null, null).asciiSpec : loc;  
     
      var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);    
      file.initWithPath(path);
      var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);

      !gContextMenu.onLink
      ? process.run(false, [content.location.href], 1)
      : process.run(false, [gContextMenu.getLinkURL()], 1);
   };

})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-savepage"));

bunda1
Всё отлично. Спасибо!

bunda1
Сразу не заметил, ПКМ выделенного слова на странице, пункт меню как бы лишний

rgdru пишет

bunda1
Сразу не заметил, ПКМ выделенного слова на странице, пункт меню как бы лишний

Выделить код

Код:

// Открыть страницу в другом браузере из контекстного меню, от 27.12.2015. ..................
((contextMenu, savepage)=> {

   var menu = contextMenu.insertBefore(document.createElement("menu"), savepage);
   menu.setAttribute("label", "Открыть в другом браузере...");
   menu.setAttribute("class", "menu-iconic");
   menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg==");
   menu.onclick =e=> e.target == menu && openWith(array[0][1]);
   addEventListener("popupshowing", ()=> menu.hidden = gContextMenu.isTextSelected || gContextMenu.onImage , false, contextMenu);
   addDestructor(()=> menu.remove() );

   var arr = [
      [ "Internet Explorer", "C:\\Program Files\\Internet Explorer\\iexplore.exe"],
      [ "Google Chrome",  "C:\\Documents and Settings\\Администратор\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe"],
      [ "Opera", "C:\\Program Files\\Opera\\Opera.exe"],
      [ "Maxthon",  "C:\\Program Files\\Maxthon\\Bin\\Maxthon.exe"],
      [ "SeaMonkey", "C:\\Program Files\\SeaMonkey\\seamonkey.exe"]
               ]
   var menuPopup = menu.appendChild( document.createElement("menupopup") );              
   arr.forEach((m)=>{
      var label = m[0], path = m[1];
      var mItem = document.createElement("menuitem");
      mItem.setAttribute("label", label);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("image", "moz-icon://file://" + path); 
      mItem.onclick =()=> openWith(path);
      menuPopup.appendChild( mItem );
   });

   function openWith(path) {  
      var loc = content.document.location;
      var url = (loc.host.slice(-3) == '.рф') ? Services.io.newURI(loc.href, null, null).asciiSpec : loc;  
     
      var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);    
      file.initWithPath(path);
      var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);

      !gContextMenu.onLink
      ? process.run(false, [content.location.href], 1)
      : process.run(false, [gContextMenu.getLinkURL()], 1);
   };

})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-savepage"));

bunda1
Да, теперь нормально. Спасибо!
P.S. Добавил ещё gContextMenu.onTextInput

bunda1
Можно сделать так чтоб при правом клике мыши указать путь к нужному браузеру? я сторонник портабле программ и браузеров.

В 57 ссылку не передает

Firefox 56   Контекстное меню с выбором браузеров выше замечательно работает,
а вот по кнопка с выпадающим меню
Открыть страницу в другом браузере( Firefox ) от 29.04.2017
никак не захотела работать - почему так ?

svin88 пишет

а вот по кнопка с выпадающим меню
Открыть страницу в другом браузере( Firefox ) от 29.04.2017
никак не захотела работать - почему так ?

Потому что кнопка сохраняет данные в файле расширения Сustom Buttons - \\extensions\\custombuttons@xsms.org\\components\\CustomButtonsService.js, а в новых версиях  Сustom Buttons путь к этому файлу изменился. Попробуй так:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0434%u0440%u0443%u0433%u043E%u043C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%0A%20%20%20%20%20%20%20%20menu.showPopup%28self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%20%20%20%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%0A%20%20%20%20%20%20%20%20setItemsToMenu%28getAppPath%28%29%29%3B%20%20%20%20%0A%7D%3B%0A%0A%0Avar%20menu%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AaddEventListener%28%22popuphidden%22%2C%20%28%29%3D%3E%20setTimeout%28%28%29%3D%3E%20addToHelp%28%29%2C%2050%29%2C%20true%2C%20menu%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%0Afunction%20setItemsToMenu%28newPath%20%3D%20false%29%20%7B%0A%20%20%20menu.textContent%20%3D%20%22%22%3B%0A%20%20%20%0A%20%20%20menu.onclick%20%3D%28e%2C%20el%20%3D%20e.target%2C%20but%20%3D%20e.button%29%3D%3E%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20but%20%3D%3D%200%20%26%26%20el.path%20%26%26%20openWith%28el.path%29%3B%0A%20%20%20%20%20%20but%20%3D%3D%201%20%26%26%20addToSeparator%28e%29%3B%0A%20%20%20%20%20%20%21e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20removeNode%28e%29%3B%0A%20%20%20%20%20%20e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20changeMenuitemLabel%28e%29%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20var%20array%20%3D%20newPath%20%3F%20%28getAllPaths%28%29+%27%2C%27+newPath%29.split%28%27%2C%27%29%20%3A%20getAllPaths%28%29%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20array.forEach%28path%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28path%20%3D%3D%20%22separator%22%29%20%7B%20menu.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20%20%20%20var%20mItem%20%3D%20menu.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20mItem.value%20%3D%20path%3B%0A%20%20%20%20%20%20mItem.path%20%3D%20path.split%28%22%3E%22%29.shift%28%29%3B%0A%20%20%20%20%20%20var%20name%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%20%22%22%29%3B%0A%20%20%20%20%20%20var%20name%20%3D%20%28/%3E/.test%28name%29%29%20%3F%20name.split%28%22%3E%22%29.pop%28%29%20%3A%20name%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20name%5B0%5D.toUpperCase%28%29%20+%20name.slice%281%29%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22tooltiptext%22%2C%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.onwheel%20%3De%3D%3E%20moveNode%28e%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0AsetItemsToMenu%28%29%3B%0A%0A%0Afunction%20moveNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28el%2C%20e.deltaY%20%3E%200%20%3F%20el.nextSibling.nextSibling%20%3A%20%28el.previousSibling%20%7C%7C%20el%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20addToSeparator%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20el.nextSibling%29%3B%0A%7D%3B%0A%0A%0Afunction%20removeNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20el.remove%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20changeMenuitemLabel%28e%2C%20el%20%3D%20e.target%2C%20i%20%3D%200%29%20%7B%0A%20%20%20menu.hidePopup%28%29%3B%20%20%0A%0A%20%20%20var%20label%20%3D%20custombuttons.promptBox%28%27%27%2C%20%27%u0412%u0435%u0434%u0438%u0442%u0435%20%u0434%u0440%u0443%u0433%u043E%u0435%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%27%29%5B1%5D%3B%0A%20%20%20if%20%28label%20%21%3D%20%27%27%29%20%7B%0A%20%20%20%20%20%20%20el.value%20%3D%20el.value%20+%20%22%3E%22%20+%20label%3B%0A%20%20%20%20%20%20%20el.setAttribute%28%27label%27%2C%20label%29%3B%0A%20%20%20%20%20%20%20addToHelp%28%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%20%0Afunction%20getAppPath%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterApps%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0443%u0442%u044C%20%u043A%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%22%2C%20fp.modeOpen%29%3B%0A%20%20%20if%20%28fp.show%28%29%20%3D%3D%20fp.returnCancel%29%20return%3B%0A%20%20%20return%20fp.file.path%3B%0A%7D%3B%0A%0A%0Afunction%20getAllPaths%28%29%20%7B%20%0A%20%20%20return%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28path%29%3D%3E%20/%5CS/.test%28path%29%29%3B%20%0A%7D%3B%0A%0A%0Afunction%20addToHelp%28%29%20%7B%0A%20%20%20var%20paths%20%3D%20%5B...menu.children%5D.map%28%28el%29%3D%3E%20el.value%20%7C%7C%20%22separator%22%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.initWithPath%28dir.path%20+%20%22%5C%5Cextensions%5C%5Ccustombuttons-signed@infocatcher%5C%5Ccomponents%5C%5CCustomButtonsService.js%22%29%3B%0A%20%20%20var%20url%20%3D%20Services.io.newFileURI%28dir%29.spec%2C%20cbs%20%3D%20%7B%7D%3B%0A%20%20%20Services.scriptloader.loadSubScript%28url%2C%20cbs%29%3B%0A%20%20%20var%20AO%20%3D%20new%20cbs.AppObject%28%29%2C%20btn%20%3D%20AO.getButton%28_id%29%3B%0A%20%20%20self.setAttribute%28%22Help%22%2C%20paths%29%3B%0A%20%20%20btn.setAttribute%28%22Help%22%2C%20paths%29%3B%0A%20%20%20AO.overlay.saveOverlayToProfile%28%29%3B%20%20%20%0A%7D%3B%0A%0A%0Afunction%20openWith%28path%29%20%7B%0A%20%20%20var%20loc%20%3D%20content.document.location%3B%0A%20%20%20var%20loc%20%3D%20loc.host.endsWith%28%22.%u0440%u0444%22%29%20%3F%20Services.io.newURI%28loc.href%2C%20null%2C%20null%29.asciiSpec%20%3A%20loc%3B%20%20%0A%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%21file.exists%28%29%20%26%26%20custombuttons.alertSlide%28self.label%2C%20%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Bloc%5D%2C%201%29%3B%0A%7D%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%u043C%u044B%20%5Cn%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u043C%u0435%u043D%u044E%20%u043D%u043E%u0432%u044B%u0439%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%5Cn%u0424%u0443%u043D%u043A%u0446%u0438%u0438%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u043D%u044E%3A%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041F%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20Ctrl+%u041F%3A%20%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%20%u043C%u0435%u043D%u044E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043C%u043E%u0436%u043D%u043E%20%u043F%u0435%u0440%u0435%u0434%u0432%u0438%u0433%u0430%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%u044B%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u0438%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BC%3A%5CProgram%20Files%5CInternet%20Explorer%5Ciexplore.exe%0Aseparator%0AC%3A%5CProgram%20Files%20%28x86%29%5CWindows%20Media%20Player%5Cwmplayer.exe%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Firefox 56
Сделал так - код кнопки по предыдущему посту

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0434%u0440%u0443%u0433%u043E%u043C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%0A%20%20%20%20%20%20%20%20menu.showPopup%28self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%20%20%20%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%0A%20%20%20%20%20%20%20%20setItemsToMenu%28getAppPath%28%29%29%3B%20%20%20%20%0A%7D%3B%0A%0A%0Avar%20menu%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AaddEventListener%28%22popuphidden%22%2C%20%28%29%3D%3E%20setTimeout%28%28%29%3D%3E%20addToHelp%28%29%2C%2050%29%2C%20true%2C%20menu%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%0Afunction%20setItemsToMenu%28newPath%20%3D%20false%29%20%7B%0A%20%20%20menu.textContent%20%3D%20%22%22%3B%0A%20%20%20%0A%20%20%20menu.onclick%20%3D%28e%2C%20el%20%3D%20e.target%2C%20but%20%3D%20e.button%29%3D%3E%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20but%20%3D%3D%200%20%26%26%20el.path%20%26%26%20openWith%28el.path%29%3B%0A%20%20%20%20%20%20but%20%3D%3D%201%20%26%26%20addToSeparator%28e%29%3B%0A%20%20%20%20%20%20%21e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20removeNode%28e%29%3B%0A%20%20%20%20%20%20e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20changeMenuitemLabel%28e%29%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20var%20array%20%3D%20newPath%20%3F%20%28getAllPaths%28%29+%27%2C%27+newPath%29.split%28%27%2C%27%29%20%3A%20getAllPaths%28%29%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20array.forEach%28path%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28path%20%3D%3D%20%22separator%22%29%20%7B%20menu.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20%20%20%20var%20mItem%20%3D%20menu.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20mItem.value%20%3D%20path%3B%0A%20%20%20%20%20%20mItem.path%20%3D%20path.split%28%22%3E%22%29.shift%28%29%3B%0A%20%20%20%20%20%20var%20name%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%20%22%22%29%3B%0A%20%20%20%20%20%20var%20name%20%3D%20%28/%3E/.test%28name%29%29%20%3F%20name.split%28%22%3E%22%29.pop%28%29%20%3A%20name%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20name%5B0%5D.toUpperCase%28%29%20+%20name.slice%281%29%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22tooltiptext%22%2C%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.onwheel%20%3De%3D%3E%20moveNode%28e%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0AsetItemsToMenu%28%29%3B%0A%0A%0Afunction%20moveNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28el%2C%20e.deltaY%20%3E%200%20%3F%20el.nextSibling.nextSibling%20%3A%20%28el.previousSibling%20%7C%7C%20el%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20addToSeparator%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20el.nextSibling%29%3B%0A%7D%3B%0A%0A%0Afunction%20removeNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20el.remove%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20changeMenuitemLabel%28e%2C%20el%20%3D%20e.target%2C%20i%20%3D%200%29%20%7B%0A%20%20%20menu.hidePopup%28%29%3B%20%20%0A%0A%20%20%20var%20label%20%3D%20custombuttons.promptBox%28%27%27%2C%20%27%u0412%u0435%u0434%u0438%u0442%u0435%20%u0434%u0440%u0443%u0433%u043E%u0435%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%27%29%5B1%5D%3B%0A%20%20%20if%20%28label%20%21%3D%20%27%27%29%20%7B%0A%20%20%20%20%20%20%20el.value%20%3D%20el.value%20+%20%22%3E%22%20+%20label%3B%0A%20%20%20%20%20%20%20el.setAttribute%28%27label%27%2C%20label%29%3B%0A%20%20%20%20%20%20%20addToHelp%28%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%20%0Afunction%20getAppPath%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterApps%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0443%u0442%u044C%20%u043A%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%22%2C%20fp.modeOpen%29%3B%0A%20%20%20if%20%28fp.show%28%29%20%3D%3D%20fp.returnCancel%29%20return%3B%0A%20%20%20return%20fp.file.path%3B%0A%7D%3B%0A%0A%0Afunction%20getAllPaths%28%29%20%7B%20%0A%20%20%20return%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28path%29%3D%3E%20/%5CS/.test%28path%29%29%3B%20%0A%7D%3B%0A%0A%0Afunction%20addToHelp%28%29%20%7B%0A%20%20%20var%20paths%20%3D%20%5B...menu.children%5D.map%28%28el%29%3D%3E%20el.value%20%7C%7C%20%22separator%22%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.initWithPath%28dir.path%20+%20%22%5C%5Cextensions%5C%5Ccustombuttons-signed@infocatcher%5C%5Ccomponents%5C%5CCustomButtonsService.js%22%29%3B%0A%20%20%20var%20url%20%3D%20Services.io.newFileURI%28dir%29.spec%2C%20cbs%20%3D%20%7B%7D%3B%0A%20%20%20Services.scriptloader.loadSubScript%28url%2C%20cbs%29%3B%0A%20%20%20var%20AO%20%3D%20new%20cbs.AppObject%28%29%2C%20btn%20%3D%20AO.getButton%28_id%29%3B%0A%20%20%20self.setAttribute%28%22Help%22%2C%20paths%29%3B%0A%20%20%20btn.setAttribute%28%22Help%22%2C%20paths%29%3B%0A%20%20%20AO.overlay.saveOverlayToProfile%28%29%3B%20%20%20%0A%7D%3B%0A%0A%0Afunction%20openWith%28path%29%20%7B%0A%20%20%20var%20loc%20%3D%20content.document.location%3B%0A%20%20%20var%20loc%20%3D%20loc.host.endsWith%28%22.%u0440%u0444%22%29%20%3F%20Services.io.newURI%28loc.href%2C%20null%2C%20null%29.asciiSpec%20%3A%20loc%3B%20%20%0A%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%21file.exists%28%29%20%26%26%20custombuttons.alertSlide%28self.label%2C%20%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Bloc%5D%2C%201%29%3B%0A%7D%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%u043C%u044B%20%5Cn%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u043C%u0435%u043D%u044E%20%u043D%u043E%u0432%u044B%u0439%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%5Cn%u0424%u0443%u043D%u043A%u0446%u0438%u0438%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u043D%u044E%3A%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041F%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20Ctrl+%u041F%3A%20%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%20%u043C%u0435%u043D%u044E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043C%u043E%u0436%u043D%u043E%20%u043F%u0435%u0440%u0435%u0434%u0432%u0438%u0433%u0430%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%u044B%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u0438%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BC%3A%5CProgram%20Files%5CInternet%20Explorer%5Ciexplore.exe%0Aseparator%0AC%3A%5CProgram%20Files%20%28x86%29%5CWindows%20Media%20Player%5Cwmplayer.exe%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код инициализации из поста  bunda1  который ранее был

Выделить код

Код:

this.onclick =e=> {
   if ( e.button == 0 ) 
        menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft");    

   if ( e.button == 1 )
        setItemsToMenu(getAppPath());    
};


var menu = self.appendChild(document.createElement("menupopup"));
addEventListener("popuphidden", ()=> setTimeout(()=> addToHelp(), 50), true, menu);

         
function setItemsToMenu(newPath = false) {
   menu.textContent = "";
   
   menu.onclick =(e, el = e.target, but = e.button)=> {
      e.preventDefault();
      e.stopPropagation();
      
      but == 0 && el.path && openWith(el.path);
      but == 1 && addToSeparator(e);
      !e.ctrlKey && but == 2 && removeNode(e);
      e.ctrlKey && but == 2 && changeMenuitemLabel(e);
   }
   
   var array = newPath ? (getAllPaths()+','+newPath).split(',') : getAllPaths();         
   array.forEach(path=> {
      if (path == "separator") { menu.appendChild(document.createElement("menuseparator")); return };
      var mItem = menu.appendChild(document.createElement("menuitem"));
      mItem.value = path;
      mItem.path = path.split(">").shift();
      var name = path.split("\\").pop().replace(".exe", "");
      var name = (/>/.test(name)) ? name.split(">").pop() : name;
      mItem.setAttribute("label", name[0].toUpperCase() + name.slice(1));
      mItem.setAttribute("tooltiptext", mItem.path);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("image", "moz-icon://file://" + mItem.path);
      mItem.onwheel =e=> moveNode(e);
   })
};
setItemsToMenu();


function moveNode(e, el = e.target) {
   menu.insertBefore(el, e.deltaY > 0 ? el.nextSibling.nextSibling : (el.previousSibling || el));
};


function addToSeparator(e, el = e.target) {
   menu.insertBefore(document.createElement("menuseparator"), el.nextSibling);
};


function removeNode(e, el = e.target) {
   el.remove();
};


function changeMenuitemLabel(e, el = e.target, i = 0) {
   menu.hidePopup();  

   var label = custombuttons.promptBox('', 'Ведите другое название пункта')[1];
   if (label != '') {
       el.value = el.value + ">" + label;
       el.setAttribute('label', label);
       addToHelp();
       }
};

 
function getAppPath() {
   var fp = window.makeFilePicker();
   fp.init(window, "Открыть файл", fp.modeOpen);
   fp.appendFilters(fp.filterApps);
   fp.init(window, "Укажите путь к программе", fp.modeOpen);
   if (fp.show() == fp.returnCancel) return;
   return fp.file.path;
};


function getAllPaths() { 
   return self.getAttribute('Help').split('\n').filter((path)=> /\S/.test(path)); 
};


function addToHelp() {
   var paths = [...menu.children].map((el)=> el.value || "separator").join("\n");

   var dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
   dir.initWithPath(dir.path + "\\extensions\\custombuttons@xsms.org\\components\\CustomButtonsService.js");
   var url = Services.io.newFileURI(dir).spec, cbs = {};
   Services.scriptloader.loadSubScript(url, cbs);
   var AO = new cbs.AppObject(), btn = AO.getButton(_id);
   self.setAttribute("Help", paths);
   btn.setAttribute("Help", paths);
   AO.overlay.saveOverlayToProfile();   
};


function openWith(path) {
   var loc = content.document.location;
   var loc = loc.host.endsWith(".рф") ? Services.io.newURI(loc.href, null, null).asciiSpec : loc;  

   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath(path);
   !file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, [loc], 1);
};


this.tooltipText = "Л: Открыть меню с браузерамы \nС: Добавить в меню новый браузер\
                   \n\nФункции кликов мыши для меню:\
                   \n  Л: Открыть страницу\
                   \n  С: Добавить разделитель\
                   \n  П: Удалить пункт меню или разделитель\
                   \n  Ctrl+П: Изменить название пункта меню\
                   \n  Колёсиком мыши можно передвигать пункты меню или разделители";

к сожалению так не получается кнопку сделать - не заработало ...  По средней кнопке открывается проводник - добавляю ссылку на браузер  и потом по левой кнопке мыши на значке - пустое поле открывается - по Ctrl+П ввожу например InternetExplorer - пункт меню появляется - НО  1.Значка нет IE перед пунктом меню 2.Текущая страница не открывается выборе пункта меню

Замени в коде инициализации кнопки:

Выделить код

Код:

dir.initWithPath(dir.path + "\extensions\custombuttons@xsms.org\components\CustomButtonsService.js");

на:

Выделить код

Код:

dir.initWithPath(dir.path + "\extensions\custombuttons-signed@infocatcher\components\CustomButtonsService.js");

не помогло к сожалению - текущая страница не открывается в другом браузере (пробую Opera и IE) при выборе пункта меню и не подгружаются значки браузеров из *.exe

У меня на Firefox 56 работает кнопка с Сегодня 11:01:29. А многопроцессный режим включен? А в папке профиля в папке extensions есть папка custombuttons-signed@infocatcher или что подобное?

custombuttons-signed@infocatcher - папка есть
многопроцессный режим включен - в нем дело ?

Убрал многопроцессный режим - хм заработало    что делал чтоб убрать
about:config
далее
browser.tabs.remote.autostart  - false 
extensions.e10sBlockedByAddons - true
extensions.e10sBlocksEnabling  - true
dom.ipc.process - 1
browser.tabs.remote.force-enable - false

жалко конечно что кнопка не работает в многопроцессном режиме ...

хорошо - в таком случае можно по простому ? без наворотов и выпадающего меню - одна кнопка по нажатию - один браузер
както так - 5 кнопок - на каждую свой  код

40351cb7f904.jpg


bunda1  дадите код для примера на 1 простую кнопку - 1 браузер ??

Вот нашел кнопку для примера - открыть ссылку в IE - но нерабочая оказалась ...

Код кнопки

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20Internet%20Explorer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAgDAgAPAgECFwAAAQ8AAAAQBgEAIRUJADAVCAAxBgEAIwAAABIAAAERAgECGAMCABAAAAAJAAAABQAAAAIAAAABAAAABAIBAAwAAAINBgEAC0QrCVCScT6nxKFt1de2g+fXtoPnw6Ft1pJxPqhEKwlSBgEADQAAAg8CAQAOAAAABgAAAAIAAAAAAgEAAQAAAQBDJQANuIc7mfjSlvz+3q3/99en//PToP/z06D/99en//7erf/40pb8uIc7mUMlAA0AAAEAAgEAAQAAAAACAgABAAABAFQwABLpq03H8s6Y/+W8gf3itnX74rZ2+uK3evzit3r84rZ2+uO2dfvlvIH98s6Y/+mrTcdUMAASAAABAAICAAEAAAIBFAoAAM2QM6zovHv/3Kle+t+sYP3frmf+6rZp/+61Yv/utWL/6rZp/9+uZ/7fq2D83Kle+ei7e//NjzKsEwkAAAAAAgEAAAAAeUwJUuyvVf/Xnkn72qBJ/t2kTv/lo0DypG0ajnxPCU58TwlOpG0ajuWjQPLepU//26JK/tigS/3tsVf/e08LWAAAAAAfEQAAwYEZt9ubMv/VlCn71pcu/9eRIt9hOgEkAAAAAAIBAAICAQACAAAAAGA5ASbQjB/N05Eo5dGPJN3blyvvrHEUlwUBAABgOgAh35QZ7dKRIP/Vkh/81pMf/8aAD8OGVwt8i1sOkZBdDY6QXQ2Oi1sOj4NVDYK4dQqVzIIMpMd/DaHLgQymu3cKjjwlABJbOQVL4Z84/9abPP/Ymzr/2Js7/9udPv/npkD/56ZB/+emQf/npkH/56ZB/+imP//dnz7/2Zw9/9mcPP/XnD7/56M5/2I+BExdPQlV565Y/9yoW/7fql3/36xg/+CtYf3bqmL42qli+NqpYvjaqWL42qli+NqpYfjfrGH836tf/d6pXP3cp1r85q1X/1w8ClVfOwQ87Lpv++O5e//luHb+5bh3/+W5ef/yw3//+MV9//bEff/2xH3/+MV9//LDf//luXn/5bh3/+W4dv7juXv/7Lpu+187BDxOLAAM6rhr2uvJl//owIX87cmT/9WfT9V6Tg5WYkYfXWxMH2VsTB9lYkYfXXpODlbVn0/V7cmT/+jAhfzryZf/6rhr2k4sAAwAAAAArIA+j/3juP/ry5j679Gh//LQm/+qeS1/HA0ABAAAAQAAAAEAHA0AA6p4LX7y0Jv/79Gh/+vLmPr+47f/rIA9jwAAAAAAAAAATi4AIvvXnvD04sH/89ip/fXdtv//5rv/8ciH6dinWrjYp1q48ciH6f/mu//13bb/89ip/fXiwf/51p7wTi4AIwAAAAACAgIDAAAAAJhoIWP/8cr/9+nQ/ffhufv34778++vM///v0P//79D/++vM//fjvvz34bn79+nQ/f/wyv+mcCFjAAAAAAECAgMBAQAAAAACAhgKAAC2fShs/+3C/P//6//98dn+++zO/Prqyvr66sr6++zO/P3x2f7//+v//+3C/LZ9KGwYCgAAAAACAgEBAAAAAAAAAQEAAAEBAgMIAQAAWDgLNMqmbbT+58H3//fd///85P///OT///fd//7nwffKpm20WDgLNAgBAAAAAQIDAQAAAAAAAAAAAAAAAAAAAAEBAAACAQIDAAABAAYBAAByRQYrpnYqZqeCSYengkmHpnYqZnJFBisGAQAAAAABAAIBAgMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0Afile.initWithPath%28%22C%3A%5C%5CProgram%20Files%5C%5CInternet%20Explorer%5C%5Ciexplore.exe%22%29%3B%0Avar%20process%20%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0Avar%20args%20%3D%20%5Bwindow.content.location.href%5D%3B%0Aprocess.init%28%20file%20%29%3B%0Aprocess.run%28%20false%2C%20args%2C%20args.length%20%29%3B%0A%0A%0A%0A%0A%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код инициализации

Выделить код

Код:

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("C:\\Program Files\\Internet Explorer\\iexplore.exe");
var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
var args = [window.content.location.href];
process.init( file );
process.run( false, args, args.length );

svin88 положить в секцию /*CODE*/

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

Выделить код

Код:

/*CODE*/

  var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProgF", Components.interfaces.nsIFile)
    .path;
  var IE_PATH = profileDir + "\\Internet Explorer\\iexplore.exe";      
  var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
  file.initWithPath(IE_PATH);
  if (!file.exists()) {
  alert("File does not exist: " + IE_PATH);
  return;
}
  var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
  try {
  var args = [gBrowser.currentURI.spec];
  process.init(file);
  process.run(false, args, args.length);
      }
  catch (ex) {
  alert("Failed to execute: " + IE_PATH);
}

сделал кнопку на портативку Opera - не прокатило как выше с IE  Что еще надо поменять в коде кроме пути ?

Выделить код

Код:

/*CODE*/

  var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProgF", Components.interfaces.nsIFile)
    .path;
  
   var IE_PATH = "C:\\Program Files (Oleg)\\Opera Portable\\launcher.exe";   

  var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
  file.initWithPath(IE_PATH);
  if (!file.exists()) {
  alert("File does not exist: " + IE_PATH);
  return;
}
  var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
  try {
  var args = [gBrowser.currentURI.spec];
  process.init(file);
  process.run(false, args, args.length);
      }
  catch (ex) {
  alert("Failed to execute: " + IE_PATH);
}
svin88 пишет

сделал кнопку на портативку Opera - не прокатило как выше с IE  Что еще надо поменять в коде кроме пути ?

Выделить код

Код:

var path = "C:\\Program Files (Oleg)\\Opera Portable\\launcher.exe";   

var uri = gBrowser.currentURI.spec;
var uri = /.рф/.test(uri) ? Services.io.newURI(uri, null, null).asciiSpec : uri;  
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath(path);
!file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, [uri], 1);

заработало - оба варианта (в 1 варианте Andrey_Krropotkin сам напутал)
Благодарю за ответы bunda1 и Andrey_Krropotkin !

Исправил Открыть страницу в другом браузере из контекстного меню для FF64+.

У меня кнопка в Waterfox 56.2.12 работает нормально...  Но есть один момент - в кнопке указываю путь к браузеру Opera и все нормально работает,
но есть необходимость запуска браузера не  .exe, а ярлыка, в котором прописаны параметры запуска. Что-то ничего в этом случае не выходит...