Harlekin: IE hat ein Problem mit folgendem Script...

Hallo, irgendwie hab ich ein Problem mit meinem Js.. ._.

der Fehler tritt nicht immer auf, sogar eig. ziemlich selten, das ist das, was mich daran verwirrt. Gelegentlich erscheint unter:

Ie7: "Die Webseite konnte nicht geladen werden" -> "Seite kann nicht angezeigt werden" Lässt sich durch einfaches Aktualisieren beheben.

Ie8: Ist der Fehler der gleiche, eigentlich nur dass keine Fehlermeldung erscheint und nur das Hintergrundbild geladen wird. Durch einfaches Aktualisieren funktioniert das ganze wieder.

Da es nur auf Seiten geschieht indenen ich die funktion read(); nutze, muss es wohl an dieser liegen.

nun die Funktion ich weiß meine tabellennverschachtelungen sind schrecklich, aber daran wird es kaum liegen, oder?

Ich hoffe ihr könnt mir helfen, denn ich such schon seit Tagen nach dem Fehler, find ihn nur seltsamer weise irgendwie nicht, denn die Funktion funktioniert ja.. (meißtens) xD.

Der Fehler tritt nur unter IE auf. FF und Opera machen da keine Probleme.

function read($indata){

echo "
<script type="text/javascript">
<!--
var out = "$indata";

var lettercounter = 0;
var tmp = out.split('');
var end = tmp.length;

document.write('<center><table cellpadding="0" cellspacing="0"><tr><td></td><td align="right" valign="bottom"><img src="templates/skin/linieoben.png"></td><td align="left" valign="top" rowspan="2"><img src="templates/skin/linierechts2.png" valign="top"></td></tr><tr><td align="right" valign="bottom" rowspan="2"><img src="templates/skin/linielinks2.png"></td><td valign="top"><table cellpadding="0" cellspacing="0"><tr><td width="350" height="80" valign="top"><div id="charcounter_output" style="font-family: Georgia; font-size:10pt; font-style: italic;" valign="top" align="justify"></div></td></tr></table></td></tr><tr><td align="left" valign="top"><img src="templates/skin/linieunten.png"></td><td></td></tr></table></center>');

function characounter()
{
if( lettercounter < end )
{
document.getElementById("characounter_output").innerHTML += tmp[lerrercounter];
lettercounter++;
}

}
setInterval("characounter()", 55);
//-->
</script>

";
}

  1. Lieber Harlekin,

    "Harlekin" ist eine Art Clown, stimmt's?

    So. Du hast also ein Problem mit einem JavaScript (siehe Dein Themenbereich) und postest hier dafür ... hmm... das gibt's doch garnicht, Du Clown postest doch tatsächlich serverseitigen PHP-Code!

    Jetzt sei so gut und poste exakt das, was als Quelltext in Deinem IE ankommt, ja? Dann kann man das erstens besser lesen und zweitens kann man dann echte Fehler überhaupt erst finden.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Harlekin,

      "Harlekin" ist eine Art Clown, stimmt's?

      So. Du hast also ein Problem mit einem JavaScript (siehe Dein Themenbereich) und postest hier dafür ... hmm... das gibt's doch garnicht, Du Clown postest doch tatsächlich serverseitigen PHP-Code!

      Jetzt sei so gut und poste exakt das, was als Quelltext in Deinem IE ankommt, ja? Dann kann man das erstens besser lesen und zweitens kann man dann echte Fehler überhaupt erst finden.

      Liebe Grüße,

      Felix Riesterer.

      ehrem ja, liegt daran, dass ich es in eine Funktion gepackt hab. xD ich nehms aus der Funktion raus, viel verändert tut sich dadurch nicht ^^

      <script type="text/javascript">
      <!--
      var ausgabe = "das ist der Text für die Ausgabe der Buchstabe für Buchstabe ~vorgelesen~ wird..^^";

      var buchstabencounter = 0;
      var tmp = ausgabe.split('');
      var end = tmp.length;

      document.write('<center><table cellpadding="0" cellspacing="0"><tr><td></td><td align="right" valign="bottom"><img src="templates/skin/linieoben.png"></td><td align="left" valign="top" rowspan="2"><img src="templates/skin/linierechts2.png" valign="top"></td></tr><tr><td align="right" valign="bottom" rowspan="2"><img src="templates/skin/linielinks2.png"></td><td valign="top"><table cellpadding="0" cellspacing="0"><tr><td width="350" height="80" valign="top"><div id="charcounter_output" style="font-family: Georgia; font-size:10pt; font-style: italic;" valign="top" align="justify"></div></td></tr></table></td></tr><tr><td align="left" valign="top"><img src="templates/skin/linieunten.png"></td><td></td></tr></table></center>');

      function charcounter()
      {
      if( buchstabencounter < end )
      {
      document.getElementById("charcounter_output").innerHTML += tmp[buchstabencounter];
      buchstabencounter++;
      }

      }
      setInterval("charcounter()", 55);
      //-->
      </script>

      ps: Japp nen harlekin ist sowas wie ein Clown :D

      hoffe du meinst es so als Quellcode. Packt man es in eine beliebige html datei sollte es funktionieren

      1. Lieber Harlekin,

        offenbar machst Du wirklich Witze. Schau her:

        ich nehms aus der Funktion raus, viel verändert tut sich dadurch nicht ^^

        <script type="text/javascript">

        Die Backslashes haben nur innerhalb Deines serverseitigen Codes einen Sinn. Diesen jetzt vermeintlich auszusparen verändert den Unsinn höchstens farblich, erhöht also keinesfalls seinen Sinngehalt.

        Ich hatte geschrieben, Du mögest exakt das posten, was im IE auch tatsächlich ankommt - stattdessen hast Du nur einen Teil des serverseitigen Codes von vorher entfernt. Findest Du das jetzt besonders gelungen?

        Willst Du wirklich Hilfe, oder versuchst Du nur, hier jemanden zu verkohlen?

        Und im Übrigen wird es hier gerne gesehen, wenn man sinnvoll zitiert, anstatt einfach das vorhergehende Posting komplett am Anfang oder Ende mitzuposten.

        Treibe Deine Späße bitte woanders und verhalte Dich hier ernsthaft, sonst bekommst Du keine Hilfe!

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. mh, das was im Quellcode ankomm sind 1222 zeilen, eventuell würde das hier den Ramen sprängen deshalb such ich mal die betroffene Stelle heraus:

          <script type="text/javascript">
          <!--
          var out = "Und wiedereinmal der Text";

          var lettercounter = 0;
          var tmp = out.split('');
          var end = tmp.length;

          document.write('<center><table border="0" cellpadding="0" cellspacing="0"><tr border="0"><td border="0"></td><td align="right" valign="bottom" border="0"><img src="templates/skin/linieoben.png"></td><td align="left" valign="top" border="0" rowspan="2"><img src="templates/skin/linierechts2.png" valign="top"></td></tr><tr border="0"><td border="0" align="right" valign="bottom" rowspan="2"><img src="templates/skin/linielinks2.png"></td><td border="0" valign="top"><table border="0" cellpadding="0" cellspacing="0"><tr border="0"><td width="350" height="80" valign="top"><div id="characounter_output" style="font-family: Georgia; font-size:10pt; font-style: italic;" valign="top" align="justify"></div></td></tr></table></td></tr><tr><td align="left" valign="top"><img src="templates/skin/linieunten.png"></td><td></td></tr></table></center>');

          function characounter()
          {
          if( lettercounter < end )
          {
          document.getElementById("characounter_output").innerHTML += tmp[lettercounter];
          lettercounter++;
          }

          }
          setInterval("characounter()", 55);
          //-->
          </script>

          Im enddefeckt ist es nun wieder das Gleiche, nur ohne backslashes :/ und wie gesagt der complette quellcode würde den Ramen defenitiv sprengen ._.

          1. Lieber Harlekin,

            mh, das was im Quellcode ankomm sind 1222 zeilen, eventuell würde das hier den Ramen sprängen

            dann poste doch einen Link zu der Seite!

            deshalb such ich mal die betroffene Stelle heraus:

            Das ist gut. Dann schauen wir uns den Ausschnitt einmal an.

            <script type="text/javascript">
            <!--
            var out = "Und wiedereinmal der Text";

            Was sollen die HTML-Kommentare hier? Wir sind doch jetzt im JavaScript-Kontext und nicht mehr im HTML-Kontext. Wenn Du's absolut sauber machen willst, dann schreibe das so:

            <script type="text/javascript">//<![CDATA[

            var out = "Und wiedereinmal der Text";  
            ...  
            //
            ~~~`]]></script>`{:.language-html}  
              
            Im weiteren Verlauf definierst Du eine Hand voll globale Variablen ("out", "lettercounter", "tmp" und "end"), lässt eine unüberschaubare Quelltextverunreinigung ins Dokument schreiben (Deine document.write()-Anweisung) und definierst dann eine Funktion "characounter". Letztere soll dann alle 55 Millisekunden aufgerufen werden (setInterval(...)).  
              
            Warum der IE streikt, könnte ein Timing-Problem sein. Das document.write könnte dafür sorgen, dass der IE den Quelltext erst in echte HTML-Elemente im DOM-Baum umwandeln muss, was bekanntlich im IE einiges an Zeit kostet. Da kann es dann schon sein, dass characounter zu schnell aufgerufen werden soll, sodass er einen Schluckauf bekommt. Vielleicht hilft ja eine zeitverzögerte Zündung? Ich komme gleich darauf zurück.  
              
            
            > var tmp = out.split('');  
            > var end = tmp.length;  
              
            Die Variable "end" könnte man sich sparen, da "tmp" nie verändert wird, oder sehe ich das falsch?  
              
            Schauen wir einmal in die Quelltextverunreinigung:  
              
            
            > document.write('<center><table border="0"  
            
            ... (das ist ja höchst gruselig!!)  
            
            > <div id="characounter\_output" [...] align="justify"\></div>  
              
            Hoppla! Da steht ein Backslash! Sorgt der vielleicht zusätzlich für Störungen? Besser gleich beseitigen, er ist einfach ein Syntaxfehler.  
              
            
            > function characounter()  
            > {  
            > 	if( lettercounter < end )  
              
            Wie oben bereits angemerkt ist end ebensogut als `tmp.length`{:.language-javascript} notierbar.  
              
            
            > 		document.getElementById("characounter\_output").innerHTML += tmp[lettercounter];  
              
            Schön ist das zwar nicht, tut aber seinen Dienst.  
              
            
            > setInterval("characounter()", 55);  
              
            So. Hier vermute ich ein Timing-Problem im IE. Erstens kann man diese Zeile kürzer notieren, nämlich "`setInterval(characounter, 55);`{:.language-javascript}", und zweitens soll diese Anweisung ja zeitverzögert erfolgen. Dazu notiert man einfach dieses:  
              
            `setTimeout(function () { setInterval(characounter, 55); }, 1000);`{:.language-javascript}  
              
            
            > Im enddefeckt ist es nun wieder das Gleiche, nur ohne backslashes :/  
              
            Das war nicht sicher. Im weiteren Verlauf Deines Scripts hätte ja noch etwas enthalten sein können, das diesen Code verändert. Das kann man nicht wissen, wenn man den gesamten Code nicht kennt.  
              
            
            > und wie gesagt der complette quellcode würde den Ramen defenitiv sprengen .\_.  
              
            Dafür kann man Links setzen.  
              
            Ob meine Lösung Dein Problem behebt, kann ich nicht versprechen. Besseren Überblick bekommst Du aber gleich, wenn Du das <http://de.selfhtml.org/javascript/intro.htm#javascriptdateien@title=JavaScript in eine externe Datei auslagerst>.  
              
            Liebe Grüße,  
              
            Felix Riesterer.
            
            -- 
            ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
            
            1. huhu, erstmal vielen Dank, es scheint tatsächlich funktioniert zu haben mit der Verzögerung. genau kann ichs allerdings noch nciht sagen. Bislang tauchte der fehler noch nicht auf bei meinen Test-Aktualisierungen^^ Aber genaueres lässt sich nur mit der Zeit sagen.

              Das mit dem in eine Extra datei auslagern ist bereits so, zwar nicht in einer .js datei sondern in eine .php datei (functionssammlung) aber naja. :)

              *zwischen dem Tippen immer mal wieder aktualisier und feststell dass es wirklih zu funktionieren scheint*

              Das gruselige ist tatschlich so .. zum einen die Tabellen-verschachtelungen, als auch alle Border mit 0 zu kennzeichnen, das hab  ich mir angewöhnt seitdem der FF bei mir sonderbarer weise wenn ich es nicht tat einen unsichtbaren border von 1 px in die tabellen gehauen hat (besonders auffällig, wenn man versucht Bild-Teile passend und natlos zusammen zu fügen) xDdahe rhab ich es mir angewöhnt beim schreiben sicherheitshalber das border=0 an zu hängen.

              Auf jedenfall war es eine sehr große Hilfe dafür möcht ich mich bedanken. :) hätte den Fehler ansonsten wohl nie gefunden. (obs nun am Timing-Problem lag der am Backslash keine ahnung aber an einem von beidem wirds wohl gelegen haben x) und ich hab wieder was dazu gelernt, und zwar dass man solche funktionen zeitverzögert starten lässt xD

              öhm ja, Danke xD

              ps: zum Link posten noch: EInen Link konnte ich leider nicht Posten, da man sich hätte einloggen müssen um an diese stelle kommen zu können, (Auf die idee die Funkton auf der Index auf zu rufen kam ich erst eben xD)

              also in dem Sinne, ich wünsch noch einen schönen Abend. :)

              1. Om nah hoo pez nyeetz, Harlekin!

                Das gruselige ist tatschlich so .. zum einen die Tabellen-verschachtelungen, als auch alle Border mit 0 zu kennzeichnen, das hab  ich mir angewöhnt seitdem der FF bei mir sonderbarer weise wenn ich es nicht tat einen unsichtbaren border von 1 px in die tabellen gehauen hat

                Du möchtest keine Tabellen zu Layout-Zwecken missbrauchen.

                (besonders auffällig, wenn man versucht Bild-Teile passend und natlos zusammen zu fügen)

                Welche Gründe könnte es denn dafür geben?

                Matthias

                --
                http://www.billiger-im-urlaub.de/kreis_sw.gif
                1. Du möchtest keine Tabellen zu Layout-Zwecken missbrauchen.

                  möchte ich nicht? ob tabellen-schachteln oder Div-suppen ist eig. auch latte xP

                  (besonders auffällig, wenn man versucht Bild-Teile passend und natlos zusammen zu fügen)

                  Welche Gründe könnte es denn dafür geben?

                  gute Frage, aber nachdem ich sie extra für den FF mit border=0 maskiert hatte, gings. klar mit Css hätte man es vesenlich eleganter regeln können aber das ist momentan noch die Beta codeoptimierung kommt zum schluss erstmal muss alles laufen xD

                  1. Moin,

                    Du möchtest keine Tabellen zu Layout-Zwecken missbrauchen.

                    möchte ich nicht? ob tabellen-schachteln oder Div-suppen ist eig. auch latte xP

                    Allerdings. Beides Quatsch. :D

                    gute Frage, aber nachdem ich sie extra für den FF mit border=0 maskiert hatte, gings. klar mit Css hätte man es vesenlich eleganter regeln können aber das ist momentan noch die Beta codeoptimierung kommt zum schluss erstmal muss alles laufen xD

                    Ich möchte nicht derjenige sein, der sowas in normales HTML/CSS umwandelt. Nervt und dauert lange...

                    Gruß,
                    Take

                  2. Om nah hoo pez nyeetz, Harlekin!

                    möchte ich nicht? ob tabellen-schachteln oder Div-suppen ist eig. auch latte xP

                    Du möchtest sowohl das Eine als auch das Andere vermeiden.

                    gute Frage, aber nachdem ich sie extra für den FF mit border=0 maskiert hatte, gings. klar mit Css hätte man es vesenlich eleganter regeln können aber das ist momentan noch die Beta codeoptimierung kommt zum schluss erstmal muss alles laufen xD

                    An einem versauten Code kann man nichts optimieren, zudem: Was man nicht gleich macht, macht man nie.

                    Matthias

                    --
                    http://www.billiger-im-urlaub.de/kreis_sw.gif