CSS-Expressions im IE7
dave
- css
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
Hi,
Warum führt mein IE9 in der IE7-Kompatibilitätsansicht den Code öfter als einmal aus?
MfG ChrisB
Jetzt schau dir noch mal daves Code an und den Lösungsvorschlag auf der verlinkten Seite. Du wirst sehen, dave hat diesen schon berücksichtigt.
Mathias
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
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) );
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