Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.
  • Форумы
  •  » Сustom Buttons
  •  » Как динамически менять свой пункт в контекстном меню?

№103-02-2016 10:36:17

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Как динамически менять свой пункт в контекстном меню?

Помогите разобраться. Предположим, я создаю в коде кнопки свой пункт для контекстного меню. Он получается виден всегда.

Выделить код

Код:

/*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. Или как-то так... Можно ли сделать такое в коде кнопки?

Отсутствует

 

№203-02-2016 10:51:12

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Как динамически менять свой пункт в контекстном меню?

Выделить код

Код:

addEventListener("popupshowing", (e)=> {
   var url = gBrowser.currentURI;
   menuItem.hidden = !url.scheme.startsWith("http") || Services.eTLD.getBaseDomain(url) == "youtube.com"             
}, false, contextMenu);

Отсутствует

 

№303-02-2016 11:12:16

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Re: Как динамически менять свой пункт в контекстном меню?

что-то у меня это не работает...  bunda1, как это правильно интегрировать в код моей кнопки? (я в коде разбираюсь очень-очень поверхностно пока)

...и ещё, куда там добавить ещё сайты (youtube.com , twitch.tv , goodgame.ru, ... ) чтобы на нескольких сайтах меню появлялась?

Отсутствует

 

№403-02-2016 11:58:32

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Как динамически менять свой пункт в контекстном меню?

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)

Отсутствует

 

№503-02-2016 12:27:58

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Re: Как динамически менять свой пункт в контекстном меню?

bunda1, спасибо!... но в твоем коде получилось всё наоборот! ..то есть на (youtube.com, twitch.tv... ) пункта НЕ видно, а на остальных сайтах он виден! ... подскажи, что подправить в коде, чтоб было наоборот, плиз

Отсутствует

 

№603-02-2016 12:30:32

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Как динамически менять свой пункт в контекстном меню?

psihkakihmalo пишет

подскажи, что подправить в коде, чтоб было наоборот, плиз

!/youtube.com|twitch.tv|goodgame.ru/.test( Services.eTLD.getBaseDomain(url) );

Отсутствует

 

№703-02-2016 12:49:44

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Re: Как динамически менять свой пункт в контекстном меню?

Ура!.. всё работает щас как надо, спасибо тебе большое

...и последний вопрос: сложно ли теперь будет внести изменения в код, чтобы этот пункт появлялся только если меню вызвано на ссылке? ...то есть чтобы в твоем коде, например, можно было сделать: alert( ссылка которая сейчас под курсором );

Отсутствует

 

№803-02-2016 12:59:31

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Как динамически менять свой пункт в контекстном меню?

psihkakihmalo пишет

внести изменения в код, чтобы этот пункт появлялся только если меню вызвано на ссылке? ...то есть чтобы в твоем коде, например, можно было сделать: 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);

Отсутствует

 

№903-02-2016 13:38:55

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Re: Как динамически менять свой пункт в контекстном меню?

bunda1, да, да, я этого и хотел, спосибо... сейчас пункт меню появляется только если тыкнуть по ссылке

bunda1 пишет

Не очень понял насчёт alert( ссылка которая сейчас под курсором )

я имел в виду, что теперь хотел бы получить эту ссылку для дальнейших с ней действий ... как пример: я тыкаю в ссылку правой кнопкой > становится виден мой пункт в меню > я в него тыкаю > ссылка показывается алертом: alert(...);

такое сложно сделать?

Отсутствует

 

№1003-02-2016 13:45:34

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Как динамически менять свой пункт в контекстном меню?

psihkakihmalo пишет

я тыкаю в ссылку правой кнопкой > становится виден мой пункт в меню > я в него тыкаю > ссылка показывается алертом: alert(...);

Выделить код

Код:

menuItem.onclick =()=> {
      alert(gContextMenu.linkText() + "\n" + gContextMenu.getLinkURL());
   }

Отсутствует

 

№1103-02-2016 14:11:20

psihkakihmalo
Участник
 
Группа: Members
Зарегистрирован: 28-01-2016
Сообщений: 31
UA: Firefox 43.0

Re: Как динамически менять свой пункт в контекстном меню?

ага, всё, щас то, что надо .. без тебя бы не справился

(просто есть у меня одно дополнение на фоксе, но там много лишнего и оно не совсем то, что хотелось, вот я и прибился "повторить" его в коде кастомного батона, так как вскрыть и исправить сомо то дополнение оказалось для меня тёмным лесом, там код семиэтажный, мне не по зубам, а щас вот потыркавшись денёк с CB сделаю худо-бедно как мне удобно)

Отсутствует

 
  • Форумы
  •  » Сustom Buttons
  •  » Как динамически менять свой пункт в контекстном меню?

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]