捕获由于javascript脚本而抛出的objectiveC异常

时间:2016-03-20 11:18:34

标签: ios objective-c exception javascriptcore

有没有办法捕获因JavaScript脚本评估而抛出的Objective-C异常?

例如: 我有一个类Obj,其中包含我通过JSExport导出的方法canThrow。从一些脚本我调用这个方法,它确实抛出一个异常。 我能以任何方式处理它吗?

我已经尝试将脚本评估代码包装在try-catch中,但这并没有帮助。

1 个答案:

答案 0 :(得分:0)

您的问题有点不清楚,但无论如何我都会尽力回答。

如果您需要将Objective-C中的异常引发到Javascript,则应使用-[JSContext exception]属性。有关详细信息,请参阅following question

将异常从Javascript传递到Objective-C很简单,只需导出一些方法,它将处理Objective-C中的异常,如:

myJSContext[@"PassExceptionToObjC"] = ^void(JSValue *)jsException {
    // Handle exception
}

然后在Javascript中使用以下代码:

try {
    // some code
}
catch (exception) {
    PassExceptionToObjC(exception);
}

或者,您可以将特定值从Javascript返回到Objective-C。像:

function doSomething() {
    try {
        // Do something
        return 'Ok';
    }
    catch (error) {
        return 'Error happens ' + error.message;
    }
}

如果您需要避免在从Javascript调用的方法中抛出Objective-C异常,您只需在Objective-C方法或块中添加@try/@catch

myJSContext[@"DoSomething"] = ^void(JSValue *)someValue {
    @try {
        // Do something
    }
    @catch (NSException *exception) {
        // Handle exception
    }
}

或者,首选,改变Objective-C代码的逻辑,触发异常。

如果您需要避免Javascript中的异常(从Objective-C调用),则类似的方法适用。您只需添加try/catch即可。在大多数情况下,您可以简单地忽略JavaScript中的异常,从Objective-C调用。但我建议在Objective-C端为任何非平凡的Javascript实现异常处理,至少可以简化故障排除。

希望它有所帮助。