Est-il possible de programmer automatiquement JavaScript SyntaxErrors?

Je ne pense pas que cela soit faisable, mais je voulais le jeter dans la communauté pour confirmer mes soupçons.

Disons que vous écrivez un programme dans une autre langue comme Python, PHP ou ASP. Ce programme est destiné à créer un autre programme écrit en JavaScript. Cependant, le premier programme n'est malheureusement pas à l'abri des erreurs. Donc, de temps en temps, le programme qui crée le programme JavaScript fait des trucs géniaux et produit une erreur de syntaxe dans la source JavaScript. Maintenant, un utilisateur va et charge le programme et il s'arrête essentiellement, car le navigateur Web qui l'exécute ne peut pas analyser correctement le JavaScript. Cet utilisateur ne sera probablement pas heureux. Je ne le ferais pas.

Cela m'amène à ma question. Est-il possible d'écrire un gestionnaire d'erreur qui prendrait ce genre de problèmes de syntaxe permettant à l'application de basculer avec succès?

Voici un exemple:

<html> <head> <script type="text/javascript" charset="utf-8"> window.onerror = errorHandler; function errorHandler(a,b,c) { alert('horray! No wait, Booo!'); } vara jfs; </script> </head> <body> Can this be done? </body> </html> 

ou

 <html> <head> <script type="text/javascript" charset="utf-8"> try { vara jfs; } catch (e) { alert('horray! No wait, Booo!'); } </script> </head> <body> Can this be done? </body> </html> 

Généralement, un langage de programmation est analysé, et si cela réussit éventuellement compilé sur une autre forme, et si cela réussit puis interprété / exécuté sur le matériel ou un vm. Tout simplement parce que le code passe une phase, ne signifie pas que c'est un code valide.

Vous demandez si le code se déroule dans la dernière phase, peut être conscient des problèmes rencontrés dans la première partie et y faire face.

Certaines langues offrent divers crochets dans son propre mécanisme d'analyse et de compilation. Comme l'a mentionné Cheeso, eval est la manière de javascript d'entrer dans ce mécanisme.

Plutôt que d'envelopper tous vos scripts dans les chaînes, il serait plus agréable de les laisser dans les fichiers javascript et de les charger dans votre programme principal avec le javascript suivant (ou similaire).

  function load(file){ var client = new XMLHttpRequest(); client.open("GET", file, false); client.send(null); return client.responseText; } function include(file){ try { eval(load(file)); } catch (e) { alert("problem with file " + file); } } 

Google a publié son ensemble d'outils de fermeture qui comprend un compilateur JavaScript et un minimiseur. Je ne l'ai pas utilisé personnellement, mais j'ai entendu beaucoup de choses intéressantes. En outre, il vous aide à localiser les problèmes de compatibilité du navigateur.

Je ne pense pas que cela vous aidera à effectuer des analyses en temps réel, mais pourrait encore être un outil précieux.

Si vous êtes à l'aise avec l'exposition de sécurité, vous pouvez appeler eval() sur le code en question pour détecter les erreurs de syntaxe.

 function say(x) { ... emit message in some way.... } var scriptlets = [ "foof1 = function(a) {if (a == 7) { return \"A-OK\"; } } ", "foof2 = function (a) {if argle bargle seventy 7, then this isn't going to work}" ]; function verifyScriptlet(n) { var s = scriptlets[n]; try { var x = eval(s); say("verified #"+ n +", result: " + (typeof x)); } catch (exc1) { say("Exception while verifying #"+ n +": " + exc1.message); } } verifyScriptlet(0); verifyScriptlet(1);