Olaf N.: Wie schreibe ich einen eventhandler in ein anderes window

Hi Script-Profis,

mit einer Funktion möchte ich ein neues Fenster öffnen, in das ein Frameset geladen wird. Das Frameset soll dann aber nicht mit dem Standardinhalt (Inhaltsverzeichnis) sondern mit einer vorher spezifizierten Inhaltsseite geladen werden.

Grundsätzlich hatte ich mir das so vorgestellt:

function FrameSetzen()
{
   var framesetUrl = "http://bundesrecht.juris.de/bundesrecht/sgb_10/";
   var frameUrl = "http://bundesrecht.juris.de/bundesrecht/sgb_10/__10.html"
   var docWindow = window.open(framesetUrl);
   alert();
   docWindow.frames.inhalt.location.href = frameUrl;
}

So funktioniert das Script, aber nur, weil ich vor dem Laden des spezifizierten Url für den Frame "inhalt" mit alert die Abarbeitung unterbreche. Ohne diese Unterbrechung würde die letzte Zeile einen Fehler erzeugen, weil das Frameset noch nicht vollständig geladen ist.

Meine Idee: In die neue(!) Seite einen Eventhandler für onload schreiben. Erst wenn onload eintritt, wird die spezifizierte Seite in den Frame geladen. Dadurch bräuchte der Nutzer nicht länger zu warten als wirklich notwendig. Geht das????? Wie???

Breche mir im Augenblick den Schädel und die Finger bei der Suche nach der Lösung. Hat jemand einen Tipp?

