0

chrome.windows.onFocusChanged.addListenerコンテンツ スクリプトの実行に使用する chrome 拡張機能を作成しています。これは、異なるクロム ウィンドウを切り替える限り正常に機能しますが、Chrome を閉じたときにもリスナーが起動されます。その場合、関数内のコードが拡張機能のクラッシュにつながります。

undefined のチャッキングを試みましたが、それは問題ではないようです。

コードはこれが好きです

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
        }
});

スケジュールされたアラートにも同様の問題があり、スクリプトも実行されます(スケジュールと実行の間にブラウザーを閉じるとクラッシュします)。

function onAlarm(alarm) 
{
    if (alarm && alarm.name == 'check') 
    {

        var ctab = chrome.tabs.getCurrent;
        chrome.tabs.executeScript(ctab.id,{file:"inject.js"}); //CRASH
        //more code...

このクラッシュを回避する方法を知っている人はいますか?

編集:作業例

マニフェスト.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 を含む)

4

1 に答える 1

2

chrome.tabs.getCurrent はメソッドです。Tab オブジェクトのインスタンスではありません。これを試してください:

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

参照: http://developer.chrome.com/extensions/tabs.html#method-getCurrent

于 2013-08-25T16:49:18.333 に答える