Frage

Ich habe einige Probleme mit einem Inhaltsskript, das in meiner Chrome-Erweiterung mehrmals auf dieselbe Seite eingefügt wird.

Ich füge das Inhaltsskript von meiner Seite "background.html" auf der Registerkarte "Tab" ein:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

... etc

Im Inhaltsskript befinden sich einige Befehle von console.log

Das Problem ist, dass beim Laden einer EINZELNEN Seite jedes der Protokolle 2-4 Mal in der Konsole angezeigt wird.

Mir ist ziemlich klar, dass dies aufgrund von Iframes auf der Seite geschieht, denke ich zumindest ... Meine Frage ist WARUM?

Ich habe in der Dokumentation gesehen, dass "all_frames" (Inhaltsskript-Berechtigungsarray im Manifest) standardmäßig auf "false" gesetzt werden sollte, was dazu führt, dass das Inhaltsskript nur in den oberen Frame der Seite eingefügt wird, dies ist jedoch der Fall passiert einfach nicht!

Warum wird es mehrmals injiziert? Muss ich "all_frames" physisch auf false setzen?

Zweitens:

Gibt es eine Möglichkeit zu erkennen, ob die Seite, auf die die Erweiterung versucht, das Inhaltsskript einzufügen, ein Iframe oder ein Top innerhalb der Seite "background.html" ist?

Ich habe es versucht

if(window.top === window){ console.log('whatever'); }

Und festgestellt, dass es NICHT 100% der Zeit funktioniert. Selbst wenn ich diese Bedingung für den Rest meines Codeblocks (für chrome.tabs.executeScript ()) habe, wird das Inhaltsskript immer noch mehrmals injiziert ...

Ideen oder Vorschläge wären sehr dankbar! :)

War es hilfreich?

Lösung

onUpdated wird jedes Mal ausgelöst, wenn sich der Status eines Tabs ändert.Dies schließt ein, wann geladen und fertig geladen , was die vielen Protokollanweisungen erklärt. Sie müssen bei jedem Auslösen des Ereignisses überprüfen, was sich geändert hat (die URL wurde geändert, sie wurde geladen usw.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top