Originariamente inviato da andr3a
non so quanto sia "old", non so quanti abbiano risolto ... mentre facevo una pagina di demo per un parser mi sono accorto del fastidiosissimo problema del tag PRE su IE.
Il sunto è questo:
codice:
<pre id="test"></pre>
<script type="text/javascript"><!--//
document.getElementById("test").innerHTML = "hello\nworld";
//--></script>
una cosa tanto banale quanto non scontata come risultato, la scritta diventa "hello world" in linea su tutti gli IE, dal 4 al 7.
Come risolvere ?
Leggendo in rete ho visto soprattutto tricks che sfruttano innerText, con altri tricks che sfruttano altri metodi per rendere innerText compatibile con Netscape o browsers che non lo supportano.
Il problema di innerText
se usate questo metodo una sola volta, andate tranquilli, se riusate innerText per 2 volte, andate (o meglio mandate) a benedire il pre, soprattutto se ci sono tags come strong, span o altro al suo interno, questi vengono mostrati.
... e quindi ? Come risolvere ?
Semplicemente sfruttando il fatto che IE è stupido, quindi senza scomodare tutti gli altri che si comportano come dei browsers, quali sono, a differenza di IE, che ha sempre avuto, e probabilmente sempre avrà, dei comportamenti anomali (leggi fa schifo).
Prendere in giro IE ? ... basta outerHTML
codice:
<pre id="test"></pre>
<script type="text/javascript"><!--//
function ie() {
var browser = navigator.userAgent.toUpperCase();
return (browser.indexOf("MSIE") >= 0 && browser.indexOf("OPERA") < 0);
};
if(!ie())
document.getElementById("test").innerHTML = "hello\nworld";
else
document.getElementById("test").outerHTML = "<pre id=\"test\">hello\nworld</pre>";
//--></script>
Facile ?