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

时间:2012-08-23 20:24:10

标签: javascript google-chrome-extension

目前我正在使用消息传递来发送我的脚本中的请求以获取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函数),然后运行东西,但这需要更多的内存,感觉就像是一个糟糕的方式这样做,因为你基本上会有两次完全相同的代码。

2 个答案:

答案 0 :(得分:3)

要将邮件从扩展程序发送到内容脚本,请使用chrome.tabs.sendRequest代替chrome.extension.sendRequest

由于sendRequest has been superseded by onMessage in Chrome 20sendRequest不再有官方文档。可以找到chrome.tabs.sendMessage的文档here。请注意,这些活动不能混用,请使用*Request *Message

答案 1 :(得分: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的发送到当前选中的标签,请查看相关文档。