Javascript chrome.request.sendRequest()中document.addEventListener()存在问题

Javascript chrome.request.sendRequest()中document.addEventListener()存在问题,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个GoogleChrome扩展,我在其中创建了一个后台页面,查询扩展的设置,在我的例子中,我只是查询一个启用/禁用的变量 首先,这里是manifest.json: { "name": "Foo", "version": "0.1", "description": "", "icons": { "128": "128.png", "48": "48.png", "16": "16.png" },

我有一个GoogleChrome扩展,我在其中创建了一个后台页面,查询扩展的设置,在我的例子中,我只是查询一个启用/禁用的变量

首先,这里是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回调中”
  • “in response.result=1”
  • 但是我没有得到“在beforeload回调中”的控制台日志,它位于“beforeload”事件侦听器的回调中

    是否有我遗漏的东西…我希望加载前回调会触发并看到控制台日志消息,但我没有。在处理beforeload eventlistener中的任何代码之前,我正在尝试查询我的应用程序以检查它是否已启用

    当我删除除beforeload事件侦听器注册之外的所有内容时,代码运行良好,例如:

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

    当事件侦听器嵌套在
    chrome.extension.sendRequest
    中时,它似乎从未注册过?如果我无法使用此路由查询我的应用程序设置,是否有更好的方法来执行此操作?

    在加载事件触发后连接事件侦听器

    (function() {
    // load event has already fired.
    ...
    }());
    
    相反,您应该只执行将放置在事件侦听器中的
    if
    中的代码