У меня есть расширение 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");
};
});
}());
Когда я запускаю это, я вижу журнал консоли для
- "в обратном вызове sendRequest"
- "в response.result= 1 "
, но я не получаю журнал консоли для" inbackload callback ", который находится внутри обратного вызова для прослушивателя событий beforeload.
Есть ли что-то, чтоЯ скучаю .... я ожидаю, что обратный вызов beforeload сработает и увидит сообщение журнала консоли, но я этого не делаю.Я пытаюсь сделать запрос к своему приложению, чтобы проверить, включено ли оно, прежде чем я обработаю какой-либо код внутри своего обработчика событий beforeload.
код работает нормально, когда я удаляю все, кроме регистрации прослушивателя события beforeload, например ::
document.addEventListener("beforeload", function(event) {
console.log("in beforeload callback");
}, true);
похоже, что прослушиватель событий никогда не регистрируется, если он вложен в chrome.extension.sendRequest
?Если я не могу использовать этот маршрут для запроса настроек своего приложения, есть ли лучший способ сделать это?