1

目前,我正在使用消息传递从我的 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 函数),然后运行一些东西,但这会占用更多内存,而且感觉是一种不好的方法,因为你基本上会有两次完全相同的代码。

4

2 回答 2

3

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

因为sendRequest已经onMessage在 Chrome 20中被取代,所以没有官方文档了sendRequestchrome.tabs.sendMessage可在此处找到文档。请注意,这些事件不能混合使用,请使用*Request *Message

于 2012-08-23T23:21:14.507 回答
1

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

内容脚本存在于页面的 DOM 中。在 Chrome 中打开的每个页面都有一个与之关联的标签 ID—— http: //developer.chrome.com/extensions/tabs.html#type-tabs.Tab

假设您要将 {method: "apply"} 发送到刚刚在新标签页中打开的页面:

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

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

于 2012-08-23T23:58:12.830 回答