在我的项目中,我已使用 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这样的值?
答案 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}”)
这里缺少字典类型推断,即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
如果将第二行中的dict
替换为json数组的实例,那么您还将获得json数组的json字符串。我所有的事情也都可以做到。