1

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

4

3 回答 3

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?

于 2018-11-09T17:18:03.590 回答
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)

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

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

于 2018-11-09T12:58:16.877 回答
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))
}
于 2018-11-09T12:52:49.313 回答