将Javascript接口从UIWebView迁移到WKWebView

时间:2019-06-14 21:58:30

标签: javascript ios webview wkwebview

最近,我一直在将Web视图应用程序从UIWebView迁移到WKWebView。一切都进行得很好,直到我迁移了一个类,该类从swift发布了方法,然后通过javascript在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。有人遇到同样的问题吗?我愿意接受新方法。

0 个答案:

没有答案