2013-10-14 3 views
9

Ich möchte den Effekt von window.location.reload() nachahmen, aber nur für die "isolierte Welt", in der mein Inhaltsskript läuft. Das heißt, entfernen Sie alle vorhandenen JS, insbesondere Callbacks und Ereignisse Bindungen. Gibt es einen schönen Weg, dies zu tun?Erneutes Laden einer Umgebungsumgebung für Skripterstellung für Chrome-Erweiterungen

Hinweis: chrome.runtime.reload() funktioniert nicht dafür; Dies hat den Effekt, dass die Erweiterung und das Hintergrundskript neu geladen werden, aber vorhandene Inhaltsskripte werden erst wieder geladen, wenn der Benutzer aktualisiert wird.

Antwort

4

Soweit ich das beurteilen kann, gibt es keine automatische Möglichkeit, Inhaltsskripte, beispielsweise während eines Erweiterungsupdates, erneut zu injizieren. Sie können alle Tabs finden, deren URL mit dem von Ihnen benötigten Muster übereinstimmt, und die Inhaltsskripte programmgesteuert erneut einbinden, indem Sie chrome.tabs.executeScript verwenden.

Beachten Sie, dass diese Methode eine Berechtigung für dasselbe URL-Muster wie das von Ihrem Inhaltsskript verwendete erfordert.

manifest.json:

"content_scripts":  
[ 
    { 
     "matches": [ "http://*.google.com/*" ], 
     "js": [ "content_script.js" ] 
    } 
], 
"permissions":   
[ 
    "tabs", "http://*.google.com/*" 
] 

Background.js:

chrome.runtime.reload(); 
chrome.tabs.query({ url: "http://*.google.com/*" }, function(tabs) 
{ 
    for(var i = 0; i < tabs.length; i++) 
    { 
     chrome.tabs.executeScript(tabs[i].id, { file: "content_script.js" }, function() {}); 
    } 
}); 
+1

Das Problem ist, dass dies die bestehenden Kontext unberührt lässt. Wenn ich setInterval in einem executeScript starte, wird es immer nach dem nächsten executeScript ausgeführt. –

+0

Wenn das zweite Inhaltsskript ein zweites Mal ausgeführt wird, haben Sie Zugriff auf die vorherigen Variablen, sodass Sie alles zurücksetzen können. –

+0

@Metoule Sie haben beim Injizieren keinen Zugriff auf vorherige Variablen, nachdem Sie die Erweiterung von 'chrome: // extension' neu geladen haben. Hast du das getestet? – vaughan

Verwandte Themen