dave: CSS-Expressions im IE7

Hi,

<!doctype html>  
<html>  
<head><title></title>  
<style type="text/css">  
body {  
	background-color: expression( (new Function('elem', '\  
		console.log("eval");\  
		elem.innerHTML = "<span class=before>»</span>" + elem.innerHTML;\  
		elem.style.backgroundColor = "#FFFFFF";\  
	'))(this) );  
}  
</style>  
</head>  
<body>  
Foo  
</body>  
</html>

Warum führt mein IE9 in der IE7-Kompatibilitätsansicht den Code öfter als einmal aus?
Würde das ein echter IE7 nicht machen oder habe ich einen Fehler im Skript?

~dave

  1. Warum führt mein IE9 in der IE7-Kompatibilitätsansicht den Code öfter als einmal aus?
    Würde das ein echter IE7 nicht machen oder habe ich einen Fehler im Skript?

    Ein echter IE7 führt sie auch immer wieder aus.
    Nimm mal das console.log heraus. IE7 kennt kein console-Objekt. Das führt zu einer Exception und diese Exceptoin führt dazu, dass die Expression immer wieder ausgeführt wird.

    Mathias

    1. Hi,

      Nimm mal das console.log heraus. IE7 kennt kein console-Objekt.

      IE9 in der IE7-Kompatibiltätsansicht schon.

      Das führt zu einer Exception und diese Exceptoin führt dazu, dass die Expression immer wieder ausgeführt wird.

      Funktionierts ohne im IE7?

      Ich habs jetzt so gelöst:

      background-color: expression( (new Function('elem', '\  
      	if(!elem.before){\  
      		elem.innerHTML = "<span class=before>»</span>" + elem.innerHTML;\  
      		elem.style.backgroundColor = "#FFFFFF";\  
      		elem.before= true;\  
      	}\  
      '))(this) );
      
      1. Nimm mal das console.log heraus. IE7 kennt kein console-Objekt.

        IE9 in der IE7-Kompatibiltätsansicht schon.

        Teste mit dem IE7, wenn dich IE7 interessiert.

        Das führt zu einer Exception und diese Exceptoin führt dazu, dass die Expression immer wieder ausgeführt wird.

        Funktionierts ohne im IE7?

        Ja. Kannst du das nicht selbst ausprobieren? IE9 im IE7-Modus ist wahrlich keine verlässliche Quelle. Wenn IE9 nicht in der Lage ist, die Exception anzuzeigen, die im IE7 auftritt, dann taugt der Test nichts. Installiere dir z.b. Virtual PC mit einem IE7-Image.

        Ich habs jetzt so gelöst:

        background-color: expression( (new Function('elem', '\ if(!elem.before){\ elem.innerHTML = "<span class=before>»</span>" + elem.innerHTML;\ elem.style.backgroundColor = "#FFFFFF";\ elem.before= true;\ }\ '))(this) );

        Das ist aber unnötig. Wenn die Zuweisung an backgroundColor funktioniert, so wird die Expression nicht mehrfach ausgeführt. Ein weiterer Flag ist nicht nötig.

        Mathias