Ich habe ein zunehmend frustrierendes Problem mit der Firefox-Implementierung der Same Origin Policy.
Ich entwickle ein integriertes System mit Touchscreen-Unterstützung und wir haben die Möglichkeit, Webseiten in Iframes an mehreren Stellen auf dem Bildschirm zu laden. Die Webseiten könnenbeliebigArten von Webseiten von jeder Art von Domain und Standort (Google, Yahoo, Intranetseiten usw.) und hierin liegt mein Problem.
Ich muss in der Lage sein, dem Iframe ein Onclick-Ereignis hinzuzufügen, das mir als Antwort die ID des Iframes (oder eine andere eindeutige Kennung) gibt. Dies sagt mir, dass auf dem Iframe eine Aktivität (Webbrowsing) stattfindet und dass der Iframe nicht neu geladen werden sollte (die Seiten sind auf ein festes automatisches Aktualisierungsintervall eingestellt, das bei Aktivität unterbrochen werden sollte).
Ich habe so ziemlich alles gelesen, was Google mir zurückgibt (aber ich würde mich freuen, wenn mir das widerlegt würde) und ich bin zu dem Schluss gekommen, dass dies (neben vielen anderen) die beste Lösung ist:
<iframe src='http://google.com' id='iframe1' onload='netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); this.contentWindow.document.addEventListener("click", function(event) {alert(this.id);}, false)'></iframe>
Das gibt mir nur die regelmäßigeErlaubnis verweigert fürhttp://localhostum die Eigenschaft Window.document abzurufen vonhttp://google.com
Ich weißWarumIch erhalte diese Fehlermeldung und meine Frage ist einfach. Wie entferne ich sie?
Es ist ein integriertes System. Ich kann Firefox aus dem Quellcode kompilieren, ich kann den Quellcode bei Bedarf bearbeiten, ich kann prefs.js usw. ändern, aber ich muss Firefox verwenden (ich weiß, dass alle anderen vernünftigen Webbrowser einen netten Befehlszeilenschalter haben, um es auszuschalten ...), aber wir haben eine (ziemlich) enge Integration mit der Firefox-Plattform, die nur schwer zu entfernen wäre.
Wir verwenden derzeit Firefox v.3.5.16 (ich weiß, dass es EOL ist, wir werden es ein anderes Mal aktualisieren) auf einer Debian Squeeze-Plattform. Bei Bedarf kann ich auf eine neuere Firefox-Version aktualisieren, aber nach dem, was ich herausgefunden habe, scheint es in dieser Hinsicht noch schlechter abzuschneiden.
Kurz zusammengefasst Helfen Sie mir, die Same-Origin-Policy zu beenden,auf jede mögliche Weisein Firefox 3.5.16 für eine integrierte Plattform, die Code über domänenübergreifende Iframes ändern muss.
Antwort1
Ich fühle mich ziemlich dumm.
Es funktioniert, wenn SieUniversalXPConnectanstelle von UniversalBrowserWrite.
Beispiel: netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Du kannst auchnichtverwenden Sie this.id oder this.parentNode.id, das führt immer noch zu einem (anderen) Zugriffsfehler. Um dieses Problem zu beheben, speichern Sie es einfach zuerst in einer temporären Variable:
onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'