Simon Grimm: Firefox ignoriert Javascript-Event (häufig, nicht immer)

Moin moin!

Ich erzeuge über ein Javascript neuen HTML-Code in einem Frame. In diesem Frame soll eine Grafik mittels den Events onmouseover und onmouseout ausgetauscht werden.
Getestet habe ich das Script mit folgenden Browsern:

Mozilla 1.7.13
Firefox 2.0.0.1
Internet Explorer 7.0.5730.11

Probleme gibt es nur mit dem Firefox. Da funktioniert das ganze etwa 3 mal, dann muss die Seite neu geladen werden, da das Bild einfach nicht mehr ausgetauscht wird. Das Problem tritt allerdings sehr unregelmäßig auf. So kann es vorkommen, dass beim ersten Laden der Seite kein Fehler auftritt.

Der Code in der kompletten HTML-Seite:

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
 <head>  
  <title>IP-Admin</title>  
  <script type="text/javascript">  
   function init ()  
   {  
    parent.nix.document.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");  
    parent.nix.document.writeln("<html><head><title>IP-Admin</title>");  
    parent.nix.document.writeln("<script type=\"text/javascript\">");  
    parent.nix.document.writeln("<\/script>");  
    parent.nix.document.writeln("<\/head><body>");  
  
    parent.nix.document.writeln("<img id=\"kekse\" alt=\"gehtnixbild\" onmouseover=\"document.getElementById(\'kekse\').src = \'button_on.gif\'\" onmouseout=\"document.getElementById(\'kekse\').src = \'button_off.gif\'\" src=\"button_off.gif\">");  
  
    parent.nix.document.writeln("<\/body><\/html>");  
    parent.nix.document.close();  
   }  
  </script>  
 </head>  
 <body onload="init()">  
 </body>  
</html>  
  
  

Zur Vollständigkeit noch der Code für das Frameset:

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">  
<html>  
 <head>  
  <TITLE>Printer Configuration</TITLE>  
 </head>  
         <frameset cols="10,*">  
          <frame src="test.html">  
   <frame src="nix.html" name="nix">  
         </frameset>  
</html>  

"nix.html" ist eine leere Textdatei.

Ich habe den gesamten Quelltext gepostet, da ich keine URL zur Verfügung stellen kann, die zum Testen erreichbar ist.

