Страницы: 1
Помогите разобраться. Предположим, я создаю в коде кнопки свой пункт для контекстного меню. Он получается виден всегда.
/*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. Или как-то так... Можно ли сделать такое в коде кнопки?
Отсутствует
addEventListener("popupshowing", (e)=> { var url = gBrowser.currentURI; menuItem.hidden = !url.scheme.startsWith("http") || Services.eTLD.getBaseDomain(url) == "youtube.com" }, false, contextMenu);
Отсутствует
что-то у меня это не работает... bunda1, как это правильно интегрировать в код моей кнопки? (я в коде разбираюсь очень-очень поверхностно пока)
...и ещё, куда там добавить ещё сайты (youtube.com , twitch.tv , goodgame.ru, ... ) чтобы на нескольких сайтах меню появлялась?
Отсутствует
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
Вместо alert("Мой тестовый пункт меню"); можешь положить свой код который должен запускать твой пункт меню.
Отредактировано bunda1 (03-02-2016 12:06:32)
Отсутствует
bunda1, спасибо!... но в твоем коде получилось всё наоборот! ..то есть на (youtube.com, twitch.tv... ) пункта НЕ видно, а на остальных сайтах он виден! ... подскажи, что подправить в коде, чтоб было наоборот, плиз
Отсутствует
подскажи, что подправить в коде, чтоб было наоборот, плиз
!/youtube.com|twitch.tv|goodgame.ru/.test( Services.eTLD.getBaseDomain(url) );
Отсутствует
Ура!.. всё работает щас как надо, спасибо тебе большое
...и последний вопрос: сложно ли теперь будет внести изменения в код, чтобы этот пункт появлялся только если меню вызвано на ссылке? ...то есть чтобы в твоем коде, например, можно было сделать: alert( ссылка которая сейчас под курсором );
Отсутствует
внести изменения в код, чтобы этот пункт появлялся только если меню вызвано на ссылке? ...то есть чтобы в твоем коде, например, можно было сделать: alert( ссылка которая сейчас под курсором );
Не очень понял насчёт 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);
Отсутствует
bunda1, да, да, я этого и хотел, спосибо... сейчас пункт меню появляется только если тыкнуть по ссылке
Не очень понял насчёт alert( ссылка которая сейчас под курсором )
я имел в виду, что теперь хотел бы получить эту ссылку для дальнейших с ней действий ... как пример: я тыкаю в ссылку правой кнопкой > становится виден мой пункт в меню > я в него тыкаю > ссылка показывается алертом: alert(...);
такое сложно сделать?
Отсутствует
я тыкаю в ссылку правой кнопкой > становится виден мой пункт в меню > я в него тыкаю > ссылка показывается алертом: alert(...);
menuItem.onclick =()=> { alert(gContextMenu.linkText() + "\n" + gContextMenu.getLinkURL()); }
Отсутствует
ага, всё, щас то, что надо .. без тебя бы не справился
(просто есть у меня одно дополнение на фоксе, но там много лишнего и оно не совсем то, что хотелось, вот я и прибился "повторить" его в коде кастомного батона, так как вскрыть и исправить сомо то дополнение оказалось для меня тёмным лесом, там код семиэтажный, мне не по зубам, а щас вот потыркавшись денёк с CB сделаю худо-бедно как мне удобно)
Отсутствует
Страницы: 1