2015-08-29 5 views
9

Meine Chrome-Erweiterung verwendet nicht content_scripts, weil ich den Code nicht auf jeder Seite injizieren möchte. Wenn der Benutzer stattdessen auf die Schaltfläche klickt, öffnet sich ein Popup-Fenster und fügt Code in die Seite ein.Chrome Erweiterungserlaubnis für "über: leere" Seite

Also, in den manifest.json gibt es einen Berechtigungsblock:

"permissions": [ 
    "activeTab" 
] 

Und im popup.js gibt diesen Code:

chrome.windows.getCurrent(function(win) { 
    chrome.tabs.query({ 
     'windowId': win.id, 
     'active': true 
    }, function(tabArray) { 

     // inject css & js only on initial click 
     chrome.tabs.executeScript(null, { 
      code : 'document.querySelector("body").classList.contains("_myExtension_code_injected")' 
     }, function(result) { 
      if (result && !result[0]) { 
       chrome.tabs.insertCSS(null, { 
        file: 'myExtension.css' 
       }); 

       chrome.tabs.executeScript(null, { 
        file: 'myExtension.js' 
       }, function(){ 
        chrome.tabs.executeScript(null, { 
         code: 'myExtension.init();' 
        }); 
       }); 
      } 
     }); 

    }); 
}); 

Das Problem wird einige Websites mit zusätzlichem einem Popup-Fenster öffnen Information. Und die URL dieser Popup-Seite lautet "about:blank". Wenn ich versuche, die Erweiterung zu initialisieren, sehe ich diese Nachricht in der Konsole:

Unchecked runtime.lastError beim Ausführen von tabs.executeScript: Kann nicht auf Inhalte der URL "about: blank" zugreifen. Das Erweiterungsmanifest muss die Berechtigung zum Zugriff auf diesen Host anfordern.

Ich sehe keinen Weg, um eine "about:blank" Seite der permissions hinzuzufügen. Und ich möchte wirklich nicht anfangen, content_scripts zu verwenden, nur damit ich die match_about_blank Einstellung einstellen kann.

Ich habe versucht, "about:blank" und "about:* zum permission hinzufügen und alles, was ich bekommen, ist ein Installationsfehler.

Beim Versuch, diese Erweiterung zu installieren, gab es Warnungen: Berechtigung 'about: *' ist unbekannt oder URL-Muster ist fehlerhaft.

Gibt es eine Lösung?


Aktualisierung: Here is a gist with everything you'll need. Ein Link zu einer Jsbin-Demo enthalten, aber das Problem ist nicht mit dieser Website speziell. Die Erweiterung wurde ursprünglich in einem Yahoo-Mail-Pop-Out-Fenster getestet, das Sie erhalten, indem Sie eine E-Mail drucken.

+0

Sie können nicht überprüfen Sie die 'windows.location.href' Wert gegen' etwa: bLank', bevor Sie die Ausführung von Code? – Mathlight

+0

Chrome verhindert die Code-Eingabe, da es eine Berechtigung benötigt. Ich habe den oben gezeigten Fehler eingefügt. – Mottie

+0

Ich verstehe diesen Teil. Aber was ich meinte, war, wenn möglich, den Scheck um den Injektionsteil zu legen. (Ich weiß nicht genug davon, um sicher zu sein, wenn möglich) – Mathlight

Antwort

4

Versuchen chrome.tabs.executeScript({ file: "script.js", matchAboutBlank: true })

mit

„Wenn matchAboutBlank wahr ist, dann ist der Code auch in etwa eingespritzt wird: blank und über:. Srcdoc Rahmen, wenn Ihre Erweiterung Zugang zu seinem Stammdokument hat Code kann nicht in der obersten Ebene eingefügt werden etwa: -frames. Standardmäßig ist es falsch.

https://developer.chrome.com/extensions/tabs#property-details-matchAboutBlank

+0

Danke! Das habe ich in der Dokumentation total vermisst. Leider sehe ich selbst nach dem Hinzufügen dieses Parameters immer noch dieselbe Fehlermeldung. – Mottie

+0

Vielleicht ist das Problem, dass die Popup-Seite "about: blank" nicht als Tab angezeigt wird. Daher muss ich mit der rechten Maustaste auf die Kopfzeile klicken und "Show as tab" auswählen, damit die Erweiterung erscheint. – Mottie

+0

Vielleicht ist das Problem der Zugriff auf den übergeordneten Dokumentteil. –