是否可以从弹出窗口触发内容脚本中的行为

Is it possible to trigger behavior in the content script from the popup?

本文关键字:脚本 窗口 是否      更新时间:2023-09-26

当前,我正在使用消息传递从我的contentscript中发送对localStorage中数据的请求,我对此没有任何问题,内容脚本正在按预期工作。

你能从另一个方向做这个吗?

我在内容脚本中有一个对象,它有一个名为".apply()"的方法,我想在用户单击选项时运行它。

我试着在内容脚本中做一个监听器,如下所示:

var myLinker = new Linker();
chrome.extension.onRequest.addListener(function(request) {
    if (request.method == "apply")
{
        myLinker.apply("nothing");
        alert("applied");
}
    else
      ; //Do nothing

并像这样向它发送请求:

chrome.extension.sendRequest({method: "apply"}, function(){
    alert("Tried to request");
});

我知道这有点像黑客,但这是我唯一能想到的,而且它甚至不起作用=/

有办法做到这一点吗?

我很确定我可以从弹出窗口向页面注入新代码(我想我看到了一个api函数),然后运行一些东西,但这会占用更多内存,而且感觉这是一种糟糕的方法,因为你基本上会有两次完全相同的代码。

要从扩展向内容脚本发送消息,请使用chrome.tabs.sendMessage而不是chrome.extension.sendRequest

由于sendRequest在Chrome 20中已被onMessage取代,因此sendRequest不再有官方文档。chrome.tabs.sendMessage的文档可在此处找到。请注意,这些事件不能混合使用,请使用*Request*Message

是的,您可以使用这个:http://developer.chrome.com/extensions/tabs.html#method-sendMessage

内容脚本位于页面的DOM中。在Chrome中打开的每个页面都有一个与之相关的选项卡ID——http://developer.chrome.com/extensions/tabs.html#type-选项卡选项卡

假设您想将{方法:"应用"}发送到刚刚在新选项卡中打开的页面:

chrome.tabs.onCreated.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id, { method: "apply" });
});

还有其他事件/方法可以获得你想要发送消息的特定选项卡。我认为有一个名为getCurrent的方法可以发送到当前选择的选项卡,请查看文档。