2010-10-14 5 views
15

Ich schreibe eine Chrome-Erweiterung, die beim Laden eine beliebte Web-App ändern muss. Leider wird der Großteil der Benutzeroberfläche dieser Webanwendung in einem Iframe gerendert, und obwohl die Adresse dieses Iframes meiner Übereinstimmungsdeklaration content_scripts entspricht, wird das Benutzerscript nur für den obersten Frame aufgerufen.Zugriff auf Iframes über eine Chrome-Inhaltsskript-Erweiterung

F: Gibt es eine Methode für den Zugriff auf HTML, das in einem Iframe von einer Chrome-Inhaltsskript-Erweiterung gerendert wird? Wenn ja, welche Berechtigungen und andere Manifest-Optionen sollte ich angeben? Vielen Dank.

+1

Ist das relevant für Sie? http://code.google.com/p/chromium/issues/detail?id=37920 – bzlm

+1

Nein, ist es nicht. Der Iframe wird nicht von der Erweiterung, sondern von der ursprünglichen Web-App injiziert. – dpq

Antwort

38

Ich habe das Problem gelöst. Die folgende Option muss im Abschnitt content_scripts der Datei manifest.json angegeben werden: "all_frames": true. Ohne es wird das Skript nur auf den obersten Frame angewendet.

// Manchmal muss man nur mit RTFM vorsichtig umgehen.

+5

RTFM speichern Sie meinen F-Tag –

8

Sogar "all_frames": true scheint nicht im Falle von iframes ohne @src zu helfen. Dies wird in dem Fehler http://code.google.com/p/chromium/issues/detail?id=20773 diskutiert, der auch einige Problemumgehungen umfasst, einschließlich das Abrufen des contentDocument des iframe-Elements in der Quellseite, z. $('a', $($("#canvas_frame")[0].contentDocument)).

Dieser Fehler ist nicht genau das Problem, das Sie hatten (Sie wollten Ihr Inhaltsskript in den Iframe laden, nicht zwischen dem Iframe und dem äußeren Rahmen interagieren), aber ich denke, dass die meisten Leute, die eines der Probleme haben der andere auch.

Verwandte Themen