DevilGun: iframe onload HTML 4.01 Transitional

Also ich habe in meinem iframe ein onload="anpassen()".. es wird also ein javascript ausgeführt:

function anpassen()
{
  document.getElementById('iframe').style.height = frames['iframe'].document.getElementById('inhalt').offsetHeight + 20 + 'px';
}

Funktioniert auch wunderbar! Der Iframe passt sich nun der höhe des reingeladenen Documents/page an (da diese von einem div unmschlossen ist welcher ja ausgelesen wird per script oben).

Nun hab ich eine HTML 4.01 Transitional Validation ausgeführt, die mir sagt, dass es kein onload attribut gibt!

Gibt es eine möglichkeit dieses onload direkt mit in das javascript reinzuschreiben?

Ich hab schon sachen versucht wie frames(iframe).document.onload = anpassen()...

Aber da ich mich kein stück auskenne weiß ich nicht wie ich das nu machen soll, da nichts klappt XD

Der name und die ID des iframes heißen einfach "iframe" :)

Wäre dankbar für Hilfe!

  1. Liebe(r) DevilGun,

    ich kann mich jetzt sehr täuschen, aber waren die Eventhandler in HTML4 nicht case-sensitive? Sollte es da nicht "onLoad" anstatt "onload" heißen?

    Was hindert Dich denn daran den Funktionsaufruf mitten im HTML-Quelltext kurz vor dem (schließenden!) </body>-Tag auf diese Weise zu notieren?
    <script type="text/javascript">anpassen();</script>

    Dadurch, dass Du dieses so spät im Quelltext notierst, sollten alle benötigten Komponenten im Browser bereits verfügbar sein.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hi, danke schonmal für die Antwort.

      tut mir leid dass ich es hier nicht richtig geschrieben habe, in meinem quelltext steht natürlich "onLoad" anstatt "onload" und trotzdem ist es nicht HTML 4.01... Das ärgert mich sehr >.<

      Dein Tipp mit dem Script am Ende klappt auch nicht.. es muss ja jedes mal ausgeführt werden wenn der iframe was läd, also auch wenn ich ein link mit target auf den iframe aufrufe. Deshalb muss ich ein iframe bezogenes onload haben. :/

      1. Liebe(r) DevilGun,

        Dein Tipp mit dem Script am Ende klappt auch nicht.. es muss ja jedes mal ausgeführt werden wenn der iframe was läd, also auch wenn ich ein link mit target auf den iframe aufrufe. Deshalb muss ich ein iframe bezogenes onload haben. :/

        ähm, also steht es in jedem I-Frame-Dokument...?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Nein es steht im iframe tag!

          also <iframe scrolling="no" name="iframe" id="iframe" width="670" frameborder="0" src="news.html" onLoad="anpassen()" style="height:1px"></iframe>

          Also wird das javascript bei jedem benutzen des iframes aufgerufen.
          Ob nu das erste mal laden der seite oder per benutzung der links mit target. Und das geht auch. Nur dass sich das so nicht validieren lässt, weil es ein onload wohl eigendlich als attribut nicht so gibt bzw so nicht vorgesehen ist.. ich hab halt gedacht dass man direkt im javascript nein onload auch auf den iframe beziehen kann..

          Help :( (vllt gehts ja auch mit css?)

          1. Liebe(r) DevilGun,

            Nein es steht im iframe tag!

            jetzt haben wir uns missverstanden.

            ich meinte den <script>-Bereich gegen Ende des HTML-Dokumentes, der in jedem I-Frame-Dokument stehen müsste, damit natürlich das onload-Attribut unnötig macht.

            Sollte diese Funktion "anpassen()" nur im Hauptdokument sein (was ich für sinnvoll erachte), dann müsste man das Script im I-Frame erst auf das Vorhandensein dieser Funktion prüfen lassen:

            <script type="text/javascript">if (parent && parent.anpassen) anpassen();</script>

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. Argh, klappt irgendwie auch nicht.. :(
              Danke übrigens für die Mühe, die du dir machst

              1. Liebe(r) DevilGun,

                Argh, klappt irgendwie auch nicht.. :(

                geht das etwas genauer? Was sagt die Javascript-Konsole?

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.

                1. Javascript-Konsole?
                  *nix kapier*

                  Kannst du mir vllt noch mal im Ganzen genau sagen was ich nu tun kann damit es ohne den onload attribut funktioniert? Das wäre super!

                  1. Liebe(r) DevilGun,

                    Javascript-Konsole?
                    *nix kapier*

                    Du willst doch wohl nicht allen Ernstes behaupten, dass Du Deine Javscripts mit dem Internet-Explorer testest, oder? Der hilft einem nämlich absolut nicht weiter, weil er in etwa soviel sagt, wie "hey, das tut halt nicht!".

                    Solltest Du einen vernünftigen Browser zum Testen einsetzen (z.B. Firefox oder Opera), dann kannst Du in diesen Browsern eine sogenannte "Javascript-Konsole" aufrufen. Diese wird in einem neuen Fenster geöffnet und enthält sehr ausführliche Fehlermeldungen, mit welchen man tatsächlich wervolle Hinweise erhält, wo genau der Fehler liegen könnte.

                    Liebe Grüße aus Ellwangen,

                    Felix Riesterer.

                    1. Huch :) das war mir neu, sorry!
                      Da klick ich auf extras und finde was du sagst.

                      Nein ich benutze IE natürlich nur um zu sehen ob es alles gleich aussieht ;)

                      Normal benutze ich Firefox 1.5

                      leider werden die Threads hier immer ins vergessliche geschoben und ich hab gerad keine zeit mehr zu schreiben...

                      Vllt meld ich mich einfach per e-mail heut abend bei dir. Danke nochmal für deine Hilfe!!!

                      1. Liebe(r) DevilGun,

                        Vllt meld ich mich einfach per e-mail heut abend bei dir.

                        Hier kommt jetzt ein ganz klares "Nein!". Wozu diskutieren wir denn hier im Forum darüber?

                        Lass das mal schön hier!

                        Liebe Grüße aus Ellwangen,

                        Felix Riesterer.

                        1. Also ich denke das Forum hier ist zum längeren Diskutieren gänzlich ungeeignet.. Werd dann wohl irgendwann mal wieder nen neuen thread aufmachen..

                          1. Hallo,

                            Also ich denke das Forum hier ist zum längeren Diskutieren gänzlich ungeeignet..

                            nein, durchaus nicht! Hier bleiben manche Threads tagelang aktuell und werden eifrig gelesen und ergänzt.

                            Werd dann wohl irgendwann mal wieder nen neuen thread aufmachen..

                            Tu das bitte nicht! Jedenfalls nicht zum gleichen Thema, oder einem Thema, das zum bisherigen Thread in einer direkten Beziehung steht.

                            So long,
                             Martin

                            --
                            F: Was macht ein Offizier, der in der Nase bohrt?
                            A: Er holt das Letzte aus sich heraus.
            2. Hallo,

              ich meinte den <script>-Bereich gegen Ende des HTML-Dokumentes, der in jedem I-Frame-Dokument stehen müsste, damit natürlich das onload-Attribut unnötig macht.

              Wieso das denn? Wieso sollte er alle potenziellen Dokumente, die im iframe auftauchen können, editieren, wenn er doch nur den load-Event will, der am iframe-Knoten passiert...

              Mathias

    2. Hi,

      ich kann mich jetzt sehr täuschen, aber waren die Eventhandler in HTML4 nicht case-sensitive? Sollte es da nicht "onLoad" anstatt "onload" heißen?

      Ja, Du täuscht Dich. In HTML 4 sind alle Attribut- und Elementnamen case-*in*sensitive.
      In XHTML sind sie case-sensitive (sie müssen immer kleingeschrieben sein).

      Woher das mit dem onLoad statt onload kommt? Ich vermute, dafür sind DesignerInnen, SalzstreuerInnen und ähnliche Wesen zuständig ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Lieber MudGuard,

        Ja, Du täuscht Dich. In HTML 4 sind alle Attribut- und Elementnamen case-*in*sensitive.

        danke für die Richtigstellung.

        Woher das mit dem onLoad statt onload kommt? Ich vermute, dafür sind DesignerInnen, SalzstreuerInnen und ähnliche Wesen zuständig ...

        Oder aber es ist direkt aus der Javascript-Syntax abgekupfert, die bei anderen Funktionsnamen oder Objekt-Eigenschaften solche "SchreibWeisen" verwendet (z.B. getElementsByTagName()).

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hi,

          Woher das mit dem onLoad statt onload kommt? Ich vermute, dafür sind DesignerInnen, SalzstreuerInnen und ähnliche Wesen zuständig ...
          Oder aber es ist direkt aus der Javascript-Syntax abgekupfert, die bei anderen Funktionsnamen oder Objekt-Eigenschaften solche "SchreibWeisen" verwendet (z.B. getElementsByTagName()).

          In Javascript müssen die eventhandler durchgehend kleingeschrieben werdne (window.onload = ...)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Lieber MudGuard,

            In Javascript müssen die eventhandler durchgehend kleingeschrieben werdne (window.onload = ...)

            deswegen schrieb ich ja

            [...] abgekupfert, die bei anderen Funktionsnamen oder Objekt-Eigenschaften

            ------------------------------^^^^^^^^^^

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

      2. Hello out there!

        ich kann mich jetzt sehr täuschen, aber waren die Eventhandler in HTML4 nicht case-sensitive?

        Ja, Du täuscht Dich. In HTML 4 sind alle Attribut- und Elementnamen case-*in*sensitive.

        Sagte Felix doch: „nicht case-sensitive“. ;-)

        See ya up the road,
        Gun*SCNR*nar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. Hi,

    Also ich habe in meinem iframe ein onload="anpassen()".. es wird also ein javascript ausgeführt:

    onload ist nur für body und für frameset definiert (siehe http://www.w3.org/TR/html4/index/attributes.html)
    Du müßtest das also im body-Element der Seiten, die Du im iframe anzeigen läßt, unterbringen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Das klappt so auch nicht.

      1. hi,

        Das klappt so auch nicht.

        Und das ist immer noch keine Fehlerbeschreibung ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Hallo,

      onload ist nur für body und für frameset definiert (siehe http://www.w3.org/TR/html4/index/attributes.html)

      HTML ist HTML, aber JavaScript-Event-Handling ist was anderes.

      Am iframe-Elementknoten passiert jedenfalls ein load-Event.

      Ok, man muss nicht invalides Markup schreiben, um den zu behandeln.

      Du müßtest das also im body-Element der Seiten, die Du im iframe anzeigen läßt, unterbringen.

      Das ist keine gleichwertige Alternative: Vielleicht habe ich gar kein Zugriff auf das Dokument, will aber wissen, ob es im Frame korrekt geladen wurde.

      Mathias

  3. Hallo,

    Gibt es eine möglichkeit dieses onload direkt mit in das javascript reinzuschreiben?

    Ja, gibt es. Warum kein Stammposter es schafft, diese Möglichkeit in 14 Postings zu nennen, kapiere ich nicht.

    window.onload = init;  
      
    function init () {  
       iframe = document.getElementById("iframe");  
       iframe.onload = load_handler;  
    }  
      
    function load_handler () {  
       var iframe_document = window.frames.iframe.document;  
       iframe.style.height = (iframe_document.getElementById("inhalt").offsetHeight + 20) + "px";  
    }
    

    Die Funktion init wird aufgerufen, wenn das Dokument mit dem iframe fertig geladen ist. Dann wird die Funktion load_handler als Handler für den Event load am iframe-Element registriert.

    Wird jetzt ein neues Dokument in den iframe geladen, wird die Funktion load_handler ausgeführt.

    Mögliches Problem: Beim ersten Laden des Dokuments feuert der load-Event erst, wenn auch der Inhalt des iframes schon fertig geladen ist. init() wird dann gestartet, vergibt den Handler, aber der load-Event beim iframe ist ja schon vorüber. Also findet keine Anpassung der Höhe statt.

    Deshalb müsste man load_handler() in init() noch einmal von Hand aufrufen:

      
    window.onload = init;  
      
    function init () {  
       iframe = document.getElementById("iframe");  
       iframe.onload = load_handler;  
       load_handler();  
    }  
      
    function load_handler () {  
       var iframe_document = window.frames.iframe.document;  
       iframe.style.height = (iframe_document.getElementById("inhalt").offsetHeight + 20) + "px";  
    }
    

    Ich hab schon sachen versucht wie frames(iframe).document.onload = anpassen()...

    Das sollte eigentlich auch gehen - ohne die () hinter dem Funktionsnamen!

    Das Registrieren von Event-Handler-Funktionen musst du dir so vorstellen: Win Funktionsobjekt wird in die Eigenschaft namens onereignis (onclick, onload usw.) kopiert.

    Schema:
    Elementknoten.onereignis = handlerfunktion;
    Oben konkret:
    iframe.onload = load_handler;

    Dabei darf die Handler-Funktion nicht aufgerufen werden. Sie wird nur mit dem Namen angesprochen. handlerfunktion() würde sie aufrufen und in der Eigenschaft onereignis würde der Rückgabewert der Funktion gespeichert (da die Funktion nichts zurückgibt, undefined).

    Nach dieser Zuweisung wurde das Funktionsobjekt kopiert. In Elementknoten.onereignis befindet sich also nun eine Kopie der Funktion. Diese wird aufgerufen, wenn das Ereignis passiert.

    (Funktionen sind wie gesagt auch Objekte, die einfach an gewissen anderen Objekten hängen. Globale Funktionen sind also Unterobjekte bzw. Eigenschaften von window. Man könnte auch schreiben: Elementknoten.onereignis = window.handlerfunktion;)

    Mathias