提问人:sharath 提问时间:8/17/2010 最后编辑:Jacobsharath 更新时间:9/1/2010 访问量:864
在 Chrome 中传递消息
Message Passing in Chrome
问:
对使用内容脚本在 chrome 中传递消息的工作方式有一点疑问。我将 chromium 文档中给出的消息传递默认示例 (http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/messaging/timer/) 修改为如下所示:
弹出式.html
function testRequest() {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {counter: "getHTML"}, function handler(response) {
alert("Inside Client = "+response.counter2);
});
});
}
我的内容脚本如下所示:
页面.js
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
alert(request.counter);
alert("Inside server .. Req Counter = "+request.counter);
sendResponse({counter2: "5"});
});
当我从 popup.html 执行 testRequest 时,内容脚本按预期被调用。我确实收到了我所拥有的两个警报
使用各自的值声明。但是我的弹出.html响应代码似乎没有被调用..我在弹出窗口 .html 内的警报 - 未执行。alert("Inside Client = "+response.counter2);
另一方面,如果我在客户端内有一个调试点,它就可以工作!有点奇怪。.有人可以告诉我这是如何以及为什么发生的吗?
先谢谢你。.
答:
您的代码是正确的。我错了我之前说的话。
相信我,当我说这句话时,我很困惑为什么它不起作用。原来我正在 chrome://extensions/ 页面上运行浏览器操作。在 Chrome 扩展程序中,API 不会允许您执行或向该页面发送任何请求。在像 Google.com 这样的普通页面上执行此操作,您将看到弹出窗口。
您不能在弹出页面中显示警报对话框。
这就是为什么你看不到:alert("Inside Client = "+response.counter2); }
如果您想看到它的工作,您可以添加一个控制台记录器并在 Web 检查器中查看它。将警报替换为:console.log(response.counter2);
评论
据我所知,只有当弹出窗口打开时,才会出现来自弹出窗口的警报。
调试弹出窗口时会看到警报,因为调试器会使弹出窗口保持打开状态。
我很确定从后台页面创建警报也没有问题。
评论