来自异步回调的Chrome扩展程序sendRequest无法正常工作?

时间:2012-03-18 07:22:27

标签: google-chrome-extension

无法弄清楚出了什么问题。 onRequest不是在异步回调方法调用时触发的,内容脚本的相同请求也起作用。以下示例代码。

background.js
=============
...
makeAsyncRequest();
...
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  switch (request.id) {
    case "from_content_script":
      // This works
      console.log("from_content_script");
      sendResponse({}); // clean up
    break;
    case "from_async":
      // Not working!
      console.log("from_async");
      sendResponse({}); // clean up
    break;
  }
});

methods.js
==========
makeAsyncRequest = function() {
  ...
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      ...
      // It works
      console.log("makeAsyncRequest callback");
      chrome.extension.sendRequest({id: "from_async"}, function(response) {  });
    }
  }
  ...
};

更新:清单配置文件。这里不要没有错。

{
  "name": "TestExt",
  "version": "0.0.1",
  "icons": {
    "48": "img/icon-48-green.gif"
  },
  "description": "write it later",
  "background_page": "background.html",
  "options_page": "options.html",
  "browser_action": {
    "default_title": "TestExt",
    "default_icon": "img/icon-48-green.gif"
  },
  "permissions": [
    "tabs", "http://*/*", "https://*/*", "file://*/*",
    "webNavigation"
  ]
}

1 个答案:

答案 0 :(得分:0)

我不认为问题是您从异步请求发送邮件但是因为您尝试从接收方所在的同一页面发送邮件?您可以将该sendmessage放在onreadystatechange上,但仍然在后台页面中,它仍然不会触发。为什么要将消息发送到同一页面?

我只是将你的xhr请求放在一个内容脚本中,并且它调用得很好,所以现在我确定它是因为你从接收器所在的同一页面发送消息。