2013-04-06 3 views
3

Я хочу добавить один пункт меню в контекстное меню firefox, которое отображает , только если пользователь щелкнет правой кнопкой мыши определенный URL-адрес. У меня есть функция проверки URL. Я имел обыкновение делать это, подписавшись на «popupshowing» событие и:Пользовательское контекстное меню в Firefox с дополнительным SDK?

var item = document.getElementById("custom-menu-id"); 
if (item) // show only for specific links 
    item.hidden = gContextMenu.onLink && acceptableURL(gContextMenu.linkURL); 

Я пытаюсь теперь использовать надстройку на SDK, но я больше не имею доступ к gContextMenu. Этот фрагмент из документации не работает для меня:

var cm = require("sdk/context-menu"); 
cm.Item({ 
    label: "Copy name to clipboard", 
    context: cm.URLContext("http://scholar.google*"), 
    contentScript: 'self.on("context", function(node) {return true; });' 
}); 

Вот я думаю, что это должно быть возможным, чтобы получить что-то вроде node.URL и проверить, что , но он не работает. Возможно, кто-то может предложить либо как получить доступ к gContextMenu из sdk, либо как получить URL-адрес от узла или что-то еще.

ответ

4

Этот код должен показывать только пункт меню при нажатии правой кнопкой мыши по ссылкам, направленный на stackoverflow.com:

В вашем главном модуле main.js:

exports.main = function() { 
    require("sdk/context-menu").Item({ 
     label: "stack overflow link", 
     context: require("sdk/context-menu").SelectorContext("a[href]"), 
     contentScriptFile: require("sdk/self").data.url("check-node.js"), 
     onMessage: function(msg){}, 
    }); 
}; 

в содержании сценарий (или файл сценария содержимого, в этом случае check-node.js):

self.on("click",function(node,data){ 
    self.postMessage("click"); 
}); 
self.on("context", function(node){ 
    if(node.href && node.href.match(/^https?:\/\/(\w+\.)*stackoverflow\.com(\/.*)?$/))return true; //show in context menu if return value is true. 
}); 

Re: Ваш образец кода. У вас есть URLContext, который определяет, на каких страницах отображаются ваши пункты меню, и этот фрагмент self.on("context", function(node) {return true; }); заставляет пункт меню всегда показывать, когда выполнены условия URLContext. Вместо этого используйте SelectorContext. И протестируйте node.href, как показано выше, вернув true, только если вы хотите отобразить пункт меню.

Смежные вопросы