我在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
调用传递给本机应用的消息是否有任何限制?
答案 0 :(得分:0)
哦~~!我解决了我的问题:
我的处理程序nativeCallbackB
被声明为:
func nativeCallbackB(data: Any) { //... }
但WKScriptMessage.body
的类型为AnyObject
所以,我将处理程序的声明更改为:
func nativeCallbackB(data: AnyObject) { //... }
现在它可以工作(但是我仍然不知道为什么有些消息也可以使用错误的处理程序声明以及在编译之前Xcode没有检查这些问题的原因)