J'ai une version expérimentale de wxWebConnect (en intégrant XULRunner dans wxWidgets) à https://github.com/jonmmorgan/wxwebconnect/. Il propose une méthodeRechercher et signaler les erreurs de compilation Javascript dans XULRunner en utilisant nsIScriptContext ou l'API SpiderMonkey
wxString wxWebControl::ExecuteScriptWithResult(const wxString& js_code)
qui exécute la chaîne Javascript utilisant nsIScriptContext :: EvaluateStringWithValue, convertit la valeur en une chaîne avec JS_ValueToString, puis retourne la chaîne. Cependant, j'ai trouvé avec l'implémentation actuelle que si la chaîne Javascript était syntaxiquement invalide (par exemple WebControl.ExecuteScriptWithResult ('{a: 2')) alors le programme se bloquerait en essayant de convertir le résultat en une chaîne. J'ai découvert le paramètre aIsUndefined, que je peux utiliser pour déterminer si l'exécution du script a réussi ou non et empêcher le crash. Cependant, cela ne m'aide pas à trouver ce qu'est l'erreur réelle, et je pense qu'il serait bon de signaler cela (comme Firebug me dit "SyntaxError: missing} dans l'instruction composée"). Autant que je puisse voir, même en utilisant quelque chose comme nsIScriptContext :: CompileScript, je vais juste me dire si la compilation a réussi ou non, et ne me donne pas un moyen d'obtenir l'erreur de syntaxe réelle.
Après http://chadaustin.me/2009/02/evaluating-javascript-in-an-embedded-xulrunnergecko-window/, j'ai essayé d'utiliser JS_GetPendingException, mais il ne semble jamais retourner vrai. Même lorsque je lance webcontrol.ExecuteScriptWithResult ("throw new Error ('a');") il n'a toujours pas d'exception en attente, mais dit que le résultat est indéfini.
Existe-t-il un autre moyen d'obtenir une erreur de compilation ou d'exécution à partir de nsIScriptContext ou de l'API SpiderMonkey? Une idée de pourquoi JS_GetPendingException ne semble pas faire cela?