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.
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%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:
HTH
Tags und Links javascript google-chrome google-chrome-extension