消息在Chrome中传递

时间:2010-08-17 01:13:46

标签: google-chrome google-chrome-extension chromium

对使用内容描述的Chrome中的邮件传递方式有一点疑问。我将chrome文档中给出的消息传递的默认示例(http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/messaging/timer/)修改为如下所示:

popup.html

function testRequest() {

  chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {counter: "getHTML"}, function handler(response) {
      alert("Inside Client = "+response.counter2);
    });
  });
}

我的内容脚本如下所示:

page.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时,内容脚本将按预期调用。我确实得到了我的警报 用各自的价值宣布。但是我的popup.html响应代码似乎没有被调用..我在popup.html内部的警报 - alert("Inside Client = "+response.counter2);没有被执行。

另一方面,如果我在客户端内部有一个调试点,它的工作原理!有点奇怪..谁能告诉我这是怎么发生以及为什么会发生这种情况?

提前谢谢..

2 个答案:

答案 0 :(得分:1)

你的代码是正确的。我错了之前说过的话。

当我说出来时,请相信我,我很困惑为什么它不起作用。结果是我在chrome:// extensions / page上运行浏览器操作。在Chrome扩展程序中,API不允许您执行或向该页面发送任何请求。在像Google.com这样的常规页面上进行操作,您将看到弹出窗口。

您无法在弹出页面中显示警告对话框。

<击>

这就是为什么你看不到:alert("Inside Client = "+response.counter2); }

如果要查看它是否有效,可以添加控制台记录器并在Web Inspector中查看它。将警报替换为:console.log(response.counter2);

答案 1 :(得分:0)

据我所知,只有弹出窗口打开时,弹出窗口才会显示警告。

您在调试弹出窗口时会看到警报,因为调试器会保持弹出窗口打开。

我非常确定从后台页面创建警报也没有问题。