1. Чтобы ссылки открывал только на YouTube.
2. Добавить возможность добавлять ссылки в плей лист по (ПКМ+Ctrl) этой командой
А эсли так:
// Открыть на youtube ссылки в PotPlayerMini по ПКМ или добавить по ctrl + ПКМ ...... addEventListener("click", (e, butt = e.button)=> { if ( butt != 2 || !XULBrowserWindow.overLink || gBrowser.contentDocument.location.host != "www.youtube.com" ) return; e.preventDefault(); e.stopPropagation(); var path = "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe"; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(false, [XULBrowserWindow.overLink, ((butt == 2 && e.ctrlKey) ? "/add" : "")], 2); }, true, gBrowser);
Отсутствует
bunda1
О, спасибо. Замечательно. Есть только один нюанс. Набираю видео в плей лист по Ctrl+ПКМ, а потом если хочу проиграть видео по ПКМ, то плей лист очищается, а хотелось бы самому удалять, когда нужно.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
bunda1
Набираю видео в плей лист по Ctrl+ПКМ, а потом если хочу проиграть видео по ПКМ, то плей лист очищается, а хотелось бы самому удалять, когда нужно.
Мой код тут не причём, это PotPlayerMini так работает. Набери видео в плей лист по Ctrl+ПКМ и потом попробуй посмотреть на PotPlayerMini какой не будь видео не используя мой код и сам увидишь. Может там что то нужно изменить в настройках PotPlayerMini или по другому добавлять в плей лист.
Отсутствует
Открыть видео в PotPlayerMini
Можно сделать что бы контекстное меню - открыть в....появлялось только на ссылках ютуба?
Бывает что пункт меню сильно...намыливает глаз.
Отсутствует
Открыть видео в PotPlayerMini
Можно сделать что бы контекстное меню - открыть в....появлялось только на ссылках ютуба?
Бывает что пункт меню сильно...намыливает глаз.
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%u0432%u0438%u0434%u0435%u043E%20%u0432%20PotPlayerMini%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CProgram%20Files%5CDAUM%5CPotPlayer%5CPotPlayerMini.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CDAUM%5C%5CPotPlayer%5C%5CPotPlayerMini.exe%22%3B%0A%0A%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20play%28content.location.href%2C%20%22%22%29%3B%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28self%29%3B%20%0A%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20play%28content.location.href%2C%20%22/add%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0Aself.image%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.label%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%3B%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0Avar%20menuitem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%29%3B%0Amenuitem.setAttribute%28%22label%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%22%20+%20playerName%29%3B%20%20%20%20%20%20%0Amenuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0Amenuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%20%0Amenuitem.onclick%20%3De%3D%3E%20play%28gContextMenu.getLinkURL%28%29%2C%20e.button%20%3F%20%22/add%22%20%3A%20%22%22%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20%7B%0A%20%20%20var%20youtube%20%3D%20gBrowser.contentDocument.location.host%20%3D%3D%20%22www.youtube.com%22%3B%0A%20%20%20menuitem.hidden%20%3D%20%21gContextMenu.onLink%20%7C%7C%20%21youtube%3B%0A%7D%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%20%29%3B%0A%0A%20%20%20%20%0Afunction%20play%28link%2C%20param%29%20%7B%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%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Blink%2C%20param%5D%2C%202%29%3B%0A%7D%3B%0A%0A%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%20+%20%22%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%20%22%20+%20playerName%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%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
Отсутствует
bunda1, а мне, наоборот, хотелось бы кнопку создающую подменю в контекстном меню ссылок и вкладок, с пользовательскими пунктами. В общем, аналог Open With. Например, можно туда предустановить пункты с открытием ссылки/вкладки в IE и PotPlayer + добавление в плейлист PotPlayer, а остальные пункты чтобы пользователь сам добавлял и мог самостоятельно назначать параметры ком.строки. Дело в том, что Open With некоторые параметры просто не передает, тем самым расширение зачастую бесполезно и приходится его функции дублировать другими расширениями, кнопками.
Думаю ты разберёшься как правильно удалять - добавлять пункты в разные подменю. Я только не понял как ты хочешь запускать программы с параметрами ком.строки - по ПКМ на пунктах или как?
// Открыть страницу в другой программе из контекстного меню, от 25.10.2016. ............. (()=> { var array = [ ["C:\\Program Files\\Internet Explorer\\iexplore.exe", "tab"], ["C:\\Program Files\\Opera\\Opera.exe", "tab"], ["C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe", "link"], ["C:\\Program Files\\Windows Media Player\\wmplayer.exe", "link"], ["C:\\Program Files\\Maxthon\\Bin\\Maxthon.exe", "all"] ] var tabContextMenu = document.getElementById("tabContextMenu"); var array1 = array.filter(m=> m[1] == 'tab'); var menu1 = tabContextMenu.appendChild(document.createElement("menu")); menu1.setAttribute("label", "Открыть страницу в другой программе: "); menu1.setAttribute("class", "menu-iconic"); menu1.setAttribute("image", "moz-icon://file://" + array1[0][0]); addEventListener("popupshowing", e=> { menu1.hidden = !e.target.triggerNode.linkedBrowser.currentURI.scheme.startsWith("http"); }, false, tabContextMenu); menu1.onclick =e=> e.target == menu1 && openWith(array1[0][0]); addDestructor(()=> menu1.remove()); setMenupopup(menu1, "tab"); var contextMenu = document.getElementById("contentAreaContextMenu"); var array2 = array.filter(m=> m[1] == 'link'); var menu2 = contextMenu.appendChild(document.createElement("menu")); menu2.setAttribute("label", "Открыть ссылку в другой программе: "); menu2.setAttribute("class", "menu-iconic"); menu2.setAttribute("image", "moz-icon://file://" + array2[0][0]); addEventListener("popupshowing", ()=> menu2.hidden = !gContextMenu.onLink, false, contextMenu); menu2.onclick =e=> e.target == menu2 && openWith(array2[0][0]); addDestructor(()=> menu2.remove()); setMenupopup(menu2, "link"); function setMenupopup(menu, arg) { var menuPopup = menu.appendChild(document.createElement("menupopup")); array.forEach(m=> { if ( m[1] != "all" && m[1] != arg ) return; var path = m[0], label = path.split("\\").pop().replace(".exe",""); 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); process.run(false, [url], 1); }; })();
Отсутствует
bunda1
Я только не понял как ты хочешь запускать программы с параметрами ком.строки
Добавляя пункт с параметрами. Ты так пример и не привел как добавлять параметры? Весь смысл именно в этом. И еще, как изменить отображаемое имя в меню?
Ведь в том коде который fokanik давал все предельно удобно сделано - ИМЯ, ПУТЬ, ПАРАМЕТР. Нельзя ли и здесь сделать тоже самое? Поскольку пункты в подменю, то не имеет большого смысла их разделение на tab и link, пусть и там и там отображаются, важнее параметры и возможность сменить имя.
И еще, если нет ни одного пункта с "tab" в конце, то кнопка сереет и не работает. Т.е. нельзя везде написать "all" и "link", так работать не будет. А получается так, что браузеры и загрузчики и там и там нужны, а плеера только в линках. Т.е., ситуации когда пункт нужен только для табов, нет.
Отредактировано _zt (25-10-2016 22:49:10)
Отсутствует
bunda1
Я только не понял как ты хочешь запускать программы с параметрами ком.строки
Добавляя пункт с параметрами.
Ну конешно добавляя пункт с параметрами. Я о другом спрашиваю.
Добавлено 25-10-2016 22:57:34
И еще, если нет ни одного пункта с "tab" в конце, то кнопка сереет и не работает. Т.е. нельзя везде написать "all" и "link", так работать не будет. А получается так, что браузеры и загрузчики и там и там нужны, а плеера только в линках. Т.е., ситуации когда пункт нужен только для табов, нет.
Так ты хочешь что бы подменю на ссылках и вкладках были одинаковые?
Отредактировано bunda1 (25-10-2016 22:57:34)
Отсутствует
bunda1
Ну конешно добавляя пункт с параметрами. Я о другом спрашиваю.
Я не понимаю.
Куда мне здесь вписать параметр?
Например, в коде fokanik, мне это понятно. Первая строка для проигрывания, вторая для добавления в плейлист.
["PotPlayer", "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe", "" ], ["PotPlayer Add", "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe", "/add" ],
Так ты хочешь что бы подменю на ссылках и вкладках были одинаковые?
Нет, я хочу, что бы держать пункт с "tab" в конце строки не было обязаловкой. А сейчас именно так и есть. Я же расписал все.
если нет ни одного пункта с "tab" в конце, то кнопка сереет и не работает. Т.е. нельзя везде написать "all" и "link", так работать не будет.
Отредактировано _zt (25-10-2016 23:13:53)
Отсутствует
bunda1
Ну сейчас то понятно? В общем, пусть "подменю на ссылках и вкладках будут одинаковые", если так легче сделать.
Главное:
1. чтобы параметры можно было добавлять прямо в строку или по другому, но как ни будь попроще
2. возможность менять имя, а то меню не красиво выглядят
И еще просьба, предусмотреть возможность назначить свой значок для самого подменю, а то он по непонятному алгоритму назначается. Или вообще его убрать.
Отредактировано _zt (25-10-2016 23:39:41)
Отсутствует
Набираю видео в плей лист по Ctrl+ПКМ, а потом если хочу проиграть видео по ПКМ, то плей лист очищается,
А так если заменить параметр "" на "/autoplay":
process.run(false, [XULBrowserWindow.overLink, ((butt == 2 && e.ctrlKey) ? "/add" : "/autoplay")], 2);
Отсутствует
gBrowser.contentDocument.location.host != "www.youtube.com"
Падает функционал кнопки, плеер еще может открывать ссылки вида - https://www.google.ru/url?q=https://www.youtube.com/watch...
А как сделать регулярное выражение или проверку - if(в url есть "www.youtube.com") то... ?
Отсутствует
А вот сюда можно кнопку навесить (любую, открыть в potplayer) - seamonkey -> почта -> rss:
xul:label [1043.600×15] namespaceURI: XUL class = headerValue plain text-link headerValueUrl anonid = headerValue context = copyUrlPopup flex = 1 onclick = if (event.button != 2) openUILink(event.target.value, event); ondragstart = this.parentNode.setDataTransfer(event); readonly = true value = http://www.youtube.com/watch?v=xxxxxxxxx
Отсутствует
fokanik
Там проблема не в коде, а в настройках плеера была. Спасибо. А вот чтобы и другие сcылки открывал я не против, лишь бы не все подряд, а только с видео.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
А как сделать регулярное выражение или проверку - if(в url есть "www.youtube.com") то... ?
Отсутствует
Select Search Engine кнопка не работает.. Firefox 49.02. Искал что то подобное, не нашел.
В идеале было бы так. Как в омнибаре, он к сожалению удаляет кнопку при перезапуске браузера и давно уже не поддерживается. Может есть готовое решение кнопкой? Не нашел.
Отредактировано mssign (26-10-2016 14:30:40)
Отсутствует
можно ли добавить в код вертикальную отцентровку на той панели, куда кнопка помещена? код ниже
if (gBrowser.currentURI.spec == "about:customizing") return;
const labMarginLeft = 7;
var btnWidth = iconSize + 2*3;
var labWidth = buttonWidth - iconSize - labMarginLeft;
var btnMarginRight = labWidth + labMarginLeft;
var [img, lab] = document.getAnonymousNodes(this);
this.style.cssText = imp('\
-moz-box-orient: horizontal;\
-moz-box-pack: start;\
min-width: ' + btnWidth + 'px;\
max-width: ' + btnWidth + 'px;\
margin-right: ' + btnMarginRight + 'px;\
');
lab.style.cssText = imp('\
display: -moz-box;\
text-align: start;\
margin-left: ' + labMarginLeft + 'px;\
min-width: ' + labWidth + 'px;\
max-width: ' + labWidth + 'px;\
');
img.style.cssText = imp('\
display: -moz-box;\
width: ' + iconSize + 'px;\
height: ' + iconSize + 'px;\
');
function imp(str) str.replace(/;/g, " !important;");
var mo = new MutationObserver(() => lab.value = self.tooltipText = document.documentElement.getAttribute("title").split('- Mozilla Firefox')[0]);
mo.observe(document.documentElement, {attributes: true, attributeFilter: ["title"]});
mo.mutationCallback(addDestructor(() => mo.disconnect()));
var pl = {}, df = defaultFavicon || PlacesUtils.favicons.defaultFavicon.spec;
pl.onLinkIconAvailable = pl.onLocationChange = () => {
var icon = gBrowser.selectedBrowser.mIconURL || df
if (icon.startsWith("http")) icon = "moz-anno:favicon:" + icon;
img.src = icon;
}
gBrowser.addProgressListener(pl);
pl.onLinkIconAvailable(addDestructor(() => gBrowser.removeProgressListener(pl)));
//addDestructor(() => { for(var node of [self, img, lab]) node.removeAttribute("style") });
/*Спрятать подсказки*/
(function() {
function onPS(e) {
if (e.originalTarget.nodeName != "tooltip" || window.__attributesInspector) return;
var node = e.originalTarget.ownerDocument.tooltipNode;
for (; node && !(node instanceof HTMLAnchorElement); node = node.parentNode);
!node && e.preventDefault();
}
const observer = {
observe: function(win) win.addEventListener("load", this, false),
handleEvent: function(e) {
var doc = e.target;
var win = doc.defaultView;
win.removeEventListener("load", this, false);
if (doc.location.href == "chrome://browser/content/browser.xul" || win.cbttp) return;
win.cbttp = true;
win.addEventListener("popupshowing", onPS, true);
win.addEventListener("unload", function onUL() {
win.removeEventListener("unload", onUL, false);
win.removeEventListener("popupshowing", onPS, true);
}, false)
}
}
addEventListener("popupshowing", onPS, true);
Services.obs.addObserver(observer, "domwindowopened", false);
addDestructor(function() Services.obs.removeObserver(observer, "domwindowopened"));
}) ();
this.onclick = function(с) {if ( с.button == 0 ) gClipboard.write( content.location );}
Отсутствует
if ( /www.youtube.com/.test(url) )
Работает, спасибо!
А дальше начинаю делать так:
if (/www.youtube.com/watch?v=/.test(XULBrowserWindow.overLink) ) alert(true); return;
И кнопка то потухнет, то погаснет?
Отсутствует
fokanik
А если так:
if (/www.youtube.com\/watch\?v=/.test(XULBrowserWindow.overLink) ) alert(true); return;
Хотя я бы в подобном случае не морочился с регулярными выражениями, а написал бы просто:
if (XULBrowserWindow.overLink.indexOf('www.youtube.com/watch?v=' >= 0)) alert(true); return;
Отредактировано yup (26-10-2016 18:19:48)
Отсутствует
Хотя я бы в подобном случае не морочился с регулярными выражениями, а написал бы просто:
У меня получилось кажется:
// Открыть на youtube ссылки в PotPlayerMini по ПКМ или добавить по ctrl + ПКМ ...... addEventListener("click", (e, butt = e.button)=> { if (butt != 2 || !XULBrowserWindow.overLink) return; if (/www.youtube.com\/playlist[?]list=/.test(XULBrowserWindow.overLink) ) //А вот сюда может добавить подтверждение добавления плейлистов? {var A = "?";} //А то бывате по 500 штук видео в плейлисте. else if (!/www.youtube.com\/watch[?]v=/.test(XULBrowserWindow.overLink)) return; e.preventDefault(); e.stopPropagation(); var path = "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe"; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(false, [XULBrowserWindow.overLink, ((butt == 2 && e.ctrlKey) ? "/add" : "/autoplay")], 2); }, true, gBrowser);
Может еще с плейлистами заморочиться?
Отсутствует
fokanik
И что теперь кнопка умеет? Ссылки на youtube открывать с других сайтов.
А что имеется ввиду
Может еще с плейлистами заморочиться?
вроде в плейлист добавляется.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
А что имеется ввиду
Можно по неосторожности отправить в плеер одну ссылку, а загрузится сразу весь плейлист - 1000 штук видео
Например ссылку вида: https://www.youtube.com/watch?v=xxxxxxxx&index=6&list=xxxxxxxxxxxxxxxxxx или ссылку на сам плейлист.
А может эти ссылки порезать просто по самую загогулину &:
И плеер не будет открывать плейлисты вообще
// Открыть на youtube ссылки в PotPlayerMini по ПКМ или добавить по ctrl + ПКМ ...... addEventListener("click", (e, butt = e.button)=> { if (butt != 2 || !XULBrowserWindow.overLink) return; var url = XULBrowserWindow.overLink; if(/www.youtube.com\/watch[?]v=+[a-zA-Z0-9_-]+[&]/.test(url) ) url = url.split("&")[0]; else if (!/www.youtube.com\/watch[?]v=/.test(url)) return; e.preventDefault(); e.stopPropagation(); var path = "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe"; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(false, [url, ((butt == 2 && e.ctrlKey) ? "/add" : "/autoplay")], 2); }, true, gBrowser);
И что теперь кнопка умеет? Ссылки на youtube открывать с других сайтов.
url = url.split("&")[0]; - не совсем правильно, как переделать я не знаю.
Надо сделать ссылковычленитель нормальный , тогда будет везде правильно работать.
Отредактировано fokanik (26-10-2016 19:57:18)
Отсутствует