iOS Swift 如何从 UIWebView 将 JSON 字符串和数组或字典传递给 Javascript?

Posted

技术标签:

【中文标题】iOS Swift 如何从 UIWebView 将 JSON 字符串和数组或字典传递给 Javascript?【英文标题】:iOS Swift How to pass JSON String and Array or Dictionary to Javascript from UIWebView? 【发布时间】:2018-11-09 12:46:53 【问题描述】:

在我的项目中,我使用 stringByEvaluatingJavaScript 将字符串传递给 javascript,它已成功通过。但是如果我传递了 JSON String 和 Array 或 Dictionary 意味着它没有传递我不知道如何传递这些的值。

这里我提到了我尝试将字符串传递给 JavaScript 的代码,

let param:String = "HI"
let _ = self.webView.stringByEvaluatingJavaScript(from: "myNewFunction('\(param)')")

成功返回HI

这里我提到了 JavaScript 代码,

<!DOCTYPE html>
<html>
    <p>Click the button to display an alert box.</p>
    <script>
        function myNewFunction(param) 
            alert(param);
        
    </script>
<body>
    <button onclick="myNewFunction()">Try it</button>
</body>
</html>

如何传递 Array 和 Dictionary 以及 JSON String 之类的值?

【问题讨论】:

为什么不使用 jsonserializer 将字典转换为 jsonstring ?然后您可以将 json 字符串传递给您的 javascript 方法。 怎么样,你能说吗?@HuseinBehboodiRad 检查我的答案 【参考方案1】:
let dict:[String:Any] = ["key1":10,"key2":false, "key3": "Some string goes in here"]
        let jsonData = try? JSONSerialization.data(withJSONObject: dict, options: [.prettyPrinted])
        if let data = jsonData
            let value = String(data: data, encoding: .utf8)
            print( value )
        

输出: 可选("\n \"key1\" : 10,\n \"key2\" : false,\n \"key3\" : \"这里有一些字符串\"\n")

游乐场中的代码

操场上的结果

这里缺少的是字典类型推断,即 dict:[String:Any]。此外,当您使用 try 时,请同时使用 optional,因为它可能会引发 try? 之类的异常?

【讨论】:

【参考方案2】:

这可能有效..我还没有测试过:

if let data = try? JSONSerialization.data(withJSONObject: arrayOrDictionaryHere, options: [.prettyPrinted]), let param = String(data: data, encoding: .utf8) 
    self.webView.stringByEvaluatingJavaScript(from: "myNewFunction('\(param)')")



//JS:

function myNewFunction(param) 
    alert(JSON.parse(param))

【讨论】:

此代码仅适用于字符串值,不适用于其他内容。【参考方案3】:

使用以下代码将字典转换为 jsonstring:

 var dict : Dictionary = ["key1":"value1","key2":"value2"]
let data = try JSONSerialization.data(withJSONObject: dict, options: [.prettyPrinted])
let value = String(data: data, encoding: .utf8)

然后使用value中的字符串调用你的javascript方法

如果您将第二行中的 dict 替换为 json 数组的实例,那么您也将获得 json 数组的 json 字符串。我每件事都会为此工作。

【讨论】:

此代码仅适用于字符串值,不适用于其他内容。 正如我所说,您可以将字典和数组转换为字符串,然后将它们传递给您的 javascript,然后在您的 javascript 中将其转换为数组或字典。 好的。所以在女巫部分你有问题吗?在获取值中的json字符串或在java脚本上接收它?你能看到value中的json字符串吗? 我只使用了下面的代码兄弟,让 data = 尝试 JSONSerialization.data(withJSONObject: tempComponentArray, options: [.prettyPrinted]) let value = String(data: data, encoding: .utf8) let encodedStr = self.webView.stringByEvaluatingJavaScript(from: "myNewFunction('(String(describing: value))')") print("encodedStr: ",encodedStr!) 当我打印该值意味着返回空.. print("encodedStr: ",encodedStr!)

以上是关于iOS Swift 如何从 UIWebView 将 JSON 字符串和数组或字典传递给 Javascript?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从javascript传递到iOS UIWebView

在 iOS Swift 3 中以编程方式添加 Web 视图时如何在 UIWebView 中获取响应状态代码?

IOS APP 开发 swift 中 UIWebView 与 javascript 的交互

如何在不使用 UIWebView 的情况下在 iOS 10 中显示带有 HTML 标签的文本(使用 swift)

swift - UIWebView 和 WKWebView(iOS12 之后替换UIWebView)

如何从 Swift 3 xcode8 的 UIWebView 中的 url 获取查询字符串参数?