JINT-如何在JINT中捕获CatchClrExceptions中的异常?

时间:2018-01-22 04:46:56

标签: javascript c# jint

我想抓住从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中捕获异常并获取该异常消息。

请帮忙。

1 个答案:

答案 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