https://github.com/jonmmorgan/wxwebconnect/に実験的なバージョンのwxWebConnect(wxWidgetsにXULRunnerを埋め込む)があります。それは方法を提供します
wxString wxWebControl::ExecuteScriptWithResult(const wxString& js_code)
これは、nsIScriptContext :: EvaluateStringWithValueを使用してJavascript文字列を実行し、値をJS_ValueToStringを使用して文字列に変換してから、文字列を返します。
ただし、現在の実装では、Javascript文字列が構文的に無効な場合(WebControl.ExecuteScriptWithResult('{a:2')など)、結果を文字列に変換しようとするとプログラムがクラッシュすることがわかりました。スクリプトの実行が成功したかどうかを判断し、クラッシュを防ぐために使用できるaIsUndefinedパラメーターを発見しました。ただし、これは実際のエラーが何であるかを見つけるのに役立ちません。それを報告するのは良いことだと思います(Firebugが「SyntaxError:複合ステートメントに}がありません」と言っているように)。私が見る限り、nsIScriptContext :: ComputeScriptのようなものを使用しても、コンパイルが成功したかどうかを教えてくれるだけで、実際の構文エラーを取得する方法はありません。
http://chadaustin.me/2009/02/evaluating-javascript-in-an-embedded-xulrunnergecko-window/に従って、JS_GetPendingExceptionを使用してみましたが、trueが返されないようです。webcontrol.ExecuteScriptWithResult( "throw new Error('a');")を実行しても、保留中の例外はありませんが、結果は未定義であると表示されます。
nsIScriptContextまたはSpiderMonkeyAPIからコンパイルまたは実行エラーを取得する他の良い方法はありますか?JS_GetPendingExceptionがこれを行わないように見える理由はありますか?