WKScriptMessage.body导致EXC_BAD_ACCESS

时间:2016-04-20 13:23:39

标签: javascript swift macos exc-bad-access wkwebview

我在Mac应用中使用WKWebView组件来显示网页。此网页使用JavaScript调用webkit.messageHandlers["callbackHandlerName"].postMessage(dataObject);

将数据发送到本机应用

我可以毫无问题地接收本机应用中的大部分消息(然后将其主体转换为NSDictionary),但是当我尝试访问属性{{EXC_BAD_ACCESS时,某些类型的消息会导致message.body 1}}。我无法找出为什么有些数据无法发送到本机应用程序和其他可以(在这两种情况下数据都是嵌套的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调用传递给本机应用的消息是否有任何限制?

1 个答案:

答案 0 :(得分:0)

哦~~!我解决了我的问题:

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

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

WKScriptMessage.body的类型为AnyObject

所以,我将处理程序的声明更改为:

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

现在它可以工作(但是我仍然不知道为什么有些消息也可以使用错误的处理程序声明以及在编译之前Xcode没有检查这些问题的原因)