проблемы с document.addEventListener () внутри chrome.request.sendRequest () - PullRequest
0 голосов
/ 25 января 2012

У меня есть расширение Google Chrome, в котором я создал фоновую страницу, для которой я запрашиваю настройки своего расширения, в моем случае я просто запрашиваю переменную включенного / отключенного.

сначала здесьэто manifest.json:

{
    "name": "Foo",
    "version": "0.1",
    "description": "",
    "icons": {
        "128": "128.png",
        "48": "48.png",
        "16": "16.png"
    },
    "content_scripts": [{
        "all_frames": true,
        "js": ["foo.js"],
        "matches": ["http://*/*", "https://*/*"],
        "run_at": "document_start"
    }],
    "background_page" : "background.html",
    "browser_action": {
        "default_icon": "icons/19x19.png",
        "default_title": "Foo",
        "default_popup": "popup.html"
    }
}

javascript фоновой страницы выглядит так:

FooApp = {};
FooApp.enabled = 1;

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        if (request.getSetting == "enabled") {
            sendResponse({result: FooApp.enabled});
        }
    }
);

и в моем скрипте содержимого я запрашиваю фоновую страницу, чтобы увидеть, включен ли скрипт& должен выполнить:

(function() {
    chrome.extension.sendRequest({getSetting: "enabled"}, function(response) {
        console.log("in sendRequest callback");
        if (response.result == 1) {
            console.log("in response.result = 1");
            document.addEventListener("beforeload", function(event) {
                console.log("in beforeload callback");
            }, true);
        } else {
            console.log("in response.result = 0");
        };
    });
}());

Когда я запускаю это, я вижу журнал консоли для

  1. "в обратном вызове sendRequest"
  2. "в response.result= 1 "

, но я не получаю журнал консоли для" inbackload callback ", который находится внутри обратного вызова для прослушивателя событий beforeload.

Есть ли что-то, чтоЯ скучаю .... я ожидаю, что обратный вызов beforeload сработает и увидит сообщение журнала консоли, но я этого не делаю.Я пытаюсь сделать запрос к своему приложению, чтобы проверить, включено ли оно, прежде чем я обработаю какой-либо код внутри своего обработчика событий beforeload.

код работает нормально, когда я удаляю все, кроме регистрации прослушивателя события beforeload, например ::

document.addEventListener("beforeload", function(event) {
    console.log("in beforeload callback");
}, true);

похоже, что прослушиватель событий никогда не регистрируется, если он вложен в chrome.extension.sendRequest?Если я не могу использовать этот маршрут для запроса настроек своего приложения, есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 25 января 2012

Вы подключаете прослушиватель событий после срабатывания события load.

(function() {
// load event has already fired.
...
}());

Вместо этого вы должны просто выполнить код внутри if, который вы собирались поместить в прослушиватель событий.

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