我想抓住从javascript抛出的clr异常。在我试过的事情下面。
var registerScript = new Engine(c => c.AllowClr(typeof(Manager).Assembly ).CatchClrExceptions(ExceptionHandler(new Exception("Exception")) )).Execute("javascriptCode").GetValue("JavascriptFunction");
public static Predicate<Exception> ExceptionHandler(Exception ex)
{
throw new Exception(ex.Message);
}
但我希望我喜欢这个,
var registerScript = new Engine(c => c.AllowClr(typeof(Manager).Assembly ).CatchClrExceptions(e=>ExceptionHandler(new Exception(e.Message)) )).Execute("javascriptCode").GetValue("JavascriptFunction");
即,我想从javascript中捕获异常并获取该异常消息。
请帮忙。
答案 0 :(得分:0)
CatchClrExceptions
允许您捕获源于程序集和直接天气的异常,Jint引擎应该将异常传递给JS代码,或者天气将其作为.NET异常抛出。
namespace ConsoleApp5
{
public class Program
{
public static void Helper(string msg)
{
throw new Exception(msg);
}
static void Main(string[] args)
{
var registerScript = new Engine(c => c
.AllowClr(typeof(Program).Assembly)
// Allow exceptions from this assembly to surface as JS exceptions only if the message is foo
.CatchClrExceptions(ex => ex.Message == "foo")
)
.Execute(@"function throwException(){
try {
var ConsoleApp5 = importNamespace('ConsoleApp5');
ConsoleApp5.Program.Helper('foo');
// ConsoleApp5.Program.Helper('goo'); // This will fail when calling execute becase the predicate returns false
return '';
}
catch(e) {
return e;
}
};
var f = throwException();")
.GetValue("f");
}
}
}
传递给Predicate
的{{1}}应该返回true / false。它将收到抛出的CLR异常。
似乎没有办法通过Jint运行时通知处理的异常。要捕获解析器异常(即无效的JS代码),您可以使用常规CatchClrExceptions
包围Execute
,这将捕获任何解析异常。对于运行时异常,您还可以捕获try..catch(ParserException ex) { .. }
,这将在执行时处理未处理的异常。
JavaScriptException