WKScriptMessage.body causes EXC_BAD_ACCESS

WKScriptMessage.body causes EXC_BAD_ACCESS

本文关键字:BAD ACCESS EXC body causes WKScriptMessage      更新时间:2023-09-26

我正在使用Mac应用程序中的WKWebView组件来显示网页。此网页使用JavaScript调用webkit.messageHandlers["callbackHandlerName"].postMessage(dataObject); 将数据发送到本地应用程序

我可以在本机应用程序中毫无问题地接收大多数消息(然后将其正文转换为NSDictionary),但当我尝试访问属性message.body时,某些类型的消息会导致EXC_BAD_ACCESS。我不知道为什么有些数据不能发送到本机应用程序,而另一些可以(在这两种情况下,数据都是嵌套的JavaScript对象)

internal func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)
{
    switch (message.name)
    {
        case "nativeCallbackA":
            onNativeCallbackA(message.body)
        case "nativeCallbackB":
            onNativeCallbackB(message.body) //throws EXC_BAD_ACCESS
        default:
            print("Unsupported message " + message.name);
    }
}

使用JS postMessage调用传递给本机应用程序的消息是否有任何限制?

哦!我解决了我的问题:

我的处理程序nativeCallbackB被声明为:

func nativeCallbackB(data: Any) { //... }

但CCD_ 9的类型是CCD_

因此,我将handler的声明更改为:

func nativeCallbackB(data: AnyObject) { //... }

现在它可以工作了(但我仍然不知道为什么有些消息的处理程序声明不正确,以及为什么编译前Xcode没有检查这些问题)