2013-04-06 46 views
3

我希望在firefox上下文菜單中添加一個菜單項,該菜單僅在用戶右鍵單擊特定url時纔會顯示 。我有一個函數來測試網址。 我用來做這個通過訂閱「popupshowing」事件:使用附加SDK的Firefox中的自定義上下文菜單?

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

現在我試圖使用Add-on 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和測試, 但它不工作。也許有人可能會建議如何從SDK訪問gContextMenu,或者如何從節點或其他東西獲取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. 
}); 

回覆:您的示例代碼。您有URLContext,它決定了您的菜單項顯示的頁面,此代碼段self.on("context", function(node) {return true; });會導致菜單項在滿足URLContext條件時始終顯示。改爲使用SelectorContext。並且如上所示測試node.href,僅當您想要顯示菜單項時才返回true。

相關問題