Funktion onload soll geändert werden

  • Hallo zusammen

    ein iframe führt beim Aufruf der Seite Funktionen aus die ua. die Funktion AutoOpen der Seite aus die das iframe einbettet. Und es wird auch einen Funktion aufgerufen die onload des iframe andere Funktionen hinzufügen soll.

    Und jetzt schreibe ich die Zeile

    Code
    document.getElementById("Daten").onload = function () {MenueUp(); HideDaten(); top.ActiveLink = undefined }


    und der firefox versteht es und führt nur noch diese Funktionen aus. Und auch wenn ich setAttribute schreibe versteht der ie nix und führt weiterhin diese Funktionen aus die von Anfang an im iframe tag drin stehen.

    Also wie bitte ändere ich die Funktionen im ie? Denn schreibe ich in den body tag die Funktion AutoOpen, dann hat der FireFox nur Probleme und zeigt nur noch Probleme mit der Seite. So zeigt der Firefox nix mehr, doch der ie führt weiterhin AutoOpen aus.

    Danke für Eure Hilfe bereits jetzt!

    Gruß Andreas

  • Indem du keine iFrames sondern PHP und include(); oder besser gelich ein CMS benutzt, da ahste einige probleme weniger. Ausserdem versteh ich fast nur bahnhof von dem teil unter dem JS Code.
    P.S.: Opera & Chrome machen bei sowas auch ganz gerne Stress, also ...

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hallo Tobse

    wenn ich das iframe mit dem im Normalfall gewollten Code einbette, dann muß ich ja im body die Funktion AutoOpen ausführen. Und wenn ich das mache, dann hat der FireFox Probleme. Denn die Größe des iframe wird an den Inhalt angepasst. Und es sollen einfach verschiedene Funktionen ausgeführt werden wenn sich die Seite im iframe ändert. Der ie erkennt nicht einmal das eine Funktion drinsteht, was ich mit getAttribute("onload") auslesen will.

    Es muß doch möglich sein dim iframe eine neue Funktion zuweisen zu können? Würde mich also freuen weitere Hilfe bekommen zu können und ich möchte mich bereits jetzt bedanken.

    Gruß Andreas

  • Der IE kann sowas erst ausführen, wenn die Seite komplett geladen wurde. Dafür gibt es das nicht-valide "defer"-Attribut

    Code
    <script type="text/javascript" defer>...</script>

    oder JavaScript-Bibliotheken wie jQuery die soetwas erst ausführen, wenn der DOM der Seite "ready" ist.

  • Ja wenn das so ist, kannse jeden link, der auf eine Seite fuehrt, die einen onload hat nen rel geben und denn dann ausfuehren.
    mit jQuery:

    Code
    $("#iFrameId a[href,rel]").click(function() {
        runme=this.rel;
        $("#iFrameId").ready(function() {
            eval(runme);
        }
    });


    Ohne jQuery:Beim iFrame onload (also <ifranme onload="">) durch alle links gehen, per .getElementsByTagName() und allen ein onclick verpassen, die einen rel haben,
    bzw bei allen mit rel das rel ins onclick packen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hallo

    ich komme hier wahrscheinlich nicht ganz mit. Denn es geht ja darum das im iframe tag onload steht, die ausgeführt werden soll und damit durch eine andere ersetzt werden soll.

    Code
    $("#Daten").ready(function() {
    document.getElementById("Daten").setAttribute("onload", "MenueUp(); HideDaten(); top.ActiveLink = undefined")
     }
    );



    Doch hiermit passiert nachwievor nix. Also muß ich wohl um Beispiel Code bitten und bedanke mich bereits jetzt dafür.

    Danke gruß Andreas

  • Ich dachte eben den onload-code für die seiten nicht ins onload tag der seite, sondern ins link-tag der vorherigen seite zu packen. Klappt es nicht, den onload-code aus dem iframe fenster auszulesen und dann auszuführen? Das müste so aussehen:

    Code
    $("#iframeId a[href]").click(function() {
        $("#iframeId").ready(function() {
            // this ist jetzt eine referens aufs iframe
            if (this.onload) {
                eval(this.onload);
            }
        });
    });


    Sollte funktionieren.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hallo nochmals zu meiner Situation:

    ich habe eine Startseite auf dieser ein iframe eingebettet ist. Wenn ich die Funktion AutoOpen() in den body Tag der Startseite schreibe dann bekomme ich die Fehlermeldung "Objekt erforderlich" da die Funktion der Seite eine Funktion zuweist die bei Größenänderung der Seite aufgerufen wird. Und diese Funktion muß prüfen wie groß der Inhalt der Seite im iframe ist.

    Also stellte ich mir vor die Funktion AtuoOpen() erst einmal in den iframe Tag in onload zu schreiben und dann funktioniert das mit der Seitenanpassung einwandfrei. Jedoch soll die Funktion nicht jedes Mal aufgerufen werden wenn sich die Seite im iframe ändert. Und somit wollte ich nachträglich die Funktionen im onload des iframes wieder in diese Funktionen ändern die standardmäßig ausgeführt werden sollen.

    Jedoch erkennt der ie nicht einmal das eine Funktion in onload von mir schon standardmäßig reingeschrieben wurde und diese Funktionen die von mir da drin stehen werden bei jedem aufruf einer Seitet ausgeführt. Und das auch wenn ich mit setAttribute oder onload = function () {...} die Funktionen wieder ändern will. Diese Funktionen stehen jetzt drin, werden auch ausgeführt, aber wie gesagt wird weiterhin auch AutoOpen ausgeführt.

    Also wie erreiche ich es bitte das nur einmal AutoOpen ausgeführt wird und die Funktion BereichAnpassen() erst dann hinzugefügt wird wenn die Seite im iframe zur Verfügung steht?

    Danke gruß Andreas

  • Hallo

    es reicht aber nicht nur die Größe des iframes an dessen Inhalt anzupassen. Auch die Startseite muß reagieren können wenn die Größer geändert wird, sprich die Größe des iframe muß angepasst werden.

    Und die Daten der Größe des Inhalts stehen ja erst bei geladener Seite im iframe zur Verfügung. Und die Funktion welche die Startseite besitzt ist die gleiche wie die im iframe. Und ich möchte diese Funktion nicht durch Zeilen erweitern die erst einmal zu prüfen beginnen ob der Wert überhaupt zur Verfügung steht.

    Und somit stelle ich mir das erwähnte Vergehen vor.

    Danke gruß Andreas

  • Wenn du den einzigen weg nicht nehmen willst, ist das nicht unser problem - benutz php & include(); und habe spaß damit, im ernst! Iframes sind wirklich was veraltetes und saumäsig Suchmaschienenunfreundlich.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hallo

    ich verstehe es so das include mit php ausgeführt wird und das dann fest eine Seite drin steht. Und wie das heut zu Tage standard ist wird die ganze Seite neu geladen und php holt sich dann aus der Adresse die Info welche Seite denn geladen werden soll. Meine Seite wird per php aufgebaut und es stehen alle Objekte sofort zur Verfügung wenn sich der Bereich - Freizeit, Hobby, Privat... - ändert. Es handelt sich ja um eine Linksammlung auf einem usb Stick.

    Per jquery warten zu können bis die Seite zur Verfügung steht ist auch sehr interessant. Dann funktionierts vielleicht beim ersten Aufruf der Seite den Ablauf so zuzuweisen wie ich es mir mit dem iframe tag vorgestellt hatte. Denn beim nächsten Aufruf der Seite sollen ja die Standardmäßig vergebenen Funktionnen ausgeführt werden.

    Ich finde meine jetzige Variante sehr schräg, aber sie funktioniert. Denn ich setze einen Timer und dessen Funktion schaut so lange nach einer Adresse im iframe und führt dann die Funktionen aus wenn eine Adresse zur Verfügung steht. Wie das auf langsamen Rechnern funktioniert kann ich hier nicht testen. Es sah aber bisher gut aus.

    Gruß Andreas