У меня есть экспериментальная версия wxWebConnect (встраивание XULRunner в wxWidgets) в https://github.com/jonmmorgan/wxwebconnect/.. Он предлагает метод
wxString wxWebControl::ExecuteScriptWithResult(const wxString& js_code)
, который выполняет строку Javascript с использованием nsIScriptContext :: EvaluateStringWithValue, преобразует значениев строку с JS_ValueToString, а затем возвращает строку.
Однако в текущей реализации я обнаружил, что если строка Javascript синтаксически неверна (например, WebControl.ExecuteScriptWithResult ('{a: 2')), тогдапрограмма потерпит крах при попытке преобразовать результат в строку.Я обнаружил параметр aIsUndefined, который я могу использовать, чтобы определить, успешно ли выполнено выполнение скрипта, и предотвратить сбой.Тем не менее, это не помогает мне выяснить, в чем именно заключалась ошибка, и я думаю, что было бы хорошо сообщить об этом (как Firebug говорит мне «SyntaxError: missing} в составном операторе»).Насколько я могу видеть, даже использование чего-то вроде nsIScriptContext :: CompileScript просто скажет мне, была ли успешной компиляция, и не даст мне способа получить фактическую синтаксическую ошибку.
После http://chadaustin.me/2009/02/evaluating-javascript-in-an-embedded-xulrunnergecko-window/, Я пытался использовать JS_GetPendingException, но, похоже, он никогда не возвращает true.Даже когда я запускаю webcontrol.ExecuteScriptWithResult ("throw new Error ('a');"), у него все еще нет ожидающего исключения, но он говорит, что результат не определен.
Есть ли другой хороший способполучить ошибку компиляции или выполнения из nsIScriptContext или API-интерфейса SpiderMonkey?Любая идея, почему JS_GetPendingException, кажется, не делает этого?