如何为iOS evaluateJavaScript抛出一个javascript错误来捕获它?

时间:2017-08-17 16:50:50

标签: javascript ios swift error-handling

evaluateJavaScript中,我调用一个获取对象数组的javascript函数。如果失败,则调用handleError函数抛出错误。

我知道正在调用handleError函数(我有一个console.log语句)但是当我抛出错误时,evaluateJavaScript没有捕获它。

这就是我正在做的事情:

在我的.swift文件中:

evaluateJavaScript("window.sampleFunctionThatHandlesFetch()", completionHandler: {(_ result: Any?, _ error: Error?) -> Void in
            print("result: \(result)")
            print("error: \(error)")
})

error总是无。

.js文件中:

var handleError = function handleError(errorText) {
         throw new Error(errorText);
};

如何将evaluateJavaScript的错误抛出以在error内捕获?

1 个答案:

答案 0 :(得分:1)

我建议的最简单的解决方案就是在您的webView上发布消息。当然,如果您使用WKWebView来显示网络内容。

为此,您需要在宣布了WKScriptMessageHandler个实例的课程中采用WKWebView

然后,您需要修改Web视图的初始化,以使用具有所需消息处理程序的自定义配置:

let config = WKWebViewConfiguration()
let contentController = WKUserContentController()
contentController.add(self, name: "aMessageHandler")        
config.userContentController = contentController
yourWKWebViewInstance = WKWebView(frame: someCGRect, configuration: config)

完成此操作后,您将能够通过此功能接收消息

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
{
    if message.name == "aMessageHandler"
    {
        let yourMessage = message.body as? String
        // Do whatever you need to do with it
    }
}

要在JS中发布此消息,您需要调用postMessage方法,如下所示:

var handleError = function handleError(errorText) {
     window.webkit.messageHandlers.aMessageHandler.postMessage(errorText);
};