2010-09-23 6 views
0

Je cours du JavaScript via eval (je sais, tire-moi), qui énumère fondamentalement toutes les propriétés sur l'objet de document. Mon problème est que pendant qu'il fonctionne dans Firebug, il lance une exception non implémentée dans Firefox, lorsqu'il est exécuté à partir d'un script.Intermittent JavaScript Issue

Link to JavaScript script, the exception thrown, and the firebug command working.

Toutes les suggestions quant à ce qui se passe ici? Pour l'anecdote, ceci est fait sur Firefox 3.6.10 sous Ubuntu 10.04 64-bit, et chrome n'a pas ce problème.

+0

Pourquoi avez-vous besoin d'utiliser eval à nouveau? –

+0

Un eval dans un eval, j'espère que vous avez une clôture de raptor. – MooGoo

+0

Si seulement JavaScript avait une instruction goto que je pourrais lancer ... – Michael

Répondre

2

L'erreur est ici:

console.log(result); 

supprimer cette ligne et tout devrait bien se passer.

L'objet console est un objet Firebug (se réfère à la console Firebug). Safari/Chrome arrive aussi à implémenter un objet console (se réfère à la console Webkit js). Firefox, en effet les autres navigateurs n'ont pas d'objet console. Donc ça jette une erreur.

BTW: Comme d'habitude, les évaluations sont complètement inutiles. Ce code est exactement équivalent:

for (key in document) { 
    result[i] = typeof document[key]; 
    result[i+1]="document."+key; 
    i+=2; 
} 

Si vous insistez pour appeler request puis utilisez comme référence:

var request = window.document; 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

Si vous insistez sur le passage des noms d'objet par chaîne, pour des raisons de santé mentale de eval d'une manière moins déroutante:

var string = "window.document"; 
eval("var request ="+string); 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

bien que je ne ferais pas même que (parfois il est nécessaire, mais que très rarement).

+0

L'eval est nécessaire, car le nom de l'objet est passé par string, et il n'y a aucun moyen de le changer. Je vais probablement passer à votre dernière recommandation cependant. Mais cela ne résout pas le vrai problème, comme si vous regardiez l'exception, son échec sur la ligne 53 de test.js qui est la ligne eval, pas la ligne console.log. – Michael

+0

Les numéros de ligne pour les messages d'erreur dans les appels eval() sur Firefox sont incorrects. – johnjbarton

+0

Vous pouvez désactiver le panneau Console Firebug (mini-menu sur l'onglet du panneau). Puis rechargez et si le problème est window.console il se produira. Aussi, si vous avez une chaîne 'request' vous pouvez utiliser pour (var key dans la fenêtre [request]). – johnjbarton