Открыть страницу в другом браузере из контекстного меню( Firefox 24 + )
Авторы: bunda1
Версия: от 23.05.2019.
Описание: код добавляет подменю Открыть страницу в другом браузере... в контекстное меню страницы, подменю даёт возможность открыть текущую страницу в других браузерах. В коде легко добавить свои браузеры или удалить лишние. Если браузеры указанные в коде не установлены в системе или в коде к ним указан неправильный путь иконки соответствующих браузеров не будет отображаться в подменю.
// Открыть страницу в другом браузере из контекстного меню, от 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!
В своё время, если мне не изменяет память, Вы опубликовали похожую кнопку с выпадающим меню на самой кнопке.
Нельзя ли в ту кнопку добавить такое же подменю в контекстное меню?
Тогда настройка путей к браузерам будет одна.
Спасибо
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
В своё время, если мне не изменяет память, Вы опубликовали похожую кнопку с выпадающим меню на самой кнопке.
Нельзя ли в ту кнопку добавить такое же подменю в контекстное меню?
Добавлять такое же подменю как у кнопки в контекстное меню страници можно, но сложно. Может позже.
Отсутствует
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
Сразу не заметил, ПКМ выделенного слова на странице, пункт меню как бы лишний
// Открыть страницу в другом браузере из контекстного меню, от 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"));
Отсутствует
Firefox 56 Контекстное меню с выбором браузеров выше замечательно работает,
а вот по кнопка с выпадающим меню
Открыть страницу в другом браузере( Firefox ) от 29.04.2017
никак не захотела работать - почему так ?
Отсутствует
а вот по кнопка с выпадающим меню
Открыть страницу в другом браузере( 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.Текущая страница не открывается выборе пункта меню
Отредактировано svin88 (22-03-2019 13:35:44)
Отсутствует
Замени в коде инициализации кнопки:
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
Отредактировано svin88 (22-03-2019 14:05:46)
Отсутствует
У меня на Firefox 56 работает кнопка с Сегодня 11:01:29. А многопроцессный режим включен? А в папке профиля в папке extensions есть папка 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 кнопок - на каждую свой код
bunda1 дадите код для примера на 1 простую кнопку - 1 браузер ??
Отредактировано svin88 (22-03-2019 15:53:18)
Отсутствует
Вот нашел кнопку для примера - открыть ссылку в 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); }
Отредактировано Andrey_Krropotkin (29-03-2019 16:23:16)
Отсутствует
сделал кнопку на портативку 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 (23-05-2019 15:24:16)
Отсутствует
сделал кнопку на портативку 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);
Отсутствует
Исправил Открыть страницу в другом браузере из контекстного меню для FF64+.
Отсутствует