Расширение Chrome - Background.html sendResponse для скрипта содержимого - PullRequest
1 голос
/ 05 мая 2011

Я прочитал бесчисленные ответы здесь, в Stockoverflow, но, похоже, никто не помог мне ответить на мой вопрос. Вот мой код:

Background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {

    if (request.method == "getIP") {

        var req = new XMLHttpRequest();
        var domain
        var ip = "bla";

        chrome.tabs.getSelected(null,function(tab) {
            domain = tab.url;
            domainSplit = domain.match(/^[\w-]+:\/*\[?([\w\.:-]+)\]?(?::\d+)?/)[1];

            req.open (
                    "GET",
                    "http://colourpad.co.uk/projects/dub3helper/ip.php?" + domainSplit,
                    true);
                req.onreadystatechange = getIP;
                req.send(null);

                function getIP() {
                    if(req.readyState == 4) {
                        var ip = req.responseText;
                        alert (ip);
                        sendResponse({domainToIP: "Tester " + ip });    
                    }   
                }
            });             
        }
    else {
        sendResponse({}); //Snub them
    }

});

Содержимое скрипта

chrome.extension.sendRequest({method: "getIP"}, function(response) {
    $("p#versionNumber").append("<span>: " + response.domainToIP + "</span>");
});

Основы скрипта работают правильно, то есть он возвращает ip как предупреждение (ip); работает с правильными данными IP. Кажется, проблема в отправке переменной ip в мой контент-скрипт. Я думаю, что это может быть простой случай размещения sendResponse в неправильном месте, но я действительно не понимаю, почему в данный момент. Я новичок в разработке расширений Chrome.

Любая помощь приветствуется, она сводит меня с ума!

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Кажется, что код конфликтовал с другим onRequest.addListener, используемым на странице background.html.Исправлена ​​ошибка, при которой оба отдельных слушателя объединялись в один, разделенный регистром переключателя:

1 голос
/ 05 мая 2011

Ваш пример работал нормально для меня.Может быть, вы получаете ответ, но ваш контент-скрипт не отображает его?Попробуйте console.log(response) вместо этого jquery и проверьте консоль как для скрипта содержимого, так и для фоновой страницы, возможно, есть какие-то ошибки.

Пара предложений о вашей фоновой странице:

Вместо:

chrome.tabs.getSelected(null,function(tab) {
    domain = tab.url;
    ...
});

Вы можете использовать:

domain = sender.tab.url;

Вместо:

req.onreadystatechange = getIP;
function getIP() {
    ...
}

Попробуйте:

req.onreadystatechange = function() {
    ...
}

Обновление:

Попробуйте закрыть:

req.onreadystatechange = (function(sendResponse) {
    return function () {
      if(req.readyState == 4) {
          ... 
      }   
  }
})(sendResponse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...