Gruß, Olaf

  1. hallo,

    Meine Idee: In die neue(!) Seite einen Eventhandler für onload schreiben. [...] Geht das?

    Ja. "onload()" ist allerdings bereits ein EventHandler, und "für den" brauchst du keinen neuen zu erfinden.

    Wie?

    Indem du die Domain bundesrecht.juris.de kaufst bzw. irgendwie erwirbst. Und vor allem, indem du weniger Fragezeichen schreibst. Die Fragezeichen sind dein eigentliches Problem.

    Grüße aus Berlin

    Christoph S.

    1. Indem du die Domain bundesrecht.juris.de kaufst bzw. irgendwie erwirbst. Und vor allem, indem du weniger Fragezeichen schreibst. Die Fragezeichen sind dein eigentliches Problem.

      Grüße aus Berlin

      Christoph S.

      Nur für Christoph S.:

      Wie muss man hier seine Frage kennzeichnen, um von dir keine "Hilfe" zu bekommen?

      Hast du eigentlich Konkurrenz beim Schreiben der meisten, hirnlosen Antworten? So oft wie du hier dämliche Kommentare abgibst scheint darauf ein Preis ausgesetzt zu sein.

      Hochachtungsvoll

      Olaf

      1. hallo,

        Wie muss man hier seine Frage kennzeichnen, um von dir keine "Hilfe" zu bekommen?

        Gar nicht. Aber du kannst dich registrieren, und dann steht es dir völlig frei, jemanden, der dir nicht gefällt, auf die "blacklist" zu setzen. Du würdest also in diesem Fall gar nicht bemerken können, ob und was ich vielleicht schreibe.

        Grüße aus Berlin

        Christoph S.

        1. Gar nicht. Aber du kannst dich registrieren, und dann steht es dir völlig frei, jemanden, der dir nicht gefällt, auf die "blacklist" zu setzen. Du würdest also in diesem Fall gar nicht bemerken können, ob und was ich vielleicht schreibe.

          Na bitte, es geht. Das ist ja mal was richtig Konstruktives und Hilfreiches, und nicht nur blödes Rumgenöle. Steckt wohl doch ein guter Kern in dir.

          Viele Grüße

          Olaf

      2. hi!

        Hast du eigentlich Konkurrenz beim Schreiben der meisten, hirnlosen Antworten? So oft wie du hier dämliche Kommentare abgibst scheint darauf ein Preis ausgesetzt zu sein.

        Sorry, wenn ich mich da jetzt einmische, aber was kann Christoph dafür, wenn du entweder (a) zu blöd bist seine Antwort zu verstehen oder (b) seine Antwort nicht verstehen willst?

        lg
        azok

        --
        Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
        Mein Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:) de:> js:| ch:? sh:) mo:) zu:)
        1. Hallo azok,

          Sorry, wenn ich mich da jetzt einmische

          Hat Christoph keine Stimme? Hast du den Eindruck, er könne sich nicht wehren?

          Lass’ es doch einfach gut sein, umso schneller ist dieser Thread im Archiv.

          Grüße
           Roland

          1. hallo Roland,

            Hat Christoph keine Stimme? Hast du den Eindruck, er könne sich nicht wehren?

            Die Stimme hat er, und "gewehrt" habe ich mich ja in diesem Thread auch bereits - wenn auch eben auf genau die Art, wie man sich bei solchen Nachfragen wehren sollte: ich habe ihm gesagt, wie er mich ignorieren kann.

            Lass’ es doch einfach gut sein, umso schneller ist dieser Thread im Archiv.

            Es sei denn, der OP kapiert doch noch, was ich ihm geschrieben habe. Ich gebe zu, daß das nicht ganz einfach sein kann.

            Grüße aus Berlin

            Christoph S.

    2. Moin,

      Meine Idee: In die neue(!) Seite einen Eventhandler für onload schreiben. [...] Geht das?

      Ja. "onload()" ist allerdings bereits ein EventHandler, und "für den" brauchst du keinen neuen zu erfinden.

      Och komm, du baust ab. Früher hast du beim absichtlichen Missverstehen des Fragestellers ihm wenigstens nichts untergeschoben was er nicht gesagt hat. Olaf redete von "onload" und das ist wohl selbst nach der pedantischten Auslegung der Buchstaben ein Event für das man selbstverständlich einen Handler setzen kann. (Ich gebe ja zu, dass man, wenn man einen schlechten Tag hat, "onload()" als Eventhandler bezeichnen mag, für den man "keinen neuen zu erfinden" braucht, aber davon hat Olaf nunmal nicht geschrieben.)

      Indem du die Domain bundesrecht.juris.de kaufst bzw. irgendwie erwirbst.

      Was genau verschafft dir den Eindruck, dass er dort nicht bereits Zugriff hat? Abgesehen von dem üblichen "Im Zweifel für den Angeklagten" ist es ein schönes Indiz, dass sein bisheriges Skript gar nicht funktionieren würde, wenn es nicht unter der Domain läge.

      --
      Henryk Plötz
      Grüße aus Berlin
      ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
      ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
      1. Hallo.
        "Nun werden Sie mal nicht sachlich!"
        MfG, at

  2. Moin,

    Meine Idee: In die neue(!) Seite einen Eventhandler für onload schreiben. Erst wenn onload eintritt, wird die spezifizierte Seite in den Frame geladen. Dadurch bräuchte der Nutzer nicht länger zu warten als wirklich notwendig. Geht das????? Wie???

    Breche mir im Augenblick den Schädel und die Finger bei der Suche nach der Lösung. Hat jemand einen Tipp?

    Tip(p): Objektorientiert denken, denn dafür ist das da. onload ist eine Eigenschaft (u.a.) von window-Objekten und der Rückgabeparameter von window.open() (in deinem Fall also docWindow) ist ein (tada!) window-Objekt. Das hast du ja implizit schon durch docWindow.frames... ausgenutzt, denn auch frames ist eine Eigenschaft von window-Objekten.

    Achtung: Auch an dieser Stelle greifen die üblichen Cross-Domain-Sicherheitsbeschränkungen. Das heisst dass dein Skript was docWindow.onload setzen will und die Ressource die dort hingeladen wird (also der Inhalt von framesetUrl) unterhalb der gleichen Domain liegen müssen.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. Tip(p): Objektorientiert denken, denn dafür ist das da. onload ist eine Eigenschaft (u.a.) von window-Objekten und der Rückgabeparameter von window.open() (in deinem Fall also docWindow) ist ein (tada!) window-Objekt. Das hast du ja implizit schon durch docWindow.frames... ausgenutzt, denn auch frames ist eine Eigenschaft von window-Objekten.

      Achtung: Auch an dieser Stelle greifen die üblichen Cross-Domain-Sicherheitsbeschränkungen. Das heisst dass dein Skript was docWindow.onload setzen will und die Ressource die dort hingeladen wird (also der Inhalt von framesetUrl) unterhalb der gleichen Domain liegen müssen.

      Moin Henryk,

      da bin ich aber froh, hier doch noch jemanden mit fachlichem Interesse anzutreffen.

      Jepp. Sicherheitsbeschränkung. Da liegt der Hase im Pfeffer. try-catch brachte es an's Tageslicht: "Kein Zugriff" auf onload.

      Nun lasse ich eine Schleife laufen, bis mir frames.length die Info liefert, dass mein Frame existiert. Dann kann ich den Frameinhalt mit .location.href neu setzen. Diese Eigenschaft ist nicht geschützt!

      Viele Grüße von der Ostseeküste in die Hauptstadt

      Olaf

      PS
      --
      Noch ein bisschen Erbsenzählerei, ich hoffe, unsere Freunde lesen noch mit. Aber immer schön locker bleiben.
      LOAD   = Event
      ONLOAD = Eventhandler, kann grundsätzlich >überschrieben< werden. Sicherheitsbeschränkungen können dies jedoch wieder verhindern, wie oben.

      1. Moin,

        Nun lasse ich eine Schleife laufen, bis mir frames.length die Info liefert, dass mein Frame existiert. Dann kann ich den Frameinhalt mit .location.href neu setzen. Diese Eigenschaft ist nicht geschützt!

        Doch ist sie. Wenn nicht dann solltest du deinem Browserhersteller einen kräftigten Tritt in den Allerwertesten verpassen, so stark dass es vorne wieder rauskommt. Betroffen sind alle bei denen http://www.ploetzli.ch/forumtst/crossdomain.html etwas anderes als eine Fehlermeldung im Javascript-Log auslöst. (Hinweis: evt. könnten Popup-Blocker mit dem Beispiel interferieren.)

        --
        Henryk Plötz
        Grüße aus Berlin
        ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
        ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
        1. Dann kann ich den Frameinhalt mit .location.href neu setzen. Diese Eigenschaft ist nicht geschützt!

          Doch ist sie. Wenn nicht dann solltest du deinem Browserhersteller einen kräftigten Tritt in den Allerwertesten verpassen, so stark dass es vorne wieder rauskommt. Betroffen sind alle bei denen http://www.ploetzli.ch/forumtst/crossdomain.html etwas anderes als eine Fehlermeldung im Javascript-Log auslöst. (Hinweis: evt. könnten Popup-Blocker mit dem Beispiel interferieren.)

          Im IE ist bei Cross-Frame Scripting "window.location.href" lese- aber nicht schreibgeschützt. Damit sollte eigentlich allen Sicherheitsbedürfnissen entsprochen sein.

          Siehe auch: http://msdn.microsoft.com/workshop/author/om/xframe_scripting_security.asp

          Gruß, Olaf

          1. Moin,

            Im IE ist bei Cross-Frame Scripting "window.location.href" lese- aber nicht schreibgeschützt. Damit sollte eigentlich allen Sicherheitsbedürfnissen entsprochen sein.

            Noe, sehe ich nicht so.

              
            foo = window.open("http://www.sichere-bank.de/frameset.htm")  
            foo.frames.hauptframe.location.href="http://www.boeser-phisher.de/modifizierte_seite_von_sichere-bank_de.htm"  
            
            

            zu erlauben ist meiner äusserst bescheidenen Meinung nach keine besonders kluge Sache. Opera und Gecko stimmen mir zum Glück zu.

            --
            Henryk Plötz
            Grüße aus Berlin
            ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
            ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~