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

时间:2018-11-09 12:46:54

标签: javascript ios swift

在我的项目中,我已使用 stringByEvaluatingJavaScript 将String传递给JavaScript,该字符串已成功传递。但是,如果我传递了JSON字符串和数组或字典,则意味着它不传递值,我不知道如何传递这些值。

在这里我提到了我尝试将字符串传递给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这样的值?

3 个答案:

答案 0 :(得分: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}”)

操场上的代码 enter image description here

操场上的结果 enter image description here

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

答案 1 :(得分:0)

这可能有效。.我尚未测试:

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

答案 2 :(得分:0)

使用以下代码将字典转换为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字符串。我所有的事情也都可以做到。