在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
内捕获?
答案 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);
};