Chrome Extension - Zugriff auf Dokument / Seite Variable von Erweiterung

10

Ich versuche eine Erweiterung zu entwickeln, die nur auf bestimmten Seiten funktioniert - Wenn der Seitenbesitzer eine globale Variable in ihren Code einfügt (zB ACCEPT_STATS = true; ) möchte ich den angegebenen Code ausführen.

Ich habe meine Funktion bereits an das Onload-Ereignis gebunden, ich habe auch eine Lösung gefunden, wie man das in Firefox macht:

%Vor%

aber ich konnte das nicht unter Chrome machen. Gibt es eine Möglichkeit, auf den globalen Chrome-Erweiterungscode des Dokuments zuzugreifen?

Der Code meiner Erweiterung wird als Inhaltsskript eingefügt.

    
Tomasz Banasiak 12.02.2014, 15:06
quelle

2 Antworten

14

Ja, das Einbeziehen des Skripts in die Seite wird in einem isolierten Kontext vom Seiten-Laufzeitskript ausgeführt.

Es ist jedoch möglich, das Problem der isolierten Welten zu umgehen, indem Sie Inline-Skript über ein an das HTML des Dokuments angehängtes Skript-Tag in den Laufzeitkontext schieben. Dieses Inline-Skript kann dann ein benutzerdefiniertes Ereignis auslösen.

Das enthaltene Skript im isolierten Kontext kann auf dieses Ereignis warten und entsprechend darauf reagieren.

So würde Code in Ihrem eingeschlossenen Skript ungefähr so ​​aussehen:

%Vor%     
PatAtCP 14.02.2014 16:45
quelle
1

Das JavaScript, das auf der Seite ausgeführt wird, läuft in einer anderen "isolierten Welt" als das Javascript, das Sie mit Inhaltsskripten injizieren. Google Chrome hält diese beiden Welten aus Sicherheitsgründen getrennt, sodass Sie window.XYZ nicht in einem beliebigen Fenster lesen können. Weitere Informationen darüber, wie isolierte Welten funktionieren: Ссылка

Die korrekte Art der Implementierung ist die Kommunikation mit der Seite über die window.postMessage-API. Hier ist, wie ich es machen würde:

  1. In jedes Register ein Inhaltsskript einfügen
  2. Senden Sie eine Nachricht an den Tab über window.postMessage
  3. Wenn die Seite diese Nachricht versteht, antwortet sie korrekt (erneut über window.postMessage)
  4. Das Inhaltsskript führt den Code aus, den es ausführen musste.

HTH

    
Trunal Bhanse 12.02.2014 18:22
quelle