繁体   English   中英

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

[英]iOS Swift How to pass JSON String and Array or Dictionary to Javascript from UIWebView?

在我的项目中,我使用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>

如何传递数组和字典以及 JSON 字符串等值?

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 )
        }

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

操场上的代码在此处输入图片说明

结果在操场在此处输入图片说明

这里缺少的是字典类型推断,即 dict:[String:Any]。 此外,当您使用 try 时,请与它一起使用 optional ,因为它可能会抛出像 try?

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

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))
}

使用以下代码将字典转换为 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 字符串。 我的每一件事也将为此工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM