我正在努力将数据从 swift 传递到 WKWebView 中的 javascript
我有一个自定义类:
class AllInfo: AnyObject {
var title = "Special Title"
var description = "Special Description"
}
并用
初始化它var info = AllInfo()
然后我有一个 WKWebView,我用它传递一个 WKUserScript,我有一个源属性:
source: "changeDisplay('\(info)')"
我的问题是如何在 javascript 中访问此对象。我试图像访问 javascript 对象和关联数组一样访问它,但没有成功。这是 js 函数:
function changeDisplay(passedInfo) {
document.querySelector('h1').innerHTML = passedInfo.title
document.querySelector('h2').innerHTML = passedInfo.description
}
setTimeout(function () {changeDisplay();}, 5000);
编辑:当我尝试像这样访问对象时,我得到了未定义。
所以我的问题是:
我可以将 AnyObject 传递给 JavaScript 并访问它吗? 如果没有,我应该制作什么类型的swift类,这样我就可以轻松通过。
我很想在 swift 中创建一个 javascript 对象作为字符串并传递它,但我觉得有更好的方法。
谢谢
编辑:我在下面回答了如何将数据作为 JSON 传递。
最佳答案
在.swift中,定义并调用这个方法
func evaluateJavaScriptForData(dictionaryData: [String: AnyObject]) {
// Convert swift dictionary into encoded json
let serializedData = try! NSJSONSerialization.dataWithJSONObject(dictionaryData, options: .PrettyPrinted)
let encodedData = serializedData.base64EncodedStringWithOptions(.EncodingEndLineWithLineFeed)
// This WKWebView API to calls 'reloadData' function defined in js
webView.evaluateJavaScript("reloadData('\(encodedData)')") { (object: AnyObject?, error: NSError?) -> Void in
print("completed with \(object)")
}
}
在.js/.html 文件中
function reloadData(sBinaryParam) {
// This 'atob' decodes the Base64 encoded data sent by swift
var sDecodedParam = window.atob(sBinaryParam);
var oData = JSON.parse(sDecodedParam);
// This 'oData' is your js object (dictionary)
return true;
}
关于ios - 如何将 swift 对象传递给 javascript (WKWebView/swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113933/