最近,我一直在将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。有人遇到同样的问题吗?我愿意接受新方法。