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)