2013-08-23 3 views
0

J'écris une extension de chrome, il utilise chrome.windows.onFocusChanged.addListener pour exécuter un script de contenu. Cela fonctionne bien tant que je permute entre les différentes fenêtres chromées, cependant, le Listener est également déclenché lorsque Chrome est fermé. Dans ce cas, le code à l'intérieur de la fonction entraîne un blocage de l'extension.chrome.windows.onFocusChanged.addListener déclenché lors de la fermeture de Chrome, écrasement plugin

J'ai essayé de chiner pour undefined, mais cela ne semble pas être le problème.

Le code lookls liks cette

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

J'ai un problème similaire avec un allert prévu, qui exécute également le script (ce qui conduit à un accident lorsque je ferme le navigateur entre la planification et l'exécution).

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

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

Est-ce que quelqu'un sait comment éviter ce crash?

Modifier: Exemple de travail

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

tous les autres fichiers peuvent être vides (y compris les inject.js)

+0

Que voulez-vous dire par accident? Pourriez-vous créer un exemple autonome et rapporter le bogue sur http://crbug.com/new –

+0

Ce n'est probablement pas un bug de chrome (je pense) mais un problème avec ma programmation. Avec crash, je veux dire qu'après avoir fermé le navigateur en bas à droite de l'écran, une notification s'affiche, que l'extension s'est écrasée et que je peux cliquer sur cette notification pour redémarrer l'extension. –

Répondre

2

chrome.tabs.getCurrent est une méthode: il ' s n'est pas une instance d'un objet Tab. Vous devriez essayer ceci:

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

Référence: http://developer.chrome.com/extensions/tabs.html#method-getCurrent

+0

merci. J'ai trouvé que la vérification de non définie est un bon pour cela aussi ide donc j'ai fini par l'utiliser comme celui-ci chrome.windows.onFocusChanged.addListener (function() { chrome.tabs.getCurrent (function (BCAT) { (! ctab = "undefined") \t \t si \t \t { \t \t \t chrome.tabs.executeScript (ctab.id, {file: "inject.js"});} \t \t });} ) –

Questions connexes