gpt4 book ai didi

javascript - 如何为 iOS evaluateJavaScript 抛出 javascript 错误以捕获它?

转载 作者:行者123 更新时间:2023-11-28 15:22:33 26 4
gpt4 key购买 nike

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 始终为 nil。

.js 文件中:

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

如何为 evaluateJavaScript 抛出错误以在 error 中捕获它?

最佳答案

我可以建议的最简单的解决方案就是向您的 webView 发送一条消息。也就是说,当然,如果您使用 WKWebView 来显示网页内容。

为此,您需要在声明了 WKWebView 实例的类中采用 WKScriptMessageHandler

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

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);
};

关于javascript - 如何为 iOS evaluateJavaScript 抛出 javascript 错误以捕获它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45740917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com