【问题标题】:Catch an objectiveC exception that was thrown as a result of a javascript script捕获由于 javascript 脚本而引发的 ObjectiveC 异常
【发布时间】:2016-03-20 11:18:34
【问题描述】:

有什么方法可以捕获由于 JavaScript 脚本评估而引发的 Objective-C 异常?

例如: 我有一个类 Obj,它带有我通过 JSExport 导出的方法 canThrow。从一些脚本中,我调用了这个方法,它确实抛出了一个异常。 我有什么办法可以处理吗?

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

【问题讨论】:

    标签: ios objective-c exception javascriptcore


    【解决方案1】:

    您的问题有点不清楚,但我还是会尽力回答。

    如果您需要从 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 代码的逻辑。

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2022-10-20
      • 1970-01-01
      相关资源
      最近更新 更多