>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >Как динамически менять свой пункт в контекстном меню? http://forum.mozilla-russia.org/viewtopic.php?id=69258 |
psihkakihmalo > 03-02-2016 10:36:17 |
Помогите разобраться. Предположим, я создаю в коде кнопки свой пункт для контекстного меню. Он получается виден всегда. Выделить код Код:/*Initialization Code*/ function runmenu(){ .... }; var contextMenu = document.getElementById("contentAreaContextMenu"); var nextEleMenu = document.getElementById("context-inspect"); var menuId = "context-livestreamer-run"; var menuItem = document.getElementById(menuId); if (menuItem) { contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem); }; menuItem = document.createElement("menuitem"); menuItem.setAttribute("label", "Мой тестовый пункт меню..."); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,....."); menuItem.addEventListener("command", runmenu, false); contextMenu.insertBefore(menuItem, nextEleMenu); contextMenu.insertBefore(document.createElement("menuseparator"), nextEleMenu); Вопрос: Можно ли сделать, чтобы этот мой пункт появлялся в меню только на определенных сайтах, а на всех остальных нет? То есть, например, на youtube.com его свойство "hidden" становилось true, а на всех других - false. Или как-то так... Можно ли сделать такое в коде кнопки? |
bunda1 > 03-02-2016 10:51:12 |
Выделить код Код:addEventListener("popupshowing", (e)=> { var url = gBrowser.currentURI; menuItem.hidden = !url.scheme.startsWith("http") || Services.eTLD.getBaseDomain(url) == "youtube.com" }, false, contextMenu); |
psihkakihmalo > 03-02-2016 11:12:16 |
что-то у меня это не работает... bunda1, как это правильно интегрировать в код моей кнопки? (я в коде разбираюсь очень-очень поверхностно пока) ...и ещё, куда там добавить ещё сайты (youtube.com , twitch.tv , goodgame.ru, ... ) чтобы на нескольких сайтах меню появлялась? |
bunda1 > 03-02-2016 11:58:32 |
psihkakihmalo Выделить код Код:((contextMenu, inspect) => { var menuItem = contextMenu.insertBefore(document.createElement("menuitem"), inspect); var separator = contextMenu.insertBefore(document.createElement("menuseparator"), inspect); menuItem.setAttribute("label", "Мой тестовый пункт меню..."); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="); addDestructor(()=> { menuItem.remove(); separator.remove(); }); addEventListener("popupshowing", (e)=> { var url = gBrowser.currentURI; menuItem.hidden = !url.scheme.startsWith("http") || /youtube.com|twitch.tv|goodgame.ru/.test( Services.eTLD.getBaseDomain(url) ) }, false, contextMenu); menuItem.onclick =()=> { alert("Мой тестовый пункт меню"); } })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-inspect")); 03-02-2016 12:06:32 |
psihkakihmalo > 03-02-2016 12:27:58 |
bunda1, спасибо!... но в твоем коде получилось всё наоборот! ..то есть на (youtube.com, twitch.tv... ) пункта НЕ видно, а на остальных сайтах он виден! ... подскажи, что подправить в коде, чтоб было наоборот, плиз |
bunda1 > 03-02-2016 12:30:32 |
psihkakihmalo пишет
!/youtube.com|twitch.tv|goodgame.ru/.test( Services.eTLD.getBaseDomain(url) ); |
psihkakihmalo > 03-02-2016 12:49:44 |
Ура!.. всё работает щас как надо, спасибо тебе большое ...и последний вопрос: сложно ли теперь будет внести изменения в код, чтобы этот пункт появлялся только если меню вызвано на ссылке? ...то есть чтобы в твоем коде, например, можно было сделать: alert( ссылка которая сейчас под курсором ); |
bunda1 > 03-02-2016 12:59:31 |
psihkakihmalo пишет
Не очень понял насчёт alert( ссылка которая сейчас под курсором ), но может так: Выделить код Код:addEventListener("popupshowing", (e)=> { var url = gBrowser.currentURI; menuItem.hidden = !url.scheme.startsWith("http") || !gContextMenu.onLink || !/youtube.com|twitch.tv|goodgame.ru/.test( Services.eTLD.getBaseDomain(url) ); }, false, contextMenu); |
psihkakihmalo > 03-02-2016 13:38:55 |
bunda1, да, да, я этого и хотел, спосибо... сейчас пункт меню появляется только если тыкнуть по ссылке bunda1 пишет
я имел в виду, что теперь хотел бы получить эту ссылку для дальнейших с ней действий ... как пример: я тыкаю в ссылку правой кнопкой > становится виден мой пункт в меню > я в него тыкаю > ссылка показывается алертом: alert(...); такое сложно сделать? |
bunda1 > 03-02-2016 13:45:34 |
psihkakihmalo пишет
Выделить код Код:menuItem.onclick =()=> { alert(gContextMenu.linkText() + "\n" + gContextMenu.getLinkURL()); } |
psihkakihmalo > 03-02-2016 14:11:20 |
ага, всё, щас то, что надо .. без тебя бы не справился (просто есть у меня одно дополнение на фоксе, но там много лишнего и оно не совсем то, что хотелось, вот я и прибился "повторить" его в коде кастомного батона, так как вскрыть и исправить сомо то дополнение оказалось для меня тёмным лесом, там код семиэтажный, мне не по зубам, а щас вот потыркавшись денёк с CB сделаю худо-бедно как мне удобно) |