5

私はMozilla WebExtensionを開発しています。 contextMenus.create()で作成したコンテキストメニューの選択をクリックしたフレームにのみJavaScriptファイルを挿入します。iframeIdをcontextMenusのonclickイベントハンドラで取得する方法は?

私が使用しています:

browser.contextMenus.create({ 
    "title": "Records", 
    "contexts": ["all","link"], 
    "id" : "M1", 
    "onclick": onClickContextMenu, 
}, function() { }); 

function onClickContextMenu(info, tab){ 

    var clickedFrameID=""; //How do I get the actual frameId where click occurred? 

    browser.tabs.executeScript(tab.id,{ 
         file: "fileName.js", 
         allFrames: false, 
         frameId: clickedFrameID 
        }, function() { 
     console.log("Script injected"); 
    }); 
} 

どうclickedFrameIDを取得するには?

+1

を取るために、私は同じ問題に直面しています。解決策はありますか?あらかじめThanx。 "レコード"、 "コンテキスト":[ "すべて"、 "リンク"]、 "ID" 私はcontextMenusでやっている – MohammedAshrafali

+0

申し訳ありませんが、先生これ、事はイベント browser.contextMenus.create({ "タイトル" をクリック: "M1"、 "onclick":onClickContextMenu、 }、function(){ }); onClickContextMenuは、この方法では、私はfileName.jsファイルを注入していますが、ここで私は私が「情報」と「タブ」オブジェクトを取得しますが、あなたの質問にその情報を指定すると –

+0

@ChandrakantThakkarをiFrameIdおりませんここで、現在のiframe のフレームIDを取得しておりませんコメントだけではありません。あなたの質問は今すぐです**広すぎ** **閉鎖される可能性があります。 'ContextMenus'項目のクリックの結果としてこれが実行されていることを明確に述べる(そしてコードで表示したい)場合は、これを実行する方法で答えることができます。 – Makyen

答えて

3

私はmanifest.jsonをからすべてのフレームに「messageListener.js」ファイルを注入してきた私(チャンドラThakkar)と私のチームリーダー氏ニティンMakwanaこのような状況のためのソリューションを持って、

初のテストを非常に多く行った後、 「のcontextMenu」リスナーの作成「messageListener.js」ファイルに続いて

"content_scripts": [ 
{ 
     "matches": ["https://*/*","http://*/*"], 
     "css":["jquery-ui.css"], 
     "js": [ 
      "jquery.js", 
      "jquery-ui.js",    
      "content_scripts/msg_listener.js" 
     ], 
     "all_frames":true 
} 

などのファイルと私はのcontextMenu(右クリック)

などをクリックすると、背景のjsファイルにメッセージを送ります

ここでは、「[email protected]」は、メッセージを送信するWeb拡張のIDです。

そこで、今、私は「fileName.js」ファイルを注入してきた私のバックグラウンドのjsファイルでは、私は「clickedFrameID」という名前のグローバル変数を宣言しているし、同じファイル内に、私は

browser.runtime.onMessage.addListener(
    function(msg, sender, callback) { 
     if(msg.type === 'onContextMenuClicked') 
      { 
       if(sender.hasOwnProperty("frameId")){ 
        clickedFrameID=sender.frameId; 
       }else{ 
        clickedFrameID=""; 
       } 
      } 
}); 

以下のようにonMessageリスナーが追加されました特定のフレームを下に表示

var clickedFrameID=""; //This is a Global Variable 
    browser.contextMenus.create({ 
    "title": "Records", 
    "contexts": ["all","link"], 
    "id" : "M1", 
    "onclick": onClickContextMenu, 
    }, function() { }); 

function onClickContextMenu(info, tab){ 
    var options={}; 
    if(clickedFrameID !="" && clickedFrameID!=null && 
    clickedFrameID!=undefined) 
        { 
         options={ 
         file: "fileName.js", 
         allFrames: false, 
         frameId: clickedFrameID 
         }; 
        } 


    browser.tabs.executeScript(tab.id,options, function() { 
    console.log("Script injected"); 
    }); 
} 

ここで、「fileName.js」が右クリックされた特定のフレームに挿入されます。

おかげで@wOxxOm、@MohammedAshrafali、@Makyenはい関心

関連する問題