在ContextMenu上向注入的内容脚本发送请求单击

Sri*_*agi 4 javascript google-chrome-extension

我已经在用户访问的每个页面中注入了代码.但我希望在用户单击由同一扩展名创建的contextMenu时触发此脚本.简而言之,我必须在background.html和内容脚本之间传递消息,但触发器应该在单击上下文菜单时发生.

这是我尝试过的

//background.html

function subFunction(info,tab){
        var x = info.selectionText;
            alert("x");//This is working fine
        chrome.tabs.getSelected(null, function(tab) {
          chrome.extension.sendRequest({"variable1":x,"type":"y"});
        }); 
    }
chrome.contextMenus.create({"title": "Submit", "onclick": subFunction,"contexts":['selection']});
Run Code Online (Sandbox Code Playgroud)

//myscript.js

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        alert("Seems like I am in");
        if(request.type == 'y'){
                   alert("This is" + request.x);
                }
});
Run Code Online (Sandbox Code Playgroud)

有谁能告诉我哪里出了问题.据我所知,tabs.getSelected与tab.id作为第一个参数是错误的.但由于点击的来源是上下文菜单,可能是它没有读取tab.id或者它不理解我正在处理哪个选项卡.

Moh*_*our 6

首先是chrome.extension.sendRequest和之间的错误chrome.tabs.sendRequest.您的方法签名不正确sendRequest,它缺少一个参数(这不是可选的).第一个参数是"扩展ID",在这种情况下它应该为null.

如果要将消息发送到其他扩展页面,请使用chrome.extension.sendRequest.如果要向内容脚本发送消息,则需要使用chrome.tabs.sendRequest.

在这种情况下,你需要使用,chrome.tabs.sendRequest因为你的onRequest听众住在那里.您仍然需要第一个参数,即您的标签ID.

chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {"variable1":x,"type":"y"});
}); 
Run Code Online (Sandbox Code Playgroud)