dr.colossos: iframe.document von "aussen" mit EventHandler versehen

Hi,

ich habe eine Seite mit mehreren iframes (ja, aus gutem Grund).

Jez moechte ich es erreichen, dass ein Klick in einen der iframes einen EventHandler anstoest.

Allerdings moechte ich den Code fuer die Definition des EventHandlers im Hauptfenster haben, und NICHT im Dokument der iframes (da z.b. das iframe-Dokument nur eine HTML-Datei ist, die sich auch aendern kann, d.h. ich muesste manuel in alle diese Dateien den EventHandler-Code einfuegen).

Ich habe jedenfalls folgenden Code.

for(i = 0; i < top.window.frames[i].length; i++)
      top.window.frames[i].document.onmousedown = function(alert('scary popup'));

Das geht im IE, Opera, nur FireFox weigert sich was zu machen, leider ohne Fehlermeldung von FireBug.

Weiss jemand wo FF da streikt? Oder ein anderer Ansatz?

Vielen Dank
Servus

  1. Hi,

    schon spaet ... hab mich oben vertippt ... war aber nicht der Fehler, lokal war der Code schon syntaktisch korrekt!

    Muss heissen:
    for(i = 0; i < top.window.frames[i].length; i++)
        top.window.frames[i].document.onmousedown = function(){alert('scary popup')};

    Wo ist der (Nicht-Tipp)Fehler?

    Danke!

    1. ... und nochmal ich:

      Ich rufe mittels <body onload="init();"> folgende Funktion auf:

      function init()
      {
       for(i = 0; i < window.frames.length; i++)
       {
        window.frames[i].document.onkeydown = function(){alert("@#&*^!")};
        alert(window.frames[i].document.onkeydown);
       }
      }

      Wie gesagt, nur Firefox will nicht, Opera und IE spucken die alert-Box aus.

      Weiss wer wieso?

      1. Hallo,

        Ich rufe mittels <body onload="init();"> folgende Funktion auf:

        function init()
        {
        for(i = 0; i < window.frames.length; i++)
        {
          window.frames[i].document.onkeydown = function(){alert("@#&*^!")};
          alert(window.frames[i].document.onkeydown);
        }
        }

        Wie gesagt, nur Firefox will nicht, Opera und IE spucken die alert-Box aus.

        Weiss wer wieso?

        Was steht in den IFrames drin? Wenn die IFrames nämlich Inhalte haben, kann ich das nicht nachvollziehen.

        Beispiel:

          
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
                "http://www.w3.org/TR/html4/strict.dtd">  
        <html>  
        <head>  
        <title>IFrames document.onkeydown</title>  
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
        <style type="text/css">  
        iframe { border:1px solid; }  
        </style>  
        <script type="text/javascript">  
        <!--  
        function init()  
        {  
         for(i = 0; i < window.frames.length; i++)  
         {  
          window.frames[i].document.onkeydown = function(){alert(this.location.href)};  
          alert(window.frames[i].document.onkeydown);  
         }  
        }  
        //-->  
        </script>  
        </head>  
        <body onload="init();">  
        <iframe src="dummy"></iframe><!-- onkeydown funktioniert (location.href=dummy) //-->  
        <iframe src=""></iframe><!-- onkeydown funktioniert (location.href=about:blank) //-->  
        <iframe src="#"></iframe><!-- onkeydown funktioniert nicht; offensichtlich hat das Dokument hier keine Ausdehnung und kann nicht focusiert werden //-->  
        </body>  
        </html>  
        
        

        viele Grüße

        Axel

        1. Hi,

          die iframes koennen beliebige HTML-Seiten darstellen, die auch evtl. dynamisch per JavaScript eingebunden werden.

          Das heisst wiederum, dass ich an den QuellCode der HTML-Dateien evtl. garnicht ran komm (um evtl. eventhandler darin zu definieren), noch will ich das, da ich sonst eben alle die Dateien manuell aendern muesste.

          Wie dem auch sei, ich habs auch fuer Firefox hinbekommen dass er die Eventhandler annimmt, Problem war lediglich das der lieber Firefox einfach langsamer ist in dieser Hinsicht, und zum Zeitpunkt wo ich vom Elterndokument die Eventhandler anfuegen wollte, waren i.d.R. die iframe-Dokumente noch nicht vollstaendig geladen, somit funktionierte es nicht.

          Nun mach ich das mit setInterval(), bis es erfolgreich war, und es klappt.

          Danke fuer deine Muehe!