MFG und vielen Dank für Deine Zeit
Simon Grimm

  1. Probleme gibt es nur mit dem Firefox. Da funktioniert das ganze etwa 3 mal, dann muss die Seite neu geladen werden, da das Bild einfach nicht mehr ausgetauscht wird. Das Problem tritt allerdings sehr unregelmäßig auf. So kann es vorkommen, dass beim ersten Laden der Seite kein Fehler auftritt.

    Und die Fehlerkosnole bleibt leer?

    parent.nix.document.writeln("<script type="text/javascript">");
        parent.nix.document.writeln("</script>");

    Wozu der leere Skript Block?

    parent.nix.document.writeln("<img id="kekse" alt="gehtnixbild" onmouseover="document.getElementById('kekse').src = 'button_on.gif'" onmouseout="document.getElementById('kekse').src = 'button_off.gif'" src="button_off.gif">");

    Das geht einfacher. Du kannst hier auch auf this.src zugreifen, die einfachen Anführungszeichen brauchst du nicht maskieren.

    Ansonsten kann ich keinen Fehler entdecken.

    Struppi.

    1. Und die Fehlerkosnole bleibt leer?

      Ja, in der Konsole ist nichts zu sehen

      parent.nix.document.writeln("<script type="text/javascript">");
          parent.nix.document.writeln("</script>");

      Wozu der leere Skript Block?

      Ups, den hab ich da wohl vergessen. Ich habe das Script gekürzt um es hier übersichtlicher darstellen zu können.

  2. Hallo,

    kann dir jetzt keine professionelle Antwort geben, doch hatte
    ich in der Vergangenheit oefters Probleme mit " und ' in JavaScript.
    Daher meine Frage, warum Du die einfachen Anfuehrungsstriche an
    folgenden Stellen escapest

      
    onmouseover=\"document.getElementById(\'kekse\').src = \'button_on.gif\'\" onmouseout=\"document.getElementById(\'kekse\').src = \'button_off.gif\'\" src=\"button_off.gif\">");  
    
    

    ?

    Gruesse
    Chris

  3. Tach,

    installiere dir mal die Firebug-Extension und setze einen Breakpoint
    an gegebener Stelle. Dann schau dir die Properties an und gehe Schritt
    fuer Schritt die potentiellen Fehlerquellen durch.

    Chris77

    1. Tach,

      installiere dir mal die Firebug-Extension und setze einen Breakpoint
      an gegebener Stelle. Dann schau dir die Properties an und gehe Schritt
      fuer Schritt die potentiellen Fehlerquellen durch.

      Chris77

      Firebug ist installiert, kann aber nicht mit dynamisch erzeugtem Code umgehen. Ist also leider nicht möglich :/

  4. Hallo Simon,

    Der Code in der kompletten HTML-Seite:
       function init ()
       {

    parent.nix.document.open('text/html');

    geraten. Es dürfte zumindest nicht schaden.

    Viele Grüße, Jochen

    --
    Kritzeln statt texten:
    Scribbleboard
    1. parent.nix.document.open('text/html');

      Hat leider nicht geholfen, trotzdem danke.

  5. Hi Simon!

    Wenn es dich nach einer Lösung dürstet:
    Hier die Lösung:
        parent.nix.document.open();
        parent.nix.document.writeln("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">");

    anstelle deines Codes. Dann gehts auch im Firefox ohne Probleme.

    Vorschlag für Vereinfachung: Ersetzte document.getElementById('kekse') durch this

    Grüssse,
    Richard

    1. parent.nix.document.open();
          parent.nix.document.writeln("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">");
      Vorschlag für Vereinfachung: Ersetzte document.getElementById('kekse') durch this

      Habe es mit diesen Zeilen versucht und die kekse durch this ersetzt, leider kein Erfolg. Konntest Du den Fehler vorher reproduzieren?

      1. Hi Simon!
        Nicht die Kekse durch this ersetzen, sondern
        document.getElementById('kekse')
        durch
        this
        ersetzen.
        Ja, ich hatte den Fehler auch; nein, er ist jetzt gelöst.

        Hast du BEIDE Zeilen ersetzt (man bemerke den unterschied write/writeln in Zeile 2...)

        Ich verwende FF 1.5 unter Win 2k.

        Hier nochmal alles für Dich:

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
         <head>
          <title>IP-Admin</title>
          <script type="text/javascript">
           function init ()
           {
            parent.nix.document.open();
            parent.nix.document.writeln("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">");
            parent.nix.document.writeln("<html><head><title>IP-Admin</title>");
            parent.nix.document.writeln("<script type="text/javascript">");
            parent.nix.document.writeln("</script>");
            parent.nix.document.writeln("</head><body>");
            parent.nix.document.writeln('<img id="kekse" alt="gehtnixbild" onmouseover="this.src='t01.gif'" onmouseout="this.src='t02.gif'" src="t01.gif"/>');
            parent.nix.document.writeln("</body></html>");
            parent.nix.document.close();
           }
          </script>
         </head>
         <body onload="init()">
         </body>
        </html>

        Grüsse,
        Richard

        1. Nicht die Kekse durch this ersetzen, sondern
          document.getElementById('kekse')
          durch
          this
          ersetzen.

          Ja, habe ich auch so gemacht. Nicht immer meine ich mit dem was ich sage das richtige oO

          Ja, ich hatte den Fehler auch; nein, er ist jetzt gelöst.

          Hast du BEIDE Zeilen ersetzt (man bemerke den unterschied write/writeln in Zeile 2...)

          Ja, den Unterschied habe ich bemerkt. Bei mir kommt es jedoch wieder zu dem Fehler. Hast Du es mehrmals versucht? Es kann durchaus sein, dass er ein paar mal hintereinander nicht auftritt.

          1. Hi Simon!

            Dann kanns nur noch an zwei Dingen liegen:

            1. ich habe in der Framepage bei mir geschrieben:
              <frame src="about:blank" name="nix">
            2. die (von dir) verwendete Version des FF hab einen Bug oder die Installation ist fehlerhaft. Welche Version/Betriebssystem verwendest du denn (ich kann das evtl hier nach- testen) ?

            Grüsse,
            Richard

              1. die (von dir) verwendete Version des FF hab einen Bug oder die Installation ist fehlerhaft. Welche Version/Betriebssystem verwendest du denn (ich kann das evtl hier nach- testen) ?

              Ich nutze Windows XP Professional mit dem Service Pack 2
              Ich habe jetzt auch auf einem Linux/Fedora mit Firefox 1.5.0.12 getestet und das gleiche Problem bekommen. Das about:blank ist eingebaut und zeigt auch keine Wirkung.

              Ebenso habe ich gerade mit FF 2.0.0.6 (frische Installation) getestet, auch kein Erfolg.
              Ein Kollege hat jedoch mit FF 2.0.0.4 keine Probleme.

              1. Ebenso habe ich gerade mit FF 2.0.0.6 (frische Installation) getestet, auch kein Erfolg.
                Ein Kollege hat jedoch mit FF 2.0.0.4 keine Probleme.

                Ich weiß nicht ob du das schon ghetan hast, aber kannst du mal Online zeigen was du aktuell hast?
                Es kann ja nciht sein dass du bei fehlerfreien Code einen Fehler bekommst, d.h. du machst irgendetwas falsch von dem wir nichts Wissen.

                Struppi.

                1. Ich weiß nicht ob du das schon ghetan hast, aber kannst du mal Online zeigen was du aktuell hast?
                  Es kann ja nciht sein dass du bei fehlerfreien Code einen Fehler bekommst, d.h. du machst irgendetwas falsch von dem wir nichts Wissen.

                  Struppi.

                  Ich kann leider keine Version Online stellen (Firmensicherheit).
                  Mehr Code als oben angegeben gibt es momentan nicht. Das ist der Code mit dem ich auch teste.
                  In der Konsole gibt es keine Meldung. Der FF sagt mir an dieser Stelle leider garnix. Der FF Addon Firebug scheint das Ergebnis zu beeinflussen. Dieses sollte beim Testen deaktiviert werden.

                  1. Ich kann leider keine Version Online stellen (Firmensicherheit).

                    Das heißt aber, dass du nicht den 100% Code verwendest, der hier im Thread gezeigt wurde?

                    Mehr Code als oben angegeben gibt es momentan nicht. Das ist der Code mit dem ich auch teste.

                    Der ist 100% Fehlerfrei und läuft in allen Browsern die JS können.

                    In der Konsole gibt es keine Meldung. Der FF sagt mir an dieser Stelle leider garnix. Der FF Addon Firebug scheint das Ergebnis zu beeinflussen. Dieses sollte beim Testen deaktiviert werden.

                    Ich hab das gar nicht installiert. Ich kann mich nur wiederholen, der Code funktioniert, hier hab ich das mal für dich hochgeladen.

                    Struppi.

                    1. hier

                      Danke für diesen Link, ist für andere jetzt viel einfacher das Script zu testen. Ich bekomme aber leider auch da den Fehler. Getestet mit Firefox 1.5.0.12 auf Linux/Fedora.

                      1. hier

                        Danke für diesen Link, ist für andere jetzt viel einfacher das Script zu testen. Ich bekomme aber leider auch da den Fehler. Getestet mit Firefox 1.5.0.12 auf Linux/Fedora.

                        Welchen Fehler nochmal?

                        Struppi.

                        1. Welchen Fehler nochmal?

                          Nach einigen Versuchen wird das Bild nicht mehr ausgetauscht. Es kann unter Umständen sein, dass dieser Fehler nicht sofort auftritt oder auch erst nach einem Reload der Seite. Machmal sind mehrere Reloads nötig. Es ist da leider keine Regelmäßigkeit zu erkennen und die Fehlerkonsole bleibt stumm. Ich habe den Quelltext nach der Vorlage einiger Posts hier modifiziert. Stelle ich in wenigen Minuten hier rein.

                          1. Aktueller Quelltext:

                            index.html

                              
                            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">  
                            <html>  
                             <head>  
                              <TITLE>Printer Configuration</TITLE>  
                             </head>  
                                     <frameset cols="10,*">  
                                      <frame src="test.html">  
                               <frame src="about:blank" name="nix">  
                                     </frameset>  
                              
                            </html>  
                            
                            

                            test.html

                              
                            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
                            <html>  
                             <head>  
                              <title>IP-Admin</title>  
                              <script type="text/javascript">  
                               function init ()  
                               {  
                                parent.nix.document.open();  
                                parent.nix.document.writeln("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");  
                                parent.nix.document.writeln("<html><head><title>IP-Admin</title>");  
                                parent.nix.document.writeln("<\/head><body>");  
                              
                                parent.nix.document.writeln("<img id=\"kekse\" alt=\"gehtnixbild\" onmouseover=\"this.src = 'button_on.gif'\" onmouseout=\"this.src = 'button_off.gif'\" src=\"button_off.gif\">");  
                              
                                parent.nix.document.writeln("<\/body><\/html>");  
                                parent.nix.document.close();  
                               }  
                              </script>  
                             </head>  
                             <body onload="init()">  
                             </body>  
                            </html>  
                            
                            
                          2. Hallo Simon!

                            Nach einigen Versuchen wird das Bild nicht mehr ausgetauscht. Es kann unter Umständen sein, dass dieser Fehler nicht sofort auftritt oder auch erst nach einem Reload der Seite. Machmal sind mehrere Reloads nötig. Es ist da leider keine Regelmäßigkeit zu erkennen und die Fehlerkonsole bleibt stumm. Ich habe den Quelltext nach der Vorlage einiger Posts hier modifiziert. Stelle ich in wenigen Minuten hier rein.

                            Ich kann Dir bei der Fehlersuche noch nicht helfen, kann aber zumindest bei Stuppis Link den Fehler reproduzieren (Firefox 2.0.0.6: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6). In der Tat ist es unregelmäßig so, dass die Grafik nicht ausgetauscht wird. Einmal geht immer, manchmal zwei oder drei Mal oder länger, dann nicht irgendwann nicht.

                            Und eben (Java-Script-Konsole offen), wurde die Grafik ausgetauscht (grün auf rot) und die rote Grafik blieb stehen.

                            Höchst seltsam, das.

                            Viele Grüße aus Frankfurt/Main,
                            Patrick

                            --

                            _ - jenseits vom delirium - _
                            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                            Nichts ist unmöglich? Doch!
                            Heute schon gegökt?
                            1. Ich kann Dir bei der Fehlersuche noch nicht helfen, kann aber zumindest bei Stuppis Link den Fehler reproduzieren (Firefox 2.0.0.6: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6). In der Tat ist es unregelmäßig so, dass die Grafik nicht ausgetauscht wird. Einmal geht immer, manchmal zwei oder drei Mal oder länger, dann nicht irgendwann nicht.

                              Was macht ihr denn? Ich kann dieses Verhalten null reproduzieren. Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

                              Struppi.

                              1. Hallo Struppi!

                                Was macht ihr denn? Ich kann dieses Verhalten null reproduzieren. Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

                                Keine Ahnung... noch eine Besonderheit:

                                Zieht man den Frameborder nach einem Neuladen des Framesets nach rechts, dann funktioniert der Bildwechsel immer (naja, immer heißt: ich habe es ca. 20 mal gemacht). Lässt man dagegen den Border an seiner Stelle, so das links nur ein schmaler Streifen ist, dann ist es so, wie Simon und ich es beschreiben.

                                Viele Grüße aus Frankfurt/Main,
                                Patrick

                                --

                                _ - jenseits vom delirium - _
                                [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                Nichts ist unmöglich? Doch!
                                Heute schon gegökt?
                                1. Was macht ihr denn? Ich kann dieses Verhalten null reproduzieren. Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

                                  Keine Ahnung... noch eine Besonderheit:

                                  Zieht man den Frameborder nach einem Neuladen des Framesets nach rechts, dann funktioniert der Bildwechsel immer (naja, immer heißt: ich habe es ca. 20 mal gemacht).

                                  Mein armer Billigserver, hoffentlich hält der das aus ;-)

                                  Lässt man dagegen den Border an seiner Stelle, so das links nur ein schmaler Streifen ist, dann ist es so, wie Simon und ich es beschreiben.

                                  Alles sehr seltsam, es scheint Simon läßt sich nicht helfen.

                                  Struppi.

                                  1. Hallo Struppi!

                                    Mein armer Billigserver, hoffentlich hält der das aus ;-)

                                    Ach iwo, ein paar Mal Neuladen wird er noch verkraften... Ist ja keine DoS-Attacke!

                                    Alles sehr seltsam, es scheint Simon läßt sich nicht helfen.

                                    Vielleicht doch: ich habe noch etwas ausprobiert (allerdings diesmal keine 20 mal *g*). Wenn man nur den Frame mit der Grafik neulädt (über rechte Maustaste -> Aktueller Frame -> Frame neu laden), scheint es auch zu funktionieren.

                                    Dann könnte Simon dafür sorgen, dass nach dem Aufruf des Framesets das betroffen Frame halt noch einmal geladen wird.

                                    Viele Grüße aus Frankfurt/Main,
                                    Patrick

                                    --

                                    _ - jenseits vom delirium - _
                                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                    Nichts ist unmöglich? Doch!
                                    Heute schon gegökt?
                                    1. Vielleicht doch: ich habe noch etwas ausprobiert (allerdings diesmal keine 20 mal *g*). Wenn man nur den Frame mit der Grafik neulädt (über rechte Maustaste -> Aktueller Frame -> Frame neu laden), scheint es auch zu funktionieren.

                                      Bei mir klappt das leider nicht. Wenn ich nur diesen Frame neu lade bekomme ich den Alternativtext statt dem Bild zu sehen. Sehr seltsam ist das alles.

                                2. Zieht man den Frameborder nach einem Neuladen des Framesets nach rechts, dann funktioniert der Bildwechsel immer

                                  Interessant, ich kann das bestätigen. Habs grad getestet.

              2. Ebenso habe ich gerade mit FF 2.0.0.6 (frische Installation) getestet, auch kein Erfolg.

                Ach übrigens, ich habe jetzt nicht den ganzen Thread durchgelesen konnte aber keine Fehlermeldung finden, wie lautet diese? (Du kennst die Fehlerkonsole?)
                Struppi.

  6. https://bugzilla.mozilla.org/show_bug.cgi?id=354427

    So wie es aussieht gibt es für dieses Problem keine Lösung. Der Bug wurde 2006-09-26 gemeldet, es hat jedoch noch kein Entwickler des FF-Teams darauf reagiert.

    Da schnuppert man einmal in die Webentwicklung rein und rennt gleich vor nen Bug im Browser :(

    Vielen Dank an alle die hier ihre Hilfe angeboten haben!