Struppi: Forum JS

Gerade hat mich ein Thread auf die Idee gebracht mit einem eigenen JS die Probleme mit der Darstellung im IE 4 zu beseitigen.

Dummerweise benutzt das Forums eigene Skript try .. catch was bei mir immer einen Fehler erzeugt (sehr unangenehm mit einem Popup das man erst wegklicken muss)

Da wir ja schon festgestellt hatten dass das try sowieso überflüssig ist, könnte man das nicht wegmachen? Oder alternative das laden des Forums Skriptes per Usereinstellung verhindern? Da es bei mir sowieso nicht läuft.

Struppi.

  1. Hallo Struppi.

    Dummerweise benutzt das Forums eigene Skript try .. catch was bei mir immer einen Fehler erzeugt (sehr unangenehm mit einem Popup das man erst wegklicken muss)

    Wie sieht dein Skript aus und was soll es bewirken?

    Einen schönen Freitag noch.

    Gruß, Ashura

    --
    Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
    Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
    [Deshalb frei! - Argumente pro freie Software]
    1. Dummerweise benutzt das Forums eigene Skript try .. catch was bei mir immer einen Fehler erzeugt (sehr unangenehm mit einem Popup das man erst wegklicken muss)

      Wie sieht dein Skript aus und was soll es bewirken?

      Es soll die doppelten Klassen eleminieren "author whitelist" bewirkt im IE 4 das der Bereich gar keine Formatierung mehr hat

      aber ich hab das gerade ausprobiert und es ist völlig unmöglich. Meine Forumseite mit Filter und ausgeblendeten Threads hat über 8000 Spans, das dauerte fast 2 Minuten bis das Skript durchgelaufen ist und ich muss jedesmal das Fehlerfenster wegklicken.

      Ich lass es lieber und hab JS wieder ausgeschaltet.

      so sah das Skript aus

      window.onload = function()  
      {  
          if(!document.all) return ;  
        
          var s = document.all.tags('span');  
          // alert(s.length);  
          for(var i = 0; i < s.length; i++)  
          {  
               if(s[i].className.indexOf("whitelist") != -1)  
               {  
                    s[i].className = "whitelist";  
                    s[i].style.fontWeight = 'bold'  
               }  
          }  
        
      }
      

      Struppi.

      1. Hallo Struppi.

        Es soll die doppelten Klassen eleminieren "author whitelist" bewirkt im IE 4 das der Bereich gar keine Formatierung mehr hat

        Warum verzichtest du nicht einfach auf die Whitelist, wenn du schon keinen moderneren Browser installieren (möchtest|kannst)?

        aber ich hab das gerade ausprobiert und es ist völlig unmöglich. Meine Forumseite mit Filter und ausgeblendeten Threads hat über 8000 Spans, das dauerte fast 2 Minuten bis das Skript durchgelaufen ist und ich muss jedesmal das Fehlerfenster wegklicken.

        Richtig, die gesamte Forenseite zu durchlaufen ist in keinem Falle performant.

        Ich lass es lieber und hab JS wieder ausgeschaltet.

        so sah das Skript aus

        window.onload = function()

        {
            if(!document.all) return ;

        var s = document.all.tags('span');
            // alert(s.length);
            for(var i = 0; i < s.length; i++)
            {
                 if(s[i].className.indexOf("whitelist") != -1)
                 {
                      s[i].className = "whitelist";
                      s[i].style.fontWeight = 'bold'
                 }
            }

        }

          
        Schon versucht, die [/forum.js](/forum.js) aus dem Dokumentenbaum zu entfernen? (Soweit ich das überschaue sind darin keine funktionsrelevanten Funktionen enthalten, was aber von deinen Einstellungen abhängt.)  
          
          
        Einen schönen Freitag noch.  
          
        Gruß, Ashura  
        
        -- 
        Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|  
        [30 Days to becoming an Opera8 Lover](http://operalover.tntluoma.com/8/) -- [Day 21: Toolbars](http://operalover.tntluoma.com/8/day_21_toolbars)  
        Meine Browser: [Opera 8.02](http://my.opera.com/noctus/affiliate/download/) | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0  
        [\[Deshalb frei! - Argumente pro freie Software\]](http://deshalbfrei.org/)
        
        1. Es soll die doppelten Klassen eleminieren "author whitelist" bewirkt im IE 4 das der Bereich gar keine Formatierung mehr hat

          Warum verzichtest du nicht einfach auf die Whitelist, wenn du schon keinen moderneren Browser installieren (möchtest|kannst)?

          Ich sitze hier an einem Ort mit einem P100, zu Hause hab ich den neusten Firefox und vor dem letzten Forumsupdate war alles perfekt, keine Fehlermeldung und alle Einstellungen wurden angezeigt.

          Schon versucht, die /forum.js aus dem Dokumentenbaum zu entfernen? (Soweit ich das überschaue sind darin keine funktionsrelevanten Funktionen enthalten, was aber von deinen Einstellungen abhängt.)

          Hab ich auch chon dran gedacht, nur das Problem ist das Skript wird vorher eingebunden, bevor ich mit einem eigenen überhaupt was machen kann.

          Struppi.

  2. Hallo,

    Gerade hat mich ein Thread auf die Idee gebracht mit einem eigenen JS die Probleme mit der Darstellung im IE 4 zu beseitigen.

    Das sollte am besten Christian Kruse in der offiziellen CForum-Version machen. Theoretisch haben wir hier zwar eine eigene Installation, praktisch werden bei den Updates aber solche Dateien übernommen, also müssten wir (Christian Seiler) in dem Punkt ein eigenständiges Script pflegen.

    Da wir ja schon festgestellt hatten dass das try sowieso überflüssig ist, könnte man das nicht wegmachen?

    Wieso war es noch mal üerflüssig? Der Thread von damals wurde wohl nicht archiviert.
    Ist das new ActiveXObject("Msxml2.XMLHTTP") unnötig, weil new ActiveXObject("Microsoft.XMLHTTP") auf jedem IE ab 5 funktioniert (siehe)?

    Mathias

    1. Das sollte am besten Christian Kruse in der offiziellen CForum-Version machen. Theoretisch haben wir hier zwar eine eigene Installation, praktisch werden bei den Updates aber solche Dateien übernommen, also müssten wir (Christian Seiler) in dem Punkt ein eigenständiges Script pflegen.

      Schrecklicher Gedanke, sowas hasse ich auch.

      Da wir ja schon festgestellt hatten dass das try sowieso überflüssig ist, könnte man das nicht wegmachen?

      Wieso war es noch mal üerflüssig? Der Thread von damals wurde wohl nicht archiviert.

      Ich hatte nur diesen Abschnitt in Erinnerung:
        try {
          wiki_window = window.open(wiki_uri + val,'wiki','');
        }
        catch(e) {
          location.href = wiki_uri + val;
        }

      Wo Andreas (MudGuard) - glaub ich - gefragt hatte ob open überhaupt einen Fehler wirft.

      Ist das new ActiveXObject("Msxml2.XMLHTTP") unnötig, weil new ActiveXObject("Microsoft.XMLHTTP") auf jedem IE ab 5 funktioniert (siehe)?

      Wobei ich mich in dem Falle Frage warum try ... catch?

      In dem Falle sollte doch eigentlich eine normale Prüfung ob das Objekt vorhanden ist und erzeugt werden kann genügen. Aber ich hab damit noch ncht soviel zu tun gehabt um das beurteilen zu können.

      Struppi.

      1. hi,

        Wobei ich mich in dem Falle Frage warum try ... catch?

        In dem Falle sollte doch eigentlich eine normale Prüfung ob das Objekt vorhanden ist und erzeugt werden kann genügen.

        Nein, ich vermute nicht.

        Wenn du dir den Code mal ansiehst:

        try {
          xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
          try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

        Es gibt dummerweise zwei verschiedene Versionen von Microsofts Realisierung dieser JS-XML-Schnittstelle.
        Da diese aber über ein Active-X-Object initialisiert werden, kannst du mit JS hier m.E. höchstens abfragen, ob ActiveXObject existiert.
        Was dieses dann aber macht, in Abhängigkeit der Existenz von Msxml2.XMLHTTP bzw. Microsoft.XMLHTTP, leigt vermutlich außerhalb des Einflussbereiches von JS, bzw. eine vernünftige Schnittstelle zum Abfangen von Fehlern (dass das ActiveXObject false zurückgibt oder so) scheint da nicht vorhanden zu sein.

        Was ich allerdings nicht verstehe: Das darüber stehende

        /*@cc_on @*/
        /*@if (@_jscript_version >= 5)
        // JScript gives us Conditional compilation, we can cope with old IE versions.
        // and security blocked creation of the objects.

        sollte doch wohl eigentlich verhindern, dass ein IE, der nicht mindestens JScript V1.5 "besitzt", den folgenden Code überhaupt beachtet.
        Hat der IE 4 schon JScript V1.5? Oder, eher wahrscheinlich, kennt seine viel niedrigere Version conditional compilation noch nicht?

        Vielleicht könnte man darüber nachdenken, die forum.js vor diesem Versuch, das XML-Request-Objekt zu initialisieren, per window.onerror false zurückgeben zu lassen, um die Fehlermeldung zu unterdrücken? Kann man dann ja nach dieser Anweisung wieder mit window.onerror = ""; auf normal stellen.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Was dieses dann aber macht, in Abhängigkeit der Existenz von Msxml2.XMLHTTP bzw. Microsoft.XMLHTTP, leigt vermutlich außerhalb des Einflussbereiches von JS, bzw. eine vernünftige Schnittstelle zum Abfangen von Fehlern (dass das ActiveXObject false zurückgibt oder so) scheint da nicht vorhanden zu sein.

          Stimmt, ist eine Möglichkeit.

          Was ich allerdings nicht verstehe: Das darüber stehende

          /*@cc_on @*/
          /*@if (@_jscript_version >= 5)
          // JScript gives us Conditional compilation, we can cope with old IE versions.
          // and security blocked creation of the objects.

          sollte doch wohl eigentlich verhindern, dass ein IE, der nicht mindestens JScript V1.5 "besitzt", den folgenden Code überhaupt beachtet.
          Hat der IE 4 schon JScript V1.5? Oder, eher wahrscheinlich, kennt seine viel niedrigere Version conditional compilation noch nicht?

          Stimmt auch, ich hab mal die Fehlermeldung genauer angeschaut und die kommt nicht aus diesen Zeilen sondern von der anderen:
            try { <--- Das ist die Fehlerzeile
              wiki_window = window.open(wiki_uri + val,'wiki','');
            }
            catch(e) {
              location.href = wiki_uri + val;
            }

          Vielleicht könnte man darüber nachdenken, die forum.js vor diesem Versuch, das XML-Request-Objekt zu initialisieren, per window.onerror false zurückgeben zu lassen, um die Fehlermeldung zu unterdrücken? Kann man dann ja nach dieser Anweisung wieder mit window.onerror = ""; auf normal stellen.

          Schöner Versuch, klappt aber nicht (Fehlermledung kommt trotzdem), da die Fehlermeldung zu früh kommt.

          Struppi.

          1. hi,

            Schöner Versuch, klappt aber nicht (Fehlermledung kommt trotzdem), da die Fehlermeldung zu früh kommt.

            Was genau bedeutet "zu früh" in diesem Falle?

            Ich meinte nicht, dass du das erst in deinem User-JS einbauen sollst, sondern dachte das schon als (Diskussions-)Vorschlag, es an der kritischen Stelle in der forum.js, die das Forum selbst dir liefert, einbinden zu lassen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Hallo,

          try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
          }
          catch (e) {
            try {
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

          Es gibt dummerweise zwei verschiedene Versionen von Microsofts Realisierung dieser JS-XML-Schnittstelle.

          Ja, siehe den genannen Link - es gibt nicht nur zwei, es gibt für jede MSXML-Version eine Version. »Microsoft.XMLHTTP« ist aber die Variante, die auf allen MSXML-Versionen laufen soll. In verschiedenen Ajax-Bibliotheken lese ich öfters davon, dass man immer die neueste Version verwenden soll. Daher prüfen viele Bibliotheken verschiedene (bspw.), andere prominente Tutorials benutzen nur die hiesige Konstruktion (1, 2). Aber sehr viele geben sich mit einem einfachen »Microsoft.XMLHTTP« zufrieden.

          Was ich allerdings nicht verstehe: Das darüber stehende

          /*@cc_on @*/
          /*@if (@_jscript_version >= 5)
          // JScript gives us Conditional compilation, we can cope with old IE versions.
          // and security blocked creation of the objects.

          sollte doch wohl eigentlich verhindern, dass ein IE, der nicht mindestens JScript V1.5 "besitzt", den folgenden Code überhaupt beachtet.

          Ja, danke euch für den Hinweis. Das try .. catch rund um window.open() war der Übeltäter, das try .. catch bei new ActiveXObject() halte ich zwar auch für unnötig, aber das ist nicht so wichtig.

          Mathias