Formular an IFrame einer neuen Seite senden
guccibass
- javascript
0 Der Martin0 guccibass
Hallo zusammen,
und zwar möchte ich das Formular einer Seite (beispielsweise www.sample.org) in das IFrame einer anderen Seite innerhalb der gleichen Domäne senden (z.B. www.sample.org/eine/test/seite). Wie greife ich mittels Javascript auf ein Element dieser Seite zu, welches weder ein Popup noch Teil eines Framesets der Formularseite ist? Die neue Seite soll sich nach Absenden des Formulars öffnen und das Ergebnis im IFrame anzeigen. Sitze schon eine Weile an diesem Problem und weiß nicht weiter.
Gruß
Mario
Hallo,
und zwar möchte ich ...
fang am besten nochmal neu an, denn der erste Teil des Satzes ist offenbar verlorengegangen.
das Formular einer Seite (beispielsweise www.sample.org) in das IFrame einer anderen Seite innerhalb der gleichen Domäne senden (z.B. www.sample.org/eine/test/seite).
Also gibst du den Namen des Zielfensters (iframe) als target des Formulars an. Hättest du jetzt noch example.org anstatt sample.org für das Beispiel genommen, würdest du von mir nun einen virtuellen Pluspunkt bekommen. :-)
Wie greife ich mittels Javascript auf ein Element dieser Seite zu, welches weder ein Popup noch Teil eines Framesets der Formularseite ist?
Es ist zwar nicht Teil eines Framesets, aber es ist ein Frame innerhalb eines übergeordneten Dokuments. Die Adressierung erfolgt daher genauso wie in einem Frameset.
Abgesehen davon rate ich von der Verwendung von (i)frames ab; sie machen sowohl dem Autor als auch dem Benutzer in der Regel mehr Probleme, als sie lösen.
So long,
Martin
Hallo Martin,
danke erstmal für die Antwort. Das IFrame im Target-Attribut zu referenzieren habe ich schon versucht. Mein Problem war aber das sich das gesendete Formular in einem neuen Fenster geöffnet hat und nicht im IFrame. Wichtig zu erwähnen wäre vielleicht auch, dass es sich bei der action-URL um einen externen Link handelt. Mein Formular sendet Parameter an ein Buchungssystem, was auf der Seite in ein IFrame eingebunden werden soll. Hatte es ursprünglich mit einem Popup gelöst aber mein Chef will es leider anders haben. Ich bin folgendermaßen vorgegangen:
Auf der Formularseite "example.org" :) habe ich sowas stehen (Die Seiten sind übrigens mit Joomla erstellt):
<script language="JavaScript">
/*
Parameter in ein bestimmtes Format konvertieren
*/
function test(){
...
document.MainForm.submit();
return true;
}
</script>
<form method=post action="https://bin/ein/Buchungssystem.jsp" name="MainForm" target="meinIFrame" onsubmit="return test()">
<input type=hidden name='j_username' value="user"/>
...
</form
Und die IFrame-Seite sample.org/mein/IFrame.html sieht in etwa so aus:
//Layout - Header etc
<iframe src="https://bin/ein/Buchungssystem.jsp" mce_src="https://bin/ein/Buchungssystem.jsp" id="meinIFrame" name="meinIFrame" frameborder="0" height="900" scrolling="yes" width="100%"> </iframe>
//Footer etc
Wie schaffe ich es nun die Parameter des Formulars an die Buchungsseite zu schicken und das ganze im IFrame der untergeordneten Seite anzuzeigen?
Gruß
Mario
Hallo,
und zwar möchte ich ...
fang am besten nochmal neu an, denn der erste Teil des Satzes ist offenbar verlorengegangen.
das Formular einer Seite (beispielsweise www.sample.org) in das IFrame einer anderen Seite innerhalb der gleichen Domäne senden (z.B. www.sample.org/eine/test/seite).
Also gibst du den Namen des Zielfensters (iframe) als target des Formulars an. Hättest du jetzt noch example.org anstatt sample.org für das Beispiel genommen, würdest du von mir nun einen virtuellen Pluspunkt bekommen. :-)
Wie greife ich mittels Javascript auf ein Element dieser Seite zu, welches weder ein Popup noch Teil eines Framesets der Formularseite ist?
Es ist zwar nicht Teil eines Framesets, aber es ist ein Frame innerhalb eines übergeordneten Dokuments. Die Adressierung erfolgt daher genauso wie in einem Frameset.
Abgesehen davon rate ich von der Verwendung von (i)frames ab; sie machen sowohl dem Autor als auch dem Benutzer in der Regel mehr Probleme, als sie lösen.
So long,
Martin
Hallo,
danke erstmal für die Antwort. Das IFrame im Target-Attribut zu referenzieren habe ich schon versucht. Mein Problem war aber das sich das gesendete Formular in einem neuen Fenster geöffnet hat und nicht im IFrame.
dann hast du noch irgendwas falsch gemacht. Wenn der Wert des target-Attributs mit dem Fensternamen des iframes übereinstimmt, sollte die Antwort des Formularversands in genau diesem iframe angezeigt werden. Ob das innerhalb oder außerhalb der eigenen Domain liegt, ist *hierfür* noch nicht relevant.
Wichtig zu erwähnen wäre vielleicht auch, dass es sich bei der action-URL um einen externen Link handelt.
Das wird in dem Moment wichtig, wo du mit Javascript auf dieses Fenster/Frame zugreifen willst. Das geht dann nicht mehr. Javascript hat keinen Zugriff auf Daten, die von einer anderen Domain stammen als das Dokument, in dessen Kontext das Javascript selbst läuft. Das ist die Same Origin Policy.
<script language="JavaScript">
/*
Parameter in ein bestimmtes Format konvertieren
*/
function test(){
...
document.MainForm.submit();
return true;
}
</script>
>
> ~~~html
<form method=post action="https://bin/ein/Buchungssystem.jsp" name="MainForm" target="meinIFrame" onsubmit="return test()">
> <input type=hidden name='j_username' value="user"/>
> ...
> </form
Diese Kombination ist Unsinn, denn so wird das Formular zweimal abgeschickt. Einmal durch den Aufruf der submit()-Methode im Javascript, und dann nochmal über den normalen Mechanismus der Formularverarbeitung in HTML.
<iframe src="https://bin/ein/Buchungssystem.jsp" mce_src="https://bin/ein/Buchungssystem.jsp" id="meinIFrame" name="meinIFrame" frameborder="0" height="900" scrolling="yes" width="100%"> </iframe>
Abgesehen vom Phantasieattribut mce_src und proprietären Attributen sieht das im Prinzip richtig aus.
Wie schaffe ich es nun die Parameter des Formulars an die Buchungsseite zu schicken und das ganze im IFrame der untergeordneten Seite anzuzeigen?
Wie schaffst du es, dass das nicht so passiert? Das ist mir noch nicht klar.
Hallo,
[...]
So long,
Martin
Und bitte kein TOFU. Danke.
Ciao,
Martin
Und bitte kein TOFU. Danke.
Sorry, dabei mag ich kein TOFU :)
dann hast du noch irgendwas falsch gemacht. Wenn der Wert des target-Attributs mit dem Fensternamen des iframes übereinstimmt, sollte die Antwort des Formularversands in genau diesem iframe angezeigt werden. Ob das innerhalb oder außerhalb der eigenen Domain liegt, ist *hierfür* noch nicht relevant.
Tut es aber leider nicht, wieso das wüßte ich zu gerne. Eine Antwort drauf erhoffe ich mir von euch Spezialisten.
Das wird in dem Moment wichtig, wo du mit Javascript auf dieses Fenster/Frame zugreifen willst. Das geht dann nicht mehr. Javascript hat keinen Zugriff auf Daten, die von einer anderen Domain stammen als das Dokument, in dessen Kontext das Javascript selbst läuft. Das ist die Same Origin Policy.
verstehe, das wäre dann ein Problem weniger
Diese Kombination ist Unsinn, denn so wird das Formular zweimal abgeschickt. Einmal durch den Aufruf der submit()-Methode im Javascript, und dann nochmal über den normalen Mechanismus der Formularverarbeitung in HTML.
Das war eigentlich vorher ein 'return false', habe aber etwas rumgespielt und vergessen es wieder rückgängig zu machen.
Abgesehen vom Phantasieattribut mce_src und proprietären Attributen sieht das im Prinzip richtig aus.
Für das Phantasieattribut kann ich nichts, das fügt Joomla standardmäßig mit ein, für interne Funktionalitäten.
Wie schaffst du es, dass das nicht so passiert? Das ist mir noch nicht klar.
Wie gesagt, ich weiß nicht was ich falsch mache. Aber so einfach funktionieren IFrames auf Seiten in Joomla scheinbar nicht. Bin durchaus für weitere Lösungsansätze offen. Also immer her damit :)
Gruß
Mario
Habe das Problem endlich gelöst. Und zwar lag es daran, dass die Seite mit dem IFrame zu dem Zeitpunkt als das Formular gesendet wurde, noch nicht aufgebaut war und er das IFrame somit nicht finden konnte. Die Lösung bestand darin, sich die Referenz auf das neue Fenster zu holen, eine Funktion zu deklarieren welche der onload-Methode des neuen Fensters zugewiesen wird und dort dann schließlich das sumbit auszuführen.
win = window.open("www.example.org/mein/iframe.html","_self");
win.focus();
win.onload = function(){
document.MyForm.submit();
}
Eigentlich ziemlich logisch, wenn ich darüber nachdenke. Vielleicht findet sich ja der Eine oder Andere mit dem gleichen Problem und kann sich hierdurch eine Menge Kopfzerbrechen ersparen.
Und bitte kein TOFU. Danke.
Sorry, dabei mag ich kein TOFU :)dann hast du noch irgendwas falsch gemacht. Wenn der Wert des target-Attributs mit dem Fensternamen des iframes übereinstimmt, sollte die Antwort des Formularversands in genau diesem iframe angezeigt werden. Ob das innerhalb oder außerhalb der eigenen Domain liegt, ist *hierfür* noch nicht relevant.
Tut es aber leider nicht, wieso das wüßte ich zu gerne. Eine Antwort drauf erhoffe ich mir von euch Spezialisten.
Das wird in dem Moment wichtig, wo du mit Javascript auf dieses Fenster/Frame zugreifen willst. Das geht dann nicht mehr. Javascript hat keinen Zugriff auf Daten, die von einer anderen Domain stammen als das Dokument, in dessen Kontext das Javascript selbst läuft. Das ist die Same Origin Policy.
verstehe, das wäre dann ein Problem weniger
Diese Kombination ist Unsinn, denn so wird das Formular zweimal abgeschickt. Einmal durch den Aufruf der submit()-Methode im Javascript, und dann nochmal über den normalen Mechanismus der Formularverarbeitung in HTML.
Das war eigentlich vorher ein 'return false', habe aber etwas rumgespielt und vergessen es wieder rückgängig zu machen.
Abgesehen vom Phantasieattribut mce_src und proprietären Attributen sieht das im Prinzip richtig aus.
Für das Phantasieattribut kann ich nichts, das fügt Joomla standardmäßig mit ein, für interne Funktionalitäten.
Wie schaffst du es, dass das nicht so passiert? Das ist mir noch nicht klar.
Wie gesagt, ich weiß nicht was ich falsch mache. Aber so einfach funktionieren IFrames auf Seiten in Joomla scheinbar nicht. Bin durchaus für weitere Lösungsansätze offen. Also immer her damit :)
Gruß
Mario