在我的扩展程序中,mybuttonl
中名为popup.html
的按钮是
单击后,它会向"getvar"
发送消息contentscript.js
,"I want var1"
会向background.html
发送消息var1
以获取名为mybutton2
的对象。 (同样设置了一个名为var2
的按钮,但单击时会获得chrome.extension.onRequest.addListener
对象。
我该如何实现?
更重要的是,我对chrome.extension.sendRequest
和{{1}}方法感到有些困惑。有人可以解释一下吗?
答案 0 :(得分:16)
onRequest.addListener和sendRequest是Chrome扩展程序Messaging的一部分。这位于http://developer.chrome.com/extensions/messaging.html
基本上,您使用“onRequest.addListener”侦听某个请求,该请求是某人通过触发“sendRequest”发送的。
在您的情况下,您在内容脚本中放置了一个“onRequest.addListener”来侦听来自弹出窗口的请求(使用sendRequest)。从您的内容脚本中,您可以将响应返回到弹出窗口以处理正在发生的事情。在弹出窗口中,您可以使用chrome.extension.getBackgroundPage()直接访问后台页面。
如果您希望您的内容脚本也与您的后台页面进行通信(由于您的制作工作更复杂,则不需要),您可以在后台页面添加“onRequest.addListener”,该页面仅监听来自的请求内容脚本。为此,Message Passing完美地解释了这一点。 “sender.tab”如果为true,则为内容脚本。
以下示例(未经测试)显示了我对消息传递的意思。记住,尽量保持简单而不复杂的东西。
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {method: "fromPopup", tabid: tab.id}, function(response) {
console.log(response.data);
});
});
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "fromPopup") {
// Send JSON data back to Popup.
sendResponse({data: "from Content Script to Popup"});
// Send JSON data to background page.
chrome.extension.sendRequest({method: "fromContentScript"}, function(response) {
console.log(response.data);
});
} else {
sendResponse({}); // snub them.
}
});
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
// From content script.
if (sender.tab) {
if (request.method == "fromContentScript")
sendResponse({data: "Response from Background Page"});
else
sendResponse({}); // snub them.
}
});