gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:32 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com