我已将代码注入(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.sendRequest
和 chrome.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/