IFrame soll sich selbst schliessen, nur wie?
atomic
- javascript
Hallo Zusammen,
ich stehe vor folgendem Problem:
Auf einer HTML-Seite (Domain a.com) kann der Nutzer per JavaScript das Öffnen eines IFrames triggern. Das IFrame wird über document.createElement erzeugt (src des IFrames zeigt auf eine Seite in Domain b.com) und über appendChild in die Seite eingefügt.
Um das IFrame nun wieder zu schließen, soll der Nutzer auf einen "Schliessen"-Knopf innerhalb des _IFrames_ klicken können. Das ist wichtig, das Schliessen über einen Button im Hauptfenster ist leider keine Option.
Ich habe es bereits mit self.close, window.close probiert, ohne Erfolg. Ist es also möglich, dass ein IFrame sich selbst schließt und aus dem DOM des parent-Fensters entfernt und wenn nein, kennt jemand alternativen für dieses X-Domain/Frame-Problem?
Danke vielmals für jede Anregung,
Lars
wie in meinem Post darunter geschrieben, lautet der Befehl bei mir:
window.parent.document.getElementById('sbox-window').close()
musst ihn dir halt anpassen ... mehr kann ich dir nicht helfen, bin leider selbst ein js-unwissender ;)
Ich habe es bereits mit self.close, window.close probiert, ohne Erfolg. Ist es also möglich, dass ein IFrame sich selbst schließt und aus dem DOM des parent-Fensters entfernt und wenn nein, kennt jemand alternativen für dieses X-Domain/Frame-Problem?
Nein.
Struppi.
Hi,
Auf einer HTML-Seite (Domain a.com) kann der Nutzer per JavaScript das Öffnen eines IFrames triggern. Das IFrame wird über document.createElement erzeugt (src des IFrames zeigt auf eine Seite in Domain b.com) und über appendChild in die Seite eingefügt.
damit stammen also Hauptdokument und das Dokument im iframe von verschiedenen Domains.
Um das IFrame nun wieder zu schließen, ...
Was meinst du mit "schließen"? Du kannst ein iframe nicht einfach schließen wie ein unabhängiges Fenster. Du möchtest das Element vermutlich aus dem Hauptdokument wieder entfernen, in das du es vorher dynamisch eingefügt hast?
soll der Nutzer auf einen "Schliessen"-Knopf innerhalb des _IFrames_ klicken können. Das ist wichtig, das Schliessen über einen Button im Hauptfenster ist leider keine Option.
Geht nicht. Dazu müsste ja der Javascript-Code des iframe-Dokuments auf das Elterndokument zugreifen. Das ist aber mit Javascript aufgrund der Same Origin Policy nicht möglich.
Ich habe es bereits mit self.close, window.close probiert, ohne Erfolg. Ist es also möglich, dass ein IFrame sich selbst schließt und aus dem DOM des parent-Fensters entfernt ...
Nein, nicht wenn die beiden Dokumente von unterschiedlichen Domains stammen.
und wenn nein, kennt jemand alternativen für dieses X-Domain/Frame-Problem?
Löse die Aufgabe serverseitig: Erstelle auf deinem eigenen Server, auf dem auch das Hauptdokument liegt, ein Script, das das untergeordnete Dokument nur durchreicht (quasi ein Proxy für ein ganz bestimmtes Dokument). Dann stammen aus der Sicht des Clients (Javascript) beide Dokumente von demselben Server.
Denkanstöße:
1. Was sagt der Eigentümer der eingebundenen Fremdseite? Erlaubt er das?
2. Was machen Besucher ohne Javascript?
So long,
Martin
Wie gesagt ... ich kenn mich mit JS leider so gut wie gar nicht aus. Aber dass es so einen Button bei mir gibt und der gut geht, das weiß ich :)
Allerdings stammen die Inhalte von Hauptfenster und iframe ja auch von der selben seite. aber das soll ja nicht das problem sein. kannst dir doch auch ein einfaches php-script schreiben, dass dir von deiner domain aus mit ob_start() ob_end() die seite b ausliest und anzeigt inkl. dem button. geht sicher irgendwie und dann ist auch der iframe inhalt von deiner domain ;)
Ob das im Zusammenspiel mit createElement überhaupt machbar ist, weiß ich leider auch nicht.
Einen bestehenden Iframe kannst man z.B. so aus einer Seite entfernen:
-----
PARENT:
<td id="zelle"><!-- bzw div id="zelle"-->
<iframe src="irgendwas.htm" style="width:600px; height:100%; frameborder="0" scrolling="auto" name="main" id="inline"></iframe>
</td>
IFRAME:
<script type="text/javascript">
function loeschen(){
var hallo=parent.document.getElementById("zelle");
var servus=parent.document.getElementById ("inline");
hallo.removeChild(servus);}
</script>
<form><input type="button" value="iframe entfernen" onclick="loeschen()"></form>
------
Was soll nun aber an Stelle des Iframe erscheinen? Bleibt da ein Loch oder schiebt sich der verbleibende Inhalt irgendwie zusammen?
Gruß psst...
Nachtrag:
Statt mit createElement herumzudoktern nimmst du besser gleich innerHTML
-----
PARENT:
<script type="text/javascript">
function kreieren(){
var tach=document.getElementById("zelle");
tach.innerHTML="<iframe src='irgendwas.htm' style='width:600px; height:100%; frameborder='0' scrolling='auto' name='main' id='inline'></iframe>";
}
</script>
<form><input type="button" value="iframe erschaffen" onclick="kreieren()"></form>
<td id="zelle"><!--bzw div id="zelle"-->
</td>
---
Gruß psst...
Ps: in der irgendwas.htm befindet sich dann der Button, der den Iframe wieder entfernt.
Danke für die Anregungen! Fazit: es geht nicht und ich musste einen Workaround bauen, der das Problem völlig anders angeht.
Zu Martins Fragen:
1.) der Seitenbetreiber bindet die JS-Logik bewusst ein, mit der das iframe geladen wird
2.) Wer kein JS aktiviert hat ist leider aussen vor. Macht aber auch nix, der Dienst ist nicht lebensnotwendig :)
LG Lars