有没有办法捕获因JavaScript脚本评估而抛出的Objective-C异常?
例如: 我有一个类Obj,其中包含我通过JSExport导出的方法canThrow。从一些脚本我调用这个方法,它确实抛出一个异常。 我能以任何方式处理它吗?
我已经尝试将脚本评估代码包装在try-catch中,但这并没有帮助。
答案 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实现异常处理,至少可以简化故障排除。
希望它有所帮助。