4

ユーザーが特定の URL を右クリックした場合にのみ表示される単一のメニュー項目を Firefox のコンテキスト メニューに追加したいと考えています。URLをテストする機能があります。「popupshowing」イベントにサブスクライブしてこれを行っていました。

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 のようなものを取得してテストすることは可能だと思いますが、うまくいきません。SDK から gContextMenu にアクセスする方法や、ノードなどから URL を取得する方法を誰かが提案できるかもしれません。

4

1 に答える 1

5

このコードは、 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 を返します。

于 2013-04-09T04:27:15.343 に答える