ios - 如何将 swift 对象传递给 javascript (WKWebView/swift)

标签 ios iphone xcode swift swift2

我正在努力将数据从 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/

相关文章:

ios - ScrollView Insets 不调整 KeyboardHide 功能 (SWIFT3)

ios - 在不相关的 ViewController 之间传递数据

ios - AVPlayer(或 AVAudioSession?)在我离开 ViewController 后播放,当我返回时,两个正在播放

iphone - iPhone 中的 UIActivityIndi​​catorView 出现问题?

ios - XCode 如何在没有付费开发帐户的情况下存档和导出

ios - 在 ios 中异步调用 Web 服务

ios - 如何使用解析框架在iOS中使用连接查询?

iphone - IOS中的按钮组

objective-c - 使用 Storyboard在 UItableView 中添加 iAd 横幅

xcode - 唯一性约束功能需要 Xcode 7.0 工具或更高版本