Questo ha a che fare con la compilazione condizionale, un'invenzione solo IE per la compilazione della compilazione JScript (nome IE per il loro sapore di ECMAScript) in base alle informazioni sul browser e sull'ambiente. La sintassi coinvolge il simbolo @
seguito da una stringa per creare una variabile, una direttiva o un'istruzione. In questo caso, la presenza di @TODO
direttamente dopo l'inizio di un commento provoca l'interpretazione del testo del commento come un'istruzione di compilazione condizionale, con @TODO
come variabile di compilazione condizionale (con valore NaN
: vedere http://msdn.microsoft.com/en-us/library/k0h7dyd7%28v=VS.80%29.aspx).
Le dichiarazioni di compilazione condizionale sono generalmente contenute nei commenti JavaScript: queste sono lì per impedire ad altri browser di tentare di interpretare il codice ma non sono in effetti necessari per attivare la compilazione condizionale. La documentazione MSDN è qui:
http://msdn.microsoft.com/en-us/library/ahx1z4fs%28v=VS.80%29.aspx
Questa funzione è abilitata solo per il codice che appare dopo la compilazione condizionale è attivata, che si ottiene con
/*@cc_on @*/
Pertanto se si può trovare questa linea e rimuovere allora il tuo //@TODO - report error
andrà bene così com'è. Tuttavia, parte del tuo codice potrebbe basarsi sulla compilazione condizionale, quindi questa potrebbe non essere un'opzione. Una soluzione è quella di inserire uno spazio tra l'inizio del commento (sia //
o /*
) e il @
simbolo:
// @TODO - report error
la documentazione di Microsoft non è sufficientemente chiaro per sapere perché questo funziona, dal momento che le variabili di compilazione condizionale lavorare anche al di fuori commenti:
// The following works in IE:
/*@cc_on @*/
var j = @_jscript_build;
alert(j);
quindi l'opzione più sicura sarebbe quella di evitare l'uso di @TODO
del tutto.
fonte
2010-06-22 09:37:46
Non succede sulla mia copia di IE8. –
T.J. Crowder: lo sarà se metti '/ * @ cc_on @ * /' sopra il codice. –
Ho avuto un pensiero ieri. Se questo flag è avviato da javascript e rimane attivo per l'ambito ENTIRE; questo significa che per una pagina di wordpress con dozzine di script di terze parti, uno script potrebbe iniziarlo e tutti gli script verrebbero risucchiati nello stesso comportamento .... wow. – David