AJAX REQUEST / Same Origin Policy
Christoph Brosdau
- javascript
hallo.
ich habe eine website erstellt, die, wie folgt aufgebaut ist:
"reale adresse" -> nur eine html seite mit einem iframe, dessen source auf eine andere domain verweist.
die gesamte seite findet also in diesem iframe statt und nicht mehr auf der "eigentlichen" adresse. das problem sind jetzt, wie erwartet, die ajax-aufrufe. firefox verbietet mir, aufgrund der SOP, das Laden der AJAX Requests. Für mich unverständlich jedoch bleibt die Tatsache, dass, egal von welcher domain ich die Daten holen möchte, es immer verboten bleibt.
kommen die daten beispielsweise von der "realen adresse", werden sie blockiert, kommen sie von derjenigen, die im iframe referneziert wird, werden sie auch blockiert.
von wo dürfen die daten denn nun noch kommen, bei solch einem konstrukt?
danke für die hilfe,
c.brosdau
Hi,
die gesamte seite findet also in diesem iframe statt und nicht mehr auf der "eigentlichen" adresse.
das ist schlecht, dann sehe ich als Besucher ja gar nicht, wo ich mich wirklich herumtreibe. Wie soll ich dann zum Beispiel ein Bookmark setzen?
firefox verbietet mir, aufgrund der SOP, das Laden der AJAX Requests.
Selbstverständlich.
Für mich unverständlich jedoch bleibt die Tatsache, dass, egal von welcher domain ich die Daten holen möchte, es immer verboten bleibt.
Nein, nicht egal von welcher Domain. Von der Domain, von der auch das Script und die Grundseite stammt, kannst du auch mit Javascript Inhalte nachfordern. Von anderen nicht.
kommen die daten beispielsweise von der "realen adresse", werden sie blockiert, ...
Was meinst du mit der "realen Adresse"? Diejenige, die zur Täuschung in der Adressleiste des Browsers steht? Da sollte es funktionieren.
von wo dürfen die daten denn nun noch kommen, bei solch einem konstrukt?
Wie gesagt: Ein Script darf nur auf Daten zugreifen, die von derselben Domain stammen wie das Dokument, in dem das Script selbst eingebunden ist.
So long,
Martin
hello again.
genau das habe ich auch gedacht, aber firefox mag einfach nicht.
wenn sich jemand mal die mühe machen möchte, herauszufinden, warum das so ist:
-> http://www.aktivton.at/frames.html ist die betreffende seite, die nur den iFrame beinhaltet.
-> der iFrame läuft auf http://sgroebe.com/index_if.html
-> dort sind eine reihe von skripten definiert, die wiederum von aktivton.at kommen
-> in einem ist der AJAX Aufruf definiert, der die Daten von "http://www.aktivton.at/wrapper.php" abholt
-> dieser ganze aufbau ist nur theoretisch, wenn es funktionieren würde, sähre das alles etwas anders aus, also bitte nicht darüber wundern;)
ohne die frames läuft auch alles wunderbar (solange ich ein paar pfade anpasse), nur mit dem iFrame nicht;(
wenn sich das jemand antun möchte - das sind jetzt echt viele scripte und der aktivton server ist irre langsam - aber es dient ja auch nur zum testen. da der aufruf nicht stattfindet, ist da auch nicht viel zu sehen;)
oder könnte das "uncaught exception: Die Erlaubnis für den Aufruf der Methode Location.toString wurde verweigert" noch andere ursachen haben?
vielen dank,
christoph
Hallo Christoph,
-> http://www.aktivton.at/frames.html ist die betreffende seite, die nur den iFrame beinhaltet.
-> der iFrame läuft auf http://sgroebe.com/index_if.html
... und bleibt vollkommen leer, wenn man kein Javascript ausführt. Da solltest du dir auch noch eine Alternative überlegen.
-> dort sind eine reihe von skripten definiert, die wiederum von aktivton.at kommen
So, jetzt kommen wir zum Problem: Die Javascripts, auch wenn sie von aktivton.at geladen werden, laufen doch im Kontext der Domain sgroebe.com und können deshalb auch nur auf diese Domain zugreifen. Was ist daran so kompliziert?
ohne die frames läuft auch alles wunderbar (solange ich ein paar pfade anpasse), nur mit dem iFrame nicht;(
Dann lass das mit den Frames doch bleiben. Ein frameloses Konzept ist ohnehin angenehmer und mit weniger Problemen für den Benutzer behaftet.
oder könnte das "uncaught exception: Die Erlaubnis für den Aufruf der Methode Location.toString wurde verweigert" noch andere ursachen haben?
Nein, das dürfte schon in diese Kerbe hauen. Der Zugriff auf das location-Objekt wird verweigert. Abgesehen davon möchtest du wohl eher auf location.href zugreifen, aber das Ergebnis wäre dasselbe.
So long,
Martin
hi,
die tatsache, dass ohne js nix läuft, ist schon klar.
wie gesagt, dass ist nur ein versuchsaufbau.
der kontext sgroebe.com bringt aber nix.
denn auch wenn ich den AJAX aufruf über sgroebe.com laufen lasse:
this.uAjax=new Ajax.Updater(css_id,'http://sgroebe.com/wrapper.php',{parameters:vars.attachHalo(),...});
oder über aktivton.at:
this.uAjax=new Ajax.Updater(css_id,'http://www.aktivton.at/wrapper.php',{parameters:vars.attachHalo(),...});
bleibt beides verboten.
kann denn das wirklich sein?
eigentlich müsste das doch funktionieren, oder bin ich zu dämlich;(
danke,
c.brosdau
Hallo,
Für mich unverständlich jedoch bleibt die Tatsache, dass, egal von welcher domain ich die Daten holen möchte, es immer verboten bleibt.
Das kann nicht sein, da musst du dich täuschen.
von wo dürfen die daten denn nun noch kommen, bei solch einem konstrukt?
Kommt darauf an, in welchem Domain-Kontext das JavaScript ausgeführt wird. Wird es im äußeren Kontext ausgeführt, hat es nur auf dessen Domain Zugriff, wird es in im HTML-Dokument im iframe ausgeführt, so nur auf dessen Domain.
Mathias