目前我正在使用消息传递来发送我的脚本中的请求以获取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函数),然后运行东西,但这需要更多的内存,感觉就像是一个糟糕的方式这样做,因为你基本上会有两次完全相同的代码。
答案 0 :(得分:3)
要将邮件从扩展程序发送到内容脚本,请使用chrome.tabs.sendRequest
代替chrome.extension.sendRequest
。
由于sendRequest
has been superseded by onMessage
in Chrome 20,sendRequest
不再有官方文档。可以找到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的发送到当前选中的标签,请查看相关文档。