将Javascript接口从UIWebView迁移到WKWebView

最后发布: 2019-06-14 21:58:30


问题

最近我一直在将我的Web视图应用程序从UIWebView迁移到WKWebView。 一切进展顺利,直到我通过javascript迁移一个我从swift发布方法的类来在webview中调用。 在Android上这很简单,我只是在我的方法中使用了@JavascriptInterface表示法并将其添加到我的webview中。 但是在iOS上实现起来比较困难,所以我在GitHub 1中查看了这个项目。

基本上,它扩展了UIWebView并实现了一个创建我的javascript界面​​的方法:

extension UIWebView {
    func addJavascriptInterface<T : JSExport>(_ object: T, forKey key: String){
    __globalWebViews.append(self)
    __globalKeyBinding = key
    __globalExportObject = object
  }
}

extension NSObject{
  func webView(_ webView: UIWebView!, didCreateJavaScriptContext context: JSContext!, forFrame frame: AnyObject!){
    let notifyDidCreateJavaScriptContext = {() -> Void in
        for webView in __globalWebViews
        {
            let checksum = "__KKKWebView\(webView.hash)"
            webView.stringByEvaluatingJavaScript(from: "var \(checksum) = '\(checksum)'")
            if context.objectForKeyedSubscript(checksum).toString() == checksum
            {
                context.setObject(__globalExportObject, forKeyedSubscript: __globalKeyBinding as (NSCopying & NSObjectProtocol)!)
            }
        }
     }

     if (Thread.isMainThread)
     {
         notifyDidCreateJavaScriptContext()
     }
     else
     {
         DispatchQueue.main.async(execute: notifyDidCreateJavaScriptContext)
     }
  }
}

var __globalWebViews : [UIWebView] = []
var __globalExportObject : AnyObject? = nil
var __globalKeyBinding : String = "Native" 

该实现适用于我的UIWebView,但现在我很难将其迁移到WKWebView。 有人有同样的问题吗? 我对新方法持开放态度。

javascript ios webview wkwebview