setTimeout en IE

Desgraciadamente teño que desenvolver solucións que funcionen no "incrible" navegador BastardIE (nótese o sarcasmo). Agora mesmo estou tentando facer unha animación en javascript e pensei que rematara ata que me din que non funciona.

En javascript é habitualfacer uso da sentenza setTimeout para chamar a unha función que cambie os estilos creando o efecto desexado. Eu a maiores tiña que pasar a dita función unha serie de parámetros da forma:

 

setTimeout(functionClousure, 500, param1, param2);

Resulta que explorer non colle os parámetros a maiores que se lle deben pasar como argumento da clausura (como fan os navegadores de verdade). Partindo da base que IE é un xoguete mal feito tiven que procurar en Google e atopar a solución:

// BastardIE feature
/*@cc_on
(function(f) {
window.setTimeout = f(window.setTimeout); // overwrites the global function!
window.setInterval = f(window.setInterval); // overwrites the global function!
})(function(f) {
return function(c, t) {
var a = [].slice.call(arguments, 2); // gathers the extra args
return f(function() {
c.apply(this, a); // passes them to your function
}, t);
};
});
@*/

Fonte: http://arguments.callee.info/2008/11/10/passing-arguments-to-settimeout-and-setinterval/

AVISO:

  • en navegadores que seguen os estándares non se atopará con este problema
  • se emprega Internet Explorer cambie de navegador (aquí)
  • se é unha persoa con cartos apadriñe un desenvolvedor de javascript (internet explorer fainos sufrir moito)
Última actualización 2012-08-15
3:08 AM (Europe/Madrid)
Data de creación 2009-06-17
11:04 AM (Europe/Madrid)
Fix window.setTimeout to work on IExplorer
javascript iebrowser