andynail: funktion nach vollständig geladenem iframe aufrufen

Hallo zusammen

auf meiner Seite befindet sich ein iframe für verschiedene Inhalte. Ändern sich sich die Seite werden Funktionen aufgerufen, die mit jquery zugeordnet werden.

Jetzt würde ich aber gerne beim öffnen der Startseite solange warten bis die Seiten im iframe auch komplett zu sehen sind. Und ich probierte es einfach mal so:

$("document").ready(function () {  
$("#DatenFrame").load(function () {alert("mal so")});  
frames['DatenFrame'].onload = null  
$("#DatenFrame").load(function ()  
{  
	if (navigator.appName == 'Microsoft Internet Explorer')  
	{  
	document.body.onresize = function() { HideDatenResize(); BereichAnpassen() }  
	}  
	else  
	{  
	document.body.setAttribute("onresize", "HideDatenResize(); BereichAnpassen()")  
	}  
  
});  
});  
  

und anstatt alert soll die aufzurufende Seite dranstehen. Aber fast noch sinnvoller wäre wenn es die Möglichkeit gäbe die Funktion erst dann starten zu können nachdem die iframe Seite alle Funktionen ausgeführt hatte.

Würde mich freuen wenn mir jemand helfen könnte da es mal eine tolle Sache wäre. Und ich bedanke mich schon jetzt.

Gruß Andreas

  1. Hallo!

    Zuerst einmal funktioniert das nur, wenn sich der Daten-Iframe in der gleichen Domäne befindet. Als nächstes wäre es sinnvoll, das JS im Daten-Iframe zu schreiben, statt es von außen drauf zu schmeißen, da man nie weiß, in welchem Zustand sich der jeweilige Kontext befindet. Zuletzt solltest Du Dich fragen, ob Du wirklich einen iframe brauchst oder mit AJAX/JSONp vielleicht mehr Erfolg haben würdest.

    Gruß, LX

    --
    RFC 5984, Satz 7 (Security Considerations) (...) Terroristische Organisationen könnten die "Schlechte Nachrichten verbreiten sich schneller"-Schwachstelle aus RFC 1216 ausnutzen.
    1. Hallo

      ja ich weis schon das ich es mir vielleicht ein wenig einfach mache mit dem iframe. Doch es ändert sich gerne die Darstellung einzelner Daten, so daß ich froh bin dies per php hinbekommen zu können.

      Und es wäre ja toll wenn denn die komplette Seite zu sehen ist eine Funktion aufrufbar wäre. Und die iframe Seiten sind immer die Gleichen aus dem letzten Besuch.

      Danke gruß Andreas

      1. Hallo!

        ja ich weis schon das ich es mir vielleicht ein wenig einfach mache mit dem iframe. Doch es ändert sich gerne die Darstellung einzelner Daten, so daß ich froh bin dies per php hinbekommen zu können.

        Im Gegenteil: Du machst es Dir schwieriger mit dem iframe. In PHP gibt es bspw. die Funktion json_encode, mit der Du Deine Daten für JSONp direkt aufbereiten kannst. Diese kannst Du wiederum über JS auswerten und per DOM Injection (also etwa node.innerHTML = formatiere(daten);) in die Seite schreiben.

        Wenn Du trotzdem auf den iframe nicht verzichten willst, rufe in dessen Onload doch einfach eine Funktion im parent auf:

        if (typeof parent.iframeloaded == 'function') {  
           parent.iframeloaded();  
        }
        

        Und in der umgebenden Seite kannst Du dann das entsprechende Gegenstück definieren:

        function iframeloaded(){  
           alert('iframe geladen');  
        }
        

        Und es wäre ja toll wenn denn die komplette Seite zu sehen ist eine Funktion aufrufbar wäre. Und die iframe Seiten sind immer die Gleichen aus dem letzten Besuch.

        Das liegt daran, dass die iframes im Cache landen. Das passiert bei AJAX und JSONp aber auch - solange sich nicht ein Parameter ändert oder per entsprechendem Header das Caching deaktiviert wird.

        Gruß, LX

        --
        RFC 5984, Satz 7 (Security Considerations) (...) Terroristische Organisationen könnten die "Schlechte Nachrichten verbreiten sich schneller"-Schwachstelle aus RFC 1216 ausnutzen.
        1. Hallo

          ich würde gerne eine Animation zum einblenden der Seite starten. Und wenn eine Seite im iframe geöffnet wird, richtet diese die Umgebung für sich entsprechend ein, wie zb. die Farbe der Umgebung. Und damit immer die zuletzt besuchte iframe Seite wieder aufgerufen wird, wird dieser Link beim öffnen der Webseite durch das Auslesen eines cookies aufgerufen. Und also wird dann erst einmal die komplette Darstellung erstellt und erst dann möchte ich die Animation und Seite anzeigen. Und eine onload Funktion würde doch stets aufgerufen werden wenn eine neue Seite geladen werden würde. Und mehr als die Umgebungeinrichtung möchte es bei den anschlißenden Aufr4ufen nicht sein. Sprich also keine zusätzlichen if then Abfragen. Und so hatte ich gehofft das dies mit uquery möglich werden würde.

          Danke gruß Andreas

  2. Jetzt würde ich aber gerne beim öffnen der Startseite solange warten bis die Seiten im iframe auch komplett zu sehen sind. Und ich probierte es einfach mal so:

    Okay. Mit dem load-Ereignis bist du eigentlich schon auf einem möglichen Weg. Was funktioniert daran nun nicht? Wo genau kommst du nicht weiter?

    $("#DatenFrame").load(function () {alert("mal so")});
    frames['DatenFrame'].onload = null

    Was soll das bezwecken? Zuerst registriert du einen Handler und dann überschreibst du ihn auf andere Weise wieder.

    $("#DatenFrame").load(function ()
    {
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
    document.body.onresize = function() { HideDatenResize(); BereichAnpassen() }

    Diese Browserweiche ist überflüssig. Diese Schreibweise funktioniert in allen Browsern.
    (Üblicherweise registriert man Handler für den resize-Event bei window. Kann aber sein, dass er zudem bei body dispatcht wird.)

    und anstatt alert soll die aufzurufende Seite dranstehen.

    Was bedeutet das? Was heißt dranstehen?

    Aber fast noch sinnvoller wäre wenn es die Möglichkeit gäbe die Funktion erst dann starten zu können nachdem die iframe Seite alle Funktionen ausgeführt hatte.

    Dann sage aus dem Iframe dem darüberliegenden Dokument Bescheid, indem du top.irgendeineFunktion() aufrufst.

    http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

    Mathias