Javascript chrome.windows.onFocusChanged.addListener在关闭chrome时被激发,插件崩溃

Javascript chrome.windows.onFocusChanged.addListener在关闭chrome时被激发,插件崩溃,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在编写一个chrome扩展,它使用chrome.windows.onFocusChanged.addListener执行一个内容脚本。只要我在不同的chrome窗口之间切换,它就可以正常工作。然而,当chrome关闭时,侦听器也会被触发。在这种情况下,函数中的代码会导致扩展崩溃 我试图查克未定义的,但这似乎不是问题 代码看起来像这样 chrome.windows.onFocusChanged.addListener(function() { var ctab = chrom

我正在编写一个chrome扩展,它使用
chrome.windows.onFocusChanged.addListener
执行一个内容脚本。只要我在不同的chrome窗口之间切换,它就可以正常工作。然而,当chrome关闭时,侦听器也会被触发。在这种情况下,函数中的代码会导致扩展崩溃

我试图查克未定义的,但这似乎不是问题

代码看起来像这样

chrome.windows.onFocusChanged.addListener(function() 
{
        var ctab = chrome.tabs.getCurrent;
        if(typeof  ctab === "undefined")
        {

        }
        else
        {
            chrome.tabs.executeScript(ctab.id,{file:"inject.js"}); //THIS LINE CRASHES THE APP WHEN I CLOSE THE BROWSER
        }
});
我对调度的allert也有类似的问题,它也执行脚本(在调度和执行之间关闭浏览器时会导致崩溃)

有人知道如何避免这次撞车吗

编辑:工作示例

manifest.json

{
 "name": "Rest Extension",
 "description": "Set an Artnet Controler to the background collor",
 "manifest_version": 2,
 "version": "1",
 "permissions": ["tabs", "http://*/*", "https://*/*", "background", "alarms"],
 "background": {"scripts": ["background.js"]},
 "content_scripts": [{"matches": ["http://*/*", "https://*/*"],"js": ["inject.js"]}],
 "browser_action": 
    {
        "default_icon": "16x16.png",
        "default_popup": "popup.html"
    }
}
background.js

chrome.windows.onFocusChanged.addListener(function() 
{
        var ctab = chrome.tabs.getCurrent;
        if(typeof  ctab === "undefined")
        {

        }
        else
        {
            chrome.tabs.executeScript(ctab.id,{file:"inject.js"}); //THIS LINE CRASHES THE APP WHEN I CLOSE THE BROWSER
        }
})

所有其他文件都可以为空(包括inject.js)

chrome.tabs.getCurrent是一个方法:它不是选项卡对象的实例。 你应该试试这个:

chrome.windows.onFocusChanged.addListener(function() 
{
    chrome.tabs.getCurrent(function(ctab)
    {
        chrome.tabs.executeScript(ctab.id, { file: "inject.js" });
    });
});

参考资料:

你所说的崩溃是什么意思?你能不能创建一个独立的示例,并在报告中报告这个bug?我想这可能不是chrome的bug,而是我的编程问题。对于崩溃,我的意思是在关闭屏幕右下角的浏览器后,会显示一条通知,表示扩展崩溃,我可以单击该通知重新启动扩展。谢谢。我发现检查undefined也是一个很好的ide,所以我最终使用它,就像这个chrome.windows.onFocusChanged.addListener(function(){chrome.tabs.getCurrent(function(ctab){if(ctab!=“undefined”){chrome.tabs.executeScript(ctab.id,{file:“inject.js”};}}});
chrome.windows.onFocusChanged.addListener(function() 
{
    chrome.tabs.getCurrent(function(ctab)
    {
        chrome.tabs.executeScript(ctab.id, { file: "inject.js" });
    });
});