Расширение Chrome sendRequest из асинхронного обратного вызова не работает? - PullRequest
0 голосов
/ 18 марта 2012

Не могу понять, что не так.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 голосов
/ 18 марта 2012

Не думаю, что проблема в том, что вы отправляете сообщение из асинхронного запроса, а потому, что вы пытаетесь отправить сообщение с той же страницы, на которой находится получатель? Вы можете поместить это sendmessage из onreadystatechange, но все еще на фоновой странице, и оно все равно не сработает. Почему вы хотите отправить сообщение на той же странице в любом случае?

Я просто поместил ваш xhr-запрос в скрипт контента, и он вызвал просто отлично, так что теперь я уверен, что это потому, что вы отправляете сообщение с той же страницы, на которой находится получатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...