Conditional Comments
Conditional Comments (kurz: CC; englisch für: bedingte Kommentare) sind Kontrollstrukturen in HTML-Dokumenten, die nur vom Microsoft Internet Explorer und Programmen aus der Microsoft-Office-Reihe (z. B. Microsoft Word) interpretiert werden. Sie bieten die Möglichkeit, je nach Programmversion eines HTML-Renderers, unterschiedliches HTML auszuführen. Ab dem Internet Explorer 10 wird diese Form der Browserweiche für standardkonforme HTML-Seiten nicht mehr unterstützt.[1]
HTML-Syntax
Die Verwendung erfolgt analog zu echten HTML-Kommentaren (<!-- Kommentar -->
):
<!--[if 'Bedingung']>
Anweisungen<![endif]-->
Der Internet Explorer prüft die formulierte Bedingung und interpretiert den Inhalt, wenn die Bedingung zutrifft. Es ist durch vorgegebene Vergleichsoperatoren und -werte möglich, unterschiedliche Versionen des Browsers anzusprechen. Andere User Agents interpretieren diese Struktur als syntaktisch korrekten Kommentar und ignorieren den Inhalt.
Bei der Verwendung des standardkonformen Modus entfällt im Internet Explorer ab Version 10 die Möglichkeit, Conditional Comments zu nutzen. Das Konstrukt wird dann ebenfalls nur als Kommentar behandelt.
Werte (Auswahl)
Wert | Funktion | Beispiel |
---|---|---|
! IE |
wenn kein Internet Explorer | <!--[if !IE]> |
IE |
wenn Internet Explorer | <!--[if IE]> |
IE 5.5 |
wenn Internet Explorer Version 5.5 | <!--[if IE 5.5]> |
IE 8 |
wenn Internet Explorer Version 8 | <!--[if IE 8]> |
mso |
wenn Microsoft Office | <!--[if mso]> |
mso 15 |
wenn Microsoft Office 2013 | <!--[if mso 15]> |
vml |
wenn VML unterstützt wird | <!--[if vml]> |
Wenn es nötig wird, können Bedingungen auch geklammert werden.
Operatoren
Operator | Funktion | Beispiel |
---|---|---|
! |
Nicht-Operator | <!--[if!(IE 6)]> (wenn nicht IE 6) |
lt |
Kleiner-als-Operator | <!--[if lt IE 6]> (wenn kleiner als IE 6) |
lte |
Kleiner-gleich-Operator | <!--[if lte IE 6]> (wenn kleiner als oder gleich IE 6) |
gt |
Größer-als-Operator | <!--[if gt IE 6]> (wenn größer IE 6) |
gte |
Größer-gleich-Operator | <!--[if gte IE 6]> (wenn größer als oder gleich IE 6) |
& |
Und-Operator | <!--[if mso &!vml]> (wenn Office-Programm ohne VML-Unterstützung) |
| |
Oder-Operator | <!--[if mso | ie]> (wenn Office-Programm oder IE) |
Umkehrung
Normalerweise verstecken bedingte Kommentare Anweisungen vor User-Agents, die diese nicht verstehen. Microsoft spricht hierbei von „downlevel-hidden“, also „vor älteren Browsern versteckten“, Kommentaren. Diese Wirkung lässt sich aber auch umkehren (sogenannte „downlevel-revealed“-Kommentare):
<![if lt IE 7]>
Anweisungen für IE vor Version 7 und andere Browser<![endif]>
Hierbei handelt es sich nicht mehr um einen HTML-Kommentar, sondern um syntaktisch fehlerhaftes und somit invalides Markup. Die betreffende Bedingung wird nur vom Internet Explorer ausgewertet. Andere Browser interpretieren die Zeichenfolgen <![if lt IE 7]>
und <![endif]>
als ungültige Tags und stellen nur den Inhalt dazwischen dar.
Syntaktisch korrekt und valide nach W3C ist folgende Syntax:
<!--[if lt IE 7]>-->
Anweisungen für IE vor Version 7<!--<![endif]-->
Um Code im Internet Explorer < 10 auszuführen und einen alternativen Code für andere Browser einzubinden, eignet sich die nachfolgende Variante. Da alternative Browser mit conditional comments nichts anfangen können, darf der Code für den alternativen Browser nicht innerhalb eines Kommentars stehen, sondern muss zwischen zwei Kommentaren stehen:
<!--[IF IE]>Dieser Inhalt wird vom Internet Explorer älter als Version 10 ausgeführt<![ENDIF]-->
<!--[IF !IE]>--> -->Dieser Inhalt wird von allen anderen Browsern ausgeführt<!-- <![ENDIF]-->
Bedeutung für Outlook 2007
Die Darstellung von E-Mails im HTML-Format unter Outlook 2007 wird nicht mehr von einer Komponente des Internet Explorers, sondern von Microsoft Word übernommen.[2] Zusätzlich sind aus Sicherheitsgründen verschiedene HTML-Features (wie Formulare oder Scripte) unter Outlook 2007 nicht verfügbar.[3] Die Darstellung von HTML-E-Mail kann mit bedingten Kommentaren für Outlook angepasst werden, um z. B. bei Newslettern eine Alternative zu einem Eingabeformular anzubieten.
<!--[if gte mso 12]>
Anweisungen für Office 2007 und größer<![endif]-->
JavaScript und JScript
Seit dem Internet Explorer 4 (JScript 3.0) gibt es einen ähnlichen Mechanismus für JavaScript. Der im IE verwendete JScript-Interpreter wertet folgende Syntax aus, die von anderen Interpretern nur als Kommentar erkannt wird. Microsoft nennt das Verhalten „bedingte Kompilierung“.[4]
<script type="text/javascript">
/*@cc_on @*/
/*@if (@_jscript_version >= 5.5)
// dieser Bereich ist für jscript-Interpreter >= v5.5 sichtbar
@else @*/
// dieser Bereich wird alternativ dazu ausgeführt
/*@end @*/
</script>
Diese Syntax ist in ähnlicher Form auch in den Sprachumfang von JScript .NET aufgenommen worden.[5]
Siehe auch
Weblinks
- Browserweiche für Internet Explorer mit Conditional Comments
- Über Conditional Comments im MSDN (englisch)
- Jens Meiert: Kritik an Conditional Comments (englisch)
Einzelnachweise
- HTML5 Parsing in IE10
- Outlook 2007 uses only Word as the e-mail editor. MSDN, Stand 3. April 2007.
- Word 2007 HTML and CSS Rendering Capabilities in Outlook 2007 (1/2) (2/2). MSDN, Stand August 2006.
- Conditional Compilation im microsoft.com/technet
- @cc_on-Anweisung bei MSDN