将jsonobject从swift4传递到wkwebview JavaScript函数

将jsonobject从swift4传递到wkwebview JavaScript函数,javascript,swift3,swift4,Javascript,Swift3,Swift4,我在swift中有一个函数,它将文件内容作为字符串读取,并使用jsonserialization将其转换为json对象。我想将json对象作为对象传递给wkwebview JavaScript函数。这样我就可以从JavaScript访问数据了 我使用swift的evaluatescript方法解决了这个问题 Swift代码 func readFromFile(_ fileurl: String) { var myData:String = ""; do { let

我在swift中有一个函数,它将文件内容作为字符串读取,并使用jsonserialization将其转换为json对象。我想将json对象作为对象传递给wkwebview JavaScript函数。这样我就可以从JavaScript访问数据了


我使用swift的evaluatescript方法解决了这个问题

Swift代码

func readFromFile(_ fileurl: String) {
    var myData:String = "";
    do {
        let url = NSURL(string: fileurl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
        myData = try String(contentsOf: url! as URL)
        let data = myData.data(using: String.Encoding.utf8, allowLossyConversion: false)!
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject]
            let serializedData = try! JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
            let encodedData = serializedData.base64EncodedString(options:.endLineWithLineFeed)
            let js2:String = "LoadJson('\(encodedData)')"
            self.wkWebView?.evaluateJavaScript(js2, completionHandler: { (AnyObject, NSError) -> Void in
                NSLog("%s", #function)
                self.showMessage("Loaded")
            })
        } catch let error as NSError {
            print("Failed to load: \(error.localizedDescription)")
        }
    } catch{
        showMessage("Loading error.");
    }
}
function LoadJson (encodedData) {
   try {
      var decodedData = window.atob(encodedData);
      jsonObj = JSON.parse(decodedData);
   }
   catch (err) {
   }
}
Javascript代码

func readFromFile(_ fileurl: String) {
    var myData:String = "";
    do {
        let url = NSURL(string: fileurl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
        myData = try String(contentsOf: url! as URL)
        let data = myData.data(using: String.Encoding.utf8, allowLossyConversion: false)!
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject]
            let serializedData = try! JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
            let encodedData = serializedData.base64EncodedString(options:.endLineWithLineFeed)
            let js2:String = "LoadJson('\(encodedData)')"
            self.wkWebView?.evaluateJavaScript(js2, completionHandler: { (AnyObject, NSError) -> Void in
                NSLog("%s", #function)
                self.showMessage("Loaded")
            })
        } catch let error as NSError {
            print("Failed to load: \(error.localizedDescription)")
        }
    } catch{
        showMessage("Loading error.");
    }
}
function LoadJson (encodedData) {
   try {
      var decodedData = window.atob(encodedData);
      jsonObj = JSON.parse(decodedData);
   }
   catch (err) {
   }
}