我有一个谷歌浏览器扩展程序,我在其中创建了一个后台页面,我查询了我的扩展程序的设置,在我的情况下,我只是查询启用/禁用的变量。
首先,这是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");
};
});
}());
当我运行它时,我可以看到
的控制台日志但是我没有得到“inload callback”的控制台日志,这是“beforeload”事件监听器的回调内部。
是否有一些我遗漏的东西....我希望beforeload回调能够触发并看到控制台日志消息,但我没有。在我处理beforeload eventlistener中的任何代码之前,我正在尝试查询我的应用程序以检查它是否已启用。
当我删除除了beforeload事件监听器注册之外的所有内容时,代码运行正常,例如:
document.addEventListener("beforeload", function(event) {
console.log("in beforeload callback");
}, true);
当事件监听器嵌套在chrome.extension.sendRequest
内时,它似乎永远不会被注册?如果我无法使用此路线查询我的应用设置,是否有更好的方法来执行此操作?
答案 0 :(得分:0)
在加载事件触发后附加事件侦听器。
(function() {
// load event has already fired.
...
}());
相反,您应该只执行要放在事件侦听器中的if
内的代码。