javascript - 在 ContextMenu Click 上发送请求到注入(inject)的内容脚本

标签 javascript google-chrome-extension

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

这是我尝试过的

//背景.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']});

//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);
                }
});

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

最佳答案

首先在 chrome.extension.sendRequestchrome.tabs.sendRequest 之间弄错了。 sendRequest 的方法签名不正确,它缺少一个参数(不是可选的)。第一个参数是“扩展 ID”,在本例中它应该为空。

如果您想向其他扩展页面发送消息,您可以使用 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"});
}); 

关于javascript - 在 ContextMenu Click 上发送请求到注入(inject)的内容脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288433/

相关文章:

javascript - 将 .focus 设置为倒数第二个输入,而不是第一个或最后一个

javascript - PHP 在 Javascript 中包含 ('file.txt' )

javascript - 从 chrome.storage.sync.get 获得更多值(value)

mysql - 如何通过扩展程序在 Gmail 中创建新按钮/功能?

google-chrome-extension - 是否有 API/方法可以以编程方式获取 chromebook 中的可用磁盘大小?

javascript - jQuery $(document).off() 在 Chrome 扩展中不起作用

javascript - Node.js,不调用处理程序回调

javascript - 寻找数组中最短的字符串

javascript - 如何使 jQuery 函数迭代从同一类中的 2 个列表中获取的单独数组?

javascript - 数组在运行时函数之外未定义