katty: Ein Java soll NICHT vom IE8 ausgelesen werden

Hallo an die Experten,

wie geht das, wenn man auf seiner Website ein Javascript hat, dass nicht vom IE8 ausgeführt werden soll? Die Ausführung im IE9 und Firefox usw. soll aber fuktionieren.

Dieses Javascript ist im Header der Seite:

<script type="text/javascript">
$(document).ready(function(){
$('#page_effect').fadeIn(1500);
});
</script>

Beim IE8 funktioniert das Einblenden der Seite nicht, bzw. der Ladevorgang dauert bis zu 10 Sekunden. Im IE8 muss es aber auch nicht laufen. Deshalb möchte ich es dort einfach abschalten.

Habe viel gesucht aber nichts passendes gefunden, oder ich kapiers einfach nicht. Vielleicht kann mir jemand helfen. Vielen dank im voraus!

LG Kathrin

  1. @@katty:

    nuqneH

    Dass „Java“ keine Abkürzung für „JavaScript“ ist, weißt du?

    wie geht das, wenn man auf seiner Website ein Javascript hat, dass nicht vom IE8 ausgeführt werden soll? Die Ausführung im IE9 und Firefox usw. soll aber fuktionieren.

    Abfrage von document.documentMode (wenn du ältere IE < 8 auch noch ausschließen willst, auch document.compatMode). [T.J. Sebestyen]

    Beim IE8 funktioniert das Einblenden der Seite nicht, bzw. der Ladevorgang dauert bis zu 10 Sekunden.

    Vielleicht solltest du die Ursache dafür herausfinden?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hallo und vielen Dank für deine Antwort.

      Ja, das es nicht gleich ist weiss ich. Hier hat sich der Fehlerteufel eingeschlichen. Sorry.

      Ich bin nur eine Bastlerin, keine professionelle Webprogrammiererin. Ich weiss nur, dass dieses Javascript im IE8 - und auch drunter - nicht funktioniert. Das zur Ursache. Genau daher soll es nicht dort laufen. Wie gesagt, im IE9, Firefox, Opera, Safari und Chrome funktioniert es einwandfrei.

      Mein Problem ist, ich weiss einfach nicht wie und kann mit deiner Beschreibung, die sicher professionell ist, leider nichts anfangen, da ich es nicht verstehe. Ich habe zwar die Dokumentation gelesen und viel probiert, leider aber erfolglos.

      Was genau muss ich im Headbereich einfügen, damit es nicht im IE8 und darunter ausgelesen wird?

      Tut mir leid wenn ich solche sicher dämliche Fragen stelle, aber ich weiss es nicht anders.

      LG Kathrin

      1. @@katty:

        nuqneH

        Was genau muss ich im Headbereich einfügen, damit es nicht im IE8 und darunter ausgelesen wird?

        Im bereits verlinkten Artikel ist doch im Abschnitt „JavaScript“ aufgezeigt, wie’s geht.

        IE führt ab Version eine Eigenschaft document.documentMode ein, welche die Browserversion enthält.

        Wenn document.documentMode existiert und den Wert 8 enthält, soll das Script nicht ausgeführt werden.
        Wenn document.documentMode existiert und einen höheren Wert als 8 enthält, soll das Script ausgeführt werden.
        Wenn document.documentMode nicht existiert, soll das Script ausgeführt werden.

        Also:

        if (!document.documentMode || (document.documentMode && document.documentMode > 8))  
        {  
          $(document).ready(function ()  
          {  
            $('#page_effect').fadeIn(1500);  
          });  
        }
        

        Für IE 7 müsste man document.compatMode abfragen und da diese Eigenschaft auch anderen Browsern bekannt ist, zusätzlich auch window.navigator.appName, wie in dem Beispiel im Artikel gezeigt.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. @@Gunnar Bittersmann:

          nuqneH

          if (!document.documentMode || (document.documentMode && document.documentMode > 8))

          Das ist wohl unnötig lang.

          if (!document.documentMode || document.documentMode > 8)

          sollte es auch tun.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hallo Gunnar und alle Anderen,

            zunächst ganz ganz herzlichen Dank für eure tolle Hilfe! Ich habe mich nun nach dem Vatertag (und im nicht mehr Übernächtigtem Zustand) mit diesem Thema befasst und komme nun auch einigermaßen damit zurecht, dank der Links von Gunnar.

            Ich habe nun folgenden Code in den Header eingebaut:

            <script type="text/javascript">
            if (!document.documentMode || document.documentMode > 8)
            {
            $(document).ready(function ()
            {
            $('#page_effect').fadeIn(1500);
            });
            }
            </script>

            Jetzt funktioniert das Ganze mit allen Browsern, jedoch wird im IE8 gar nichts mehr angezeigt, ausser des Seiten-Background.

            Dies liegt sicher an folgendem Div, welches unter dem <body> an erster stelle kommt und die Javasript-Funktion des Einblenden für die Seite einleitet:

            <div id="page_effect" style="display:none">

            (hier steht dann der gesamte Inhalt der Seite)

            Und unter dem letzten Div der Seite steht dann das Div zum Schließen des ersten Div.

            Die Style-Anweisung "display:none", bzw. die gesamte ID, trägt dazu bei, dass im IE 8 nichts angezeigt wird, da diese sich ja auf das Javascript im Heder bezieht.

            Ich wollte euch nicht gleich wieder "nerven" ;-) und habe zunächst versucht mit mit einem CC (wie im Linkt von Gunnar beschrieben) im Body den Div-Container vom IE8 auslesen zu lassen. Das brachte jedoch keinen Erfolg.

            Jetzt stellt sich die Frage, wie weist man den IE8 an, diese ID zu ignorieren?

            LG, Kathrin

            1. Hallo Kathrin,

              sorry, ich rolle deine Zitatreihenfolge mal von hinten auf, weil das im Moment sinnvoller ist. :-)

              Jetzt funktioniert das Ganze mit allen Browsern, jedoch wird im IE8 gar nichts mehr angezeigt, ausser des Seiten-Background.

              Das ist kein Wunder, denn du setzt das div-Element mit display:none generell außer Gefecht, und den Code zum Wieder-Einblenden lässt du im IE8 nicht ausführen. Dasselbe Problem hättest du übrigens auch mit einem beliebigen anderen Browser, sobald Javascript mal deaktiviert ist.

              Besser wär's also, das div-Element generell sichtbar zu lassen, und nur dann unsichtbar zu machen, wenn auch der Code zum Einblenden ausgeführt wird.

              <div id="page_effect">

              Hier display:none entfernt ...

              <script type="text/javascript">

              if (!document.documentMode || document.documentMode > 8)

              {
              $(document).ready(function ()
              { $('#page_effect').style.display = "none";  // ergänzt!!
                $('#page_effect').fadeIn(1500);
              });
              }

              
              > </script>  
                
              Und hier per Javascript wieder eingesetzt - WENN das Script ausgeführt werden kann.  
                
              Ciao,  
               Martin  
              
              -- 
              Man sollte keinen Senf von sich geben, wenn man nicht auch das Würstchen dazu liefern kann.  
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              
              1. Hi Martin,

                vielen Dank für die superschnelle Antwort und für deine Hilfe!

                Hab's ausprobiert, genauso wie du es geschrieben hast. Leider funktioniert damit das Einblenden auf keinem Browser mehr. Im IE8 wird die Seite jetzt natürlich wieder angezeigt.

                LG Kathrin

                1. Hallo,

                  Hab's ausprobiert, genauso wie du es geschrieben hast. Leider funktioniert damit das Einblenden auf keinem Browser mehr.

                  bekommst du denn eine Fehlermeldung? Wenn ja, welche?
                  Vielleicht liegt es an meiner Unkenntnis von JQuery ...

                  Ciao,
                   Martin

                  --
                  Lieber mit Betty im Wald
                  als mit Waldi im Bett.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Hi Martin,

                    nein ich bekomme keine Fehlermeldung.

                    Wie gesagt, das Einblenden der Seite Funktioniert in keinem Browser.

                    Ich bin grade am schauen, auf der jQuery Seite, was ich noch machen kann.
                    Mit Gunnars Script funktioniert es ja. Nur beim IE8 wird die Seite gar nicht angezeigt.

                    Vielleicht sollte ich mich auch vom IE8 ganz verabschieden, denn es nutzen sehr viele sowieso Firefox und Co. In Hinsicht das XP bald ausläuft und die allermeisten Leute nun sowieso Windows-7 und IE9 haben. Zudem kommt bald ja auch der IE10.

                    Mit einem "no-script" wird beim IE8 und darunter einfach der Text ausgegeben, dass der Brwoser veraltet ist. Nicht grade die eleganteste Lösung, aber trotzdem sinnvoll.

                    Vielen Dank, Martin!

                    LG, Kathrin

              2. { $('#page_effect').style.display = "none";  // ergänzt!!

                jQuery-Objekte sind keine DOM-Elementobjekte selbst, sondern Listen von solchen. Das Listenobjekt stellt einem verschiedene Iteratoren als Methoden zur Verfügung, z.B. http://api.jquery.com/css zum Setzen von Inline-CSS-Eigenschaften.

                Mathias

            2. Hallo,

              ich würde das so lösen:
              http://jsfiddle.net/jwGkS/

              Es gibt zwei Klassen und entsprechend zwei CSS-Formatierungsregeln. Die eine Regel versteckt #page_effect, die andere zeigt es.

              Im JavaScript im <head> werden diese Klassen gesetzt. Wenn JavaScript aktiviert ist, bekommt das html-Element die Klasse »js«, d.h. #page_effect wird versteckt. Wenn allerdings opacity nicht unterstützt wird (IE 8 und kleiner), dann wird #page_effect über die Klasse »no-opacity« doch gezeigt.

              Wenn opacity unterstützt wird (IE 9 und andere Browser), so wird #page_effect mit fadeIn() eingeblendet, sobald die Seite geladen ist.

              Das deckt alle Fälle ab, soweit ich das sehe.
              Warum $.support.opacity eine sinnvollere Abfrage als document.documentMode ist, habe ich bereits geschrieben.

              Mathias

    2. wie geht das, wenn man auf seiner Website ein Javascript hat, dass nicht vom IE8 ausgeführt werden soll? Die Ausführung im IE9 und Firefox usw. soll aber fuktionieren.

      Abfrage von document.documentMode (wenn du ältere IE < 8 auch noch ausschließen willst, auch document.compatMode). [T.J. Sebestyen]

      documentMode dient nicht dazu, die IE-Browserversion herauszufinden, sondern den tatsächlich verwendeten Kompatibilitätsmodus. Beispielsweise kann IE 9 im IE-8-Modus laufen und gibt dann document.compatMode == '8' am. documentMode dient allein dazu, diesen Unterschied zu erkennen. Bekanntermaßen ist das Verhalten von IE-9-als-IE-8 ein bisschen anders als IE8-als-IE8. Daher würde ich, insbesondere was Animationen angeht, welche mit dem CSS-Alpha-Filter umgesetzt werden, nicht ohne entsprechende Tests IE-9-als-IE-8, IE-8-als-IE-8 und sämtliche kommende IEs-als-IE-8 in einen Topf werfen. compatMode ist keine sinnvolle Alternative zu klassischen navigator-Prüfungen. Die Verwendung von jQuery.browser und jQuery.browser.version wäre da schon sinnvoller.

      Mathias

  2. Hi,

    Dieses Javascript ist im Header der Seite:

    <script type="text/javascript">
    $(document).ready(function(){
    $('#page_effect').fadeIn(1500);
    });
    </script>

    Beim IE8 funktioniert das Einblenden der Seite nicht, bzw. der Ladevorgang dauert bis zu 10 Sekunden. Im IE8 muss es aber auch nicht laufen. Deshalb möchte ich es dort einfach abschalten.

    Ich hätte eigentlich gedacht, daß das mit Conditional Compilation möglich sein sollte - aber die IE-Version steht dort wohl nicht als Variable zur Verfügung ...
    Aber Conditional Comments rund um dieses Script-Element wären noch eine Möglichkeit, denn darin kann man die IE-Version abfragen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Lieber MudGuard,

      Ich hätte eigentlich gedacht, daß das mit Conditional Compilation möglich sein sollte - aber die IE-Version steht dort wohl nicht als Variable zur Verfügung ...

      oh, das tut sie sehr wohl!

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Ich hätte eigentlich gedacht, daß das mit Conditional Compilation möglich sein sollte - aber die IE-Version steht dort wohl nicht als Variable zur Verfügung ...

        oh, das tut sie sehr wohl!

        Nein. Das ist die JScript-Version.

        Mathias

        1. Lieber molily,

          oh, das tut sie sehr wohl!

          Nein. Das ist die JScript-Version.

          ich schließe immer von der JScript-Version auf die IE-Version. Aus Faulheit das genauer zu ergründen, kenne ich keinen Fall, in dem diese Vorgehensweise zu falschem Verhalten führen könnte.

          Liebe Grüße,

          Felix Riesterer.

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

            ich schließe immer von der JScript-Version auf die IE-Version.

            Wenn du diese Info nur verwendest, um JScript-spezifische Eigenheiten abzudecken, ist das sicher okay.
            Aber es ist nicht ganz richtig, denn die JScript-Engine kann unabhängig vom Rest des IE aktualisiert werden. Du könntest also von der JScript-Version auf einen "zu neuen" IE schließen. Ich gebe aber zu, dass dieser Fall eher konstruiert ist und in der Praxis seltenst auftreten dürfte.

            So long,
             Martin

            --
            Hannes würfelt abends immer, ob er den Abend mit seiner Frau zuhause verbringt oder in die Kneipe geht. Wenn er eine 6 würfelt, geht er in die Kneipe.
            Gestern musste er 37mal würfeln.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. ich schließe immer von der JScript-Version auf die IE-Version. Aus Faulheit das genauer zu ergründen, kenne ich keinen Fall, in dem diese Vorgehensweise zu falschem Verhalten führen könnte.

            Wieso sollte man das tun? In welchen Fällen?

            Mathias

            1. Lieber molily,

              ich schließe immer von der JScript-Version auf die IE-Version. Aus Faulheit das genauer zu ergründen, kenne ich keinen Fall, in dem diese Vorgehensweise zu falschem Verhalten führen könnte.

              Wieso sollte man das tun? In welchen Fällen?

              Du kannst Fragen stellen... Wieso sollte man *was* tun?

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. In welchen Fällen ist es nötig, IEs anhand der JScript-Version zu unterscheiden? Entweder man hat eine passende Feature-Abfrage - oder man nutzt navigator-Abfragen.

                Mathias

      2. Hi,

        Ich hätte eigentlich gedacht, daß das mit Conditional Compilation möglich sein sollte - aber die IE-Version steht dort wohl nicht als Variable zur Verfügung ...
        oh, das tut sie sehr wohl!

        Bei Conditional Comments ja, aber bei Conditional Compilation finde ich nur Dokumentation zu

        @_win32            True if running on a Win32 system.
        @_win16            True if running on a Win16 system.
        @_mac              True if running on an Apple Macintosh system.
        @_alpha            True if running on a DEC Alpha processor.
        @_x86              True if running on an Intel processor.
        @_mc680x0          True if running on a Motorola 680x0 processor.
        @_PowerPC          True if running on a Motorola PowerPC processor.
        @_jscript          Always true.
        @_jscript_build    Contains the build number of the JScript scripting engine.
        @_jscript_version  Contains the JScript version number in major.minor format.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Lieber MudGuard,

          @_jscript_version  Contains the JScript version number in major.minor format.

          und daraus kann man doch eine IE-Version ableiten, oder nicht?

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
          1. [latex]Mae  govannen![/latex]

            @_jscript_version  Contains the JScript version number in major.minor format.

            und daraus kann man doch eine IE-Version ableiten, oder nicht?

            Nicht. Ich habe lange Zeit einen echten IE6 mit JScript Version 5.7 auf meinem Rechner gehabt, wie willst du das anhand der Revision ohne Voodo von einem IE7 unterscheiden?

            Stur lächeln und winken, Männer!
            Kai

            --
            Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
            in Richtung "Mess up the Web".(suit)
            SelfHTML-Forum-Stylesheet
            1. Lieber Kai345,

              Ich habe lange Zeit einen echten IE6 mit JScript Version 5.7 auf meinem Rechner gehabt,

              wie das? Warum (oder bei welcher Gelegenheit) hast Du die JScript-Version aktualisiert?

              wie willst du das anhand der Revision ohne Voodo von einem IE7 unterscheiden?

              Will ich ja garnicht. ;-) Ich "vertraue" darauf, dass die jeweiligen IEs ihre mitgelieferte JScript-Version haben. Dass das in Deinem Fall nicht funktioniert (hätte), nehme ich als seltene Ausnahme gerne inkauf.

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. [latex]Mae  govannen![/latex]

                Ich habe lange Zeit einen echten IE6 mit JScript Version 5.7 auf meinem Rechner gehabt,

                wie das? Warum (oder bei welcher Gelegenheit) hast Du die JScript-Version aktualisiert?

                Windows Update

                wie willst du das anhand der Revision ohne Voodo von einem IE7 unterscheiden?

                Will ich ja garnicht. ;-) Ich "vertraue" darauf, dass die jeweiligen IEs ihre mitgelieferte JScript-Version haben. Dass das in Deinem Fall nicht funktioniert (hätte), nehme ich als seltene Ausnahme gerne inkauf.

                Das ist keine seltene Ausnahme, das dürfte Standardverhalten sein und kann jederzeit wieder passieren, wenn man das System aktuell hält.

                Stur lächeln und winken, Männer!
                Kai

                --
                Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                in Richtung "Mess up the Web".(suit)
                SelfHTML-Forum-Stylesheet
                1. [latex]Mae  govannen, Ingrid![/latex]

                  Das ist keine seltene Ausnahme, das dürfte Standardverhalten sein und kann jederzeit wieder passieren, wenn man das System aktuell hält.

                  Das ist übrigens schon lange bekannt ff

                  Stur lächeln und winken, Männer!
                  Kai

                  --
                  Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                  in Richtung "Mess up the Web".(suit)
                  SelfHTML-Forum-Stylesheet
  3. Hi,

    sieht so aus als ob du jQuery verwendest?

    Da gibts jQuery.browser um den Browser und Version rauszufinden.

    ~dave

    1. @@dave:

      nuqneH

      Da gibts jQuery.browser um den Browser und Version rauszufinden.

      “[…] read from navigator.userAgent.” Das hört sich gar nicht gut an.

      Sagen sie ja auch selbst: “We recommend against using this property; please try to use feature detection instead […]”

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Da gibts jQuery.browser um den Browser und Version rauszufinden.

        “[…] read from navigator.userAgent.” Das hört sich gar nicht gut an.

        Sinnvoller als documentMode - eine noch unbeteiligtere Eigenschaft - ist es allemal.

        Sagen sie ja auch selbst: “We recommend against using this property; please try to use feature detection instead […]”

        IE 9 implementiert opacity nativ. Damit kommen Fade-in-Animationen ohne proprietäre CSS-Filter und das Anschalten von hasLayout aus. Ich *vermute*, dass die Probleme daran liegen. Eine *mögliche* Alternative wäre daher: jQuery.support.opacity - Das ist ein Boolean-Flag, der die Unterstützung von opacity-Eigenschaft zurückgibt.

        Mathias