Ios Can';无法从WKUserContentController获取字符串数据,无法接收WKScriptMessage

Ios Can';无法从WKUserContentController获取字符串数据,无法接收WKScriptMessage,ios,swift,wkwebview,wkwebviewconfiguration,Ios,Swift,Wkwebview,Wkwebviewconfiguration,我的方法叫做: func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { print("message.body: \(message.body)") if let messageBody = message.body as? [String: Any] { pr

我的方法叫做:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("message.body: \(message.body)")
    
    if let messageBody = message.body as? [String: Any] {
        print("messageBody: \(messageBody)") //this is not triggered
        if let data = messageBody["data"] as? NSString {
            print("DATA: \(data)")
        }
    }
消息正文是:

message.body: {"type":3,"data":"{\"title\":\"Verzamelen\",\"content\":\"Loongegevens...\"}"}

但在那之后,我无法检索“数据”字段。我遗漏了什么?

该问题可能与字符串中的反斜杠转义有关。工作原理是使用JSON解码器解码:

struct ScriptMessage: Codable {
    let type: Int
    let data: String
}


func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    
    guard let bodyString = message.body as? String,
          let bodyData = bodyString.data(using: .utf8) else {
        return
    }
    
    if let bodyStruct = try? JSONDecoder().decode(ScriptMessage.self, from: bodyData) {
        print(bodyStruct.data)
    }
}

这是因为您正在返回一个字符串?您是否检查了数据字段是否不是术语?如果让data=messageBody[“data”]as,您可以使用
测试它?NSDictionary{/*…*/}
@ViníciusBonemer问题是这一行甚至还没有到达。问题在于:如果让messageBody=message.body作为?[字符串:任意]{。。。