Zugriff auf iframe-Inhalte aus einer chrome-Erweiterung Inhalt Skript
Ich Schreibe gerade an einem plugin, um einige der Transformationen des interface. Ich erhalte unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match
(typische cross-site-Problem)
Aber eine Erweiterung soll es Zugriff auf den iframe-Inhalt http://code.google.com/chrome/extensions/content_scripts.html ...
Muss jemand wissen, wie Sie den Zugriff auf Ihren Inhalt, so dass Sie können beliebig übernehmbar?
Was genau möchten Sie tun? In den meisten Fällen kannst du
hinzufügen all_frames:true, wird die content_script einmal ausgeführt, in allen den inneren Rahmen. Dies erschweren die Logik der es eine Menge. Ich will einfach nur Zugriff auf den Inhalt des inneren Rahmen durch die content_script. (wie: content_script --> target_page --> inner_content)
Das ist nicht möglich: Ein content-Skript keinerlei Zugriff von der Seite
mmm ok danke :p aber Sie konnte hatte Hinzugefügt, dass bei einer Antwort, um Sie zu markieren, ich dachte schon, es zu tun, wie Sie gesagt haben, aber war in der Hoffnung, dass der direkte Zugang existiert
Ich war nicht sicher, was Sie wollte. Für tief verschachtelte iframes, ist die vorgeschlagene Lösung nicht funktionieren würde. Ich poste ein prägnantes Beispiel.
"all_frames":true
zu den "content_scripts"
Abschnitt Ihrer manifest-Datei und der code der Seite-spezifische Logik in Ihrem Inhalt Skript.hinzufügen all_frames:true, wird die content_script einmal ausgeführt, in allen den inneren Rahmen. Dies erschweren die Logik der es eine Menge. Ich will einfach nur Zugriff auf den Inhalt des inneren Rahmen durch die content_script. (wie: content_script --> target_page --> inner_content)
Das ist nicht möglich: Ein content-Skript keinerlei Zugriff von der Seite
window
Objekts (inklusive Rahmen). Injizieren Sie einen Inhalt Skript mit "all_frames": false
, in dem Sie ein flag zu setzen. Dann Spritzen Sie ein Skript mit all_frames": true
, wo die Existenz dieses flag aktiviert ist. Wenn das flag nicht vorhanden ist, davon ausgehen, dass der Inhalt Skript läuft in einem frame. Sie können dann anwenden, frame-spezifische Logik, um es, und verwenden Sie message-passing zu passieren, alle erfassten Daten auf den wesentlichen Inhalt Skript.mmm ok danke :p aber Sie konnte hatte Hinzugefügt, dass bei einer Antwort, um Sie zu markieren, ich dachte schon, es zu tun, wie Sie gesagt haben, aber war in der Hoffnung, dass der direkte Zugang existiert
Ich war nicht sicher, was Sie wollte. Für tief verschachtelte iframes, ist die vorgeschlagene Lösung nicht funktionieren würde. Ich poste ein prägnantes Beispiel.
InformationsquelleAutor fmsf | 2012-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es in der Regel keinen direkten Zugriff auf einen anderen Ursprung
window
Objekt. Wenn Sie wollen sicher Kommunikation zwischen den content-Skripten in verschiedenen Bildern, die Sie haben, um eine Nachricht zu senden, um die hintergrund-Seite, die wiederum sendet die Nachricht zurück an die Register.Hier ist ein Beispiel:
Teil
manifest.json
:main.js
:sub.js
:Hintergrund-script 'bg.js':
Alternative Methode ist die Verwendung
chrome.tabs.executeScript
imbg.js
zum auslösen einer Funktion in der main-content-Skript.Relevanten Dokumentation
c.- Laufzeit.sendMessage
/c.tabs.sendMessage
/c.- Laufzeit.onMessage
MessageSender
undRegister
Arten.chrome.tabs.executeScript
Zu der Zeit des Schreibens,
window.frames[i]
für allei
s wurde nicht definiert. Das hat ja auch schon fest für eine Weile. Aber die same-origin-policy gilt noch immer, die Antwort ist also immer noch gültig, zumindest für die gestellte Frage (wo die OP war auf Probleme mit cross-domain-frame-Zugang).Vielen Dank für die bringen Sie die Fehler in meiner Antwort um meine Aufmerksamkeit. Es wurde abgelehnt von den Gutachtern, aber ich habe bearbeitet meine Antwort sowieso.
Ich brauche Zugriff auf eine variable definiert, die von der Seite mein Inhalt Skript ausgeführt wird; wie?
Siehe stackoverflow.com/questions/9602022/....
InformationsquelleAutor Rob W
Ich verstehe, dass dies ist eine alte Frage, aber vor kurzem habe ich den halben Tag damit verbracht um es zu lösen.
In der Regel erstellen ein iframe sieht so ähnlich:
Diesem Rahmen haben unterschiedliche Herkunft mit einer Seite, und Sie werden nicht in der Lage sein, um erhalten Ihre DOM. Aber wenn Sie erstellen iframe nur für css-Trennung Sie können dies tun, in einer anderen Art und Weise:
Nach, die Sie verwenden können iframe.contentDocument Zugang zu iFrames DOM
Es wird die eigentliche Referenz auf das DOM - Sie können get - /set-Werte von Eingängen, ausblenden von divs, etc.
Kluge Vorgehensweise. Nur gestimmt. Auch ich würde gerne wissen, ob wir zugreifen möchten Umgekehrt. zB; parent (Aktueller tab) dom im iframe??
Wird diese Arbeit mit cross-domain ?
Nein, das funktioniert nur, weil ich am erstellen iframe ohne src, also die Domäne die gleiche, wie die übergeordnete Seite.
InformationsquelleAutor Eugene Titarchuk