如何在contextMenus onclick事件处理程序中获取iframeId?

时间:2017-08-04 07:00:47

标签: javascript google-chrome-extension firefox-webextensions

我正在开发一个Mozilla WebExtension。我想只将JavaScript文件注入到我点击了使用contextMenus.create()创建的上下文菜单选项的框架中。

我正在使用:

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 个答案:

答案 0 :(得分:0)

经过如此多的测试(Chandrakant Thakkar)和我的团队负责人Nitin Makwana先生为这种情况找到了解决方案,

首先,我在manifest.json文件的所有帧中注入了“messageListener.js”文件

grep

然后在“messageListener.js”文件中创建“contextMenu”监听器并在单击contextMenu(右键单击鼠标)时将消息发送到Background js文件 如

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

这里,“abc@gmail.com”是我想要发送消息的网络扩展的ID。

然后,在我的后台js文件中,我已经在名为“clickedFrameID”的全局变量上声明了,并且在同一个文件中我添加了onMessage Listener,如下所示

document.addEventListener("contextmenu", handleContextMenu, false);
function handleContextMenu(event){
     browser.runtime.sendMessage("abc@gmail.com",{type: 
     "onContextMenuClicked", sender:event });
 }

现在我在特定的Frame中注入了“fileName.js”文件

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

现在,“fileName.js”将在特定的框架中注入,我已经右键单击。

感谢@wOxxOm,@ MohammedAshrafali,@Makyen感兴趣