【问题标题】:passing JSON string from iOS WKWebKit to JS , always failure将 JSON 字符串从 iOS WKWebKit 传递给 JS ,总是失败
【发布时间】:2019-09-12 21:31:57
【问题描述】:

我正在尝试使用来自 iOS 应用程序 (swift) 的字符串参数调用 JS 中的函数。我希望数据结构像:

[{"name":"Mat. Category","value":"PIPE"},
{"name":"Manufacturer","value":"Manufacturer 1"},
{"name":"Heat#","value":"78652457"},
{"name":"Manufacture Date","value":"2019-04-15"},
{"name":"Item Description","value":"8\" PIPE, 18\" LG"},
{"name":"Wall Thickness","value":"0.375IN"},
{"name":"Diameter","value":"24IN UPS"},
{"name":"Yield Strength","value":"35,000 psi"},
{"name":"Document Repository Link","value":"https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L"}
];

所以,它是一个包含一些对象的数组。我正在从 iOS 传递它:

   webPage.evaluateJavaScript("cameraClosed(\(content))") { (res, error) in
            if error == nil{

                print("invoke successed")
                print("res:\(res)")
            }else{
                print("invoke failure")
                print(error)
            }
        }

内容是一个字符串。我打印传递给 web 的 javascriptstring:

打印 "cameraClosed((content))" =>

cameraClosed([{"name":"Mat. Category","value":"Aaron"},{"name":"Manufacturer","value":"Manufacturer 1"},{"name":"Heat#","value":"18616949864"},{"name":"Manufacture Date","value":"2019-04-14"},{"name":"Item Description","value":"8\" Steel Gas main - 50 Ft"},{"name":"Wall Thickness","value":"0.375IN"},{"name":"Diameter","value":"24IN UPS"},{"name":"Yield Strength","value":"35,000 psi"},{"name":"Document Repository Link","value":"https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L"}])

在网页端,我可以成功接收到这个,这是我的 React 代码:

 window.cameraClosed = (content) => {

      if (typeof (content) == "string") {
        window.webkit.messageHandlers.messageRecieved.postMessage("is String");
      }else{
        window.webkit.messageHandlers.messageRecieved.postMessage("is Object");
      }
}

我打印在 React 中收到的content(使用 messageHandlers )因为content 来自二维码,所以我无法在 PC 中调试它,我只能使用 iOS 设备和嵌入的 WKWebView :

(
        {
        name = "Mat. Category";
        value = Aaron;
    },
        {
        name = Manufacturer;
        value = "Manufacturer 1";
    },

        {
        name = "Heat#";
        value = 18616949864;
    },
        {
        name = "Manufacture Date";
        value = "2019-04-14";
    },
        {
        name = "Item Description";
        value = "8\" Steel Gas main - 50 Ft";
    },
        {
        name = "Wall Thickness";
        value = "0.375IN";
    },
        {
        name = Diameter;
        value = "24IN UPS";
    },
        {
        name = "Yield Strength";
        value = "35,000 psi";
    },
        {
        name = "Document Repository Link";
        value = "https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L";
    }
)

我不知道为什么它把方括号变成了括号。这真的让我很困惑。正如我之前提到的,我只想要一个正确的数据结构。它来自一个二维码,我想我在二维码中制作了正确的数据结构,但我不知道为什么在我将它传递到网络后它会改变。

谁能帮帮我?

【问题讨论】:

  • 我真的不明白你的问题是编程明智吗?这是一个快速的问题还是一个 reactjs 问题或其他什么?就 swift 而言,仅仅因为它用括号打印并不意味着括号已在实际字符串中被替换
  • 它已被替换,因为我打印的变量都是字符串.. 但我已经修复它。我稍后会写我的解决方案

标签: javascript ios swift reactjs wkwebview


【解决方案1】:

我已经通过再次 stringify 修复它:

 let string = JSON.stringify(content)
 let jsonArry = JSON.parse(string)

然后方括号又回来了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2020-05-13
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多