1

对使用内容脚本在 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);没有被执行。

另一方面,如果我在客户端中有一个调试点,它就可以工作!有点奇怪..有人可以告诉我这是怎么发生的以及为什么会发生吗?

先感谢您..

4

2 回答 2

1

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

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

您不能在弹出页面中显示警报对话框。

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

如果您想查看它是否正常工作,您可以添加一个控制台记录器并在 Web Inspector 中查看它。将警报替换为: console.log(response.counter2);

于 2010-08-17T01:51:06.933 回答
0

据我所知,只有在弹出窗口打开时才会出现来自弹出窗口的警报。

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

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

于 2010-08-31T21:57:50.030 回答