此项目灵感来源于 WebViewJavascriptBridge!
通过使用 WKWebViewJavascriptBridge,您只需几行代码即可编写混合模块,而无需担心底层消息传递的实现。
众所周知,WKWebView 加载网页的速度比 UIWebView 更快更有效,并且也没有那么多的内存开销。
在当前时间线中,大多数 iOS 应用程序仅支持 iOS 9.0+。
iOS 平台跨域访问漏洞的原因是由于 UIWebView 开启了 WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 选项。
WKWebView 默认 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 选项为 false。
bridge = WKWebViewJavascriptBridge(webView: webView)
bridge.register(handlerName: "testiOSCallback") { (parameters, callback) in
print("testiOSCallback called: \(String(describing: parameters))")
callback?("Response from testiOSCallback")
}
bridge.call(handlerName: "testJavascriptHandler", data: ["foo": "before ready"], callback: nil)
function setupWKWebViewJavascriptBridge(callback) {
if (window.WKWebViewJavascriptBridge) { return callback(WKWebViewJavascriptBridge); }
if (window.WKWVJBCallbacks) { return window.WKWVJBCallbacks.push(callback); }
window.WKWVJBCallbacks = [callback];
window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null)
}
setupWKWebViewJavascriptBridge(function(bridge) {
/* Initialize your app here */
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
console.log('iOS called testJavascriptHandler with', data)
responseCallback({ 'Javascript Says':'Right back atcha!' })
})
bridge.callHandler('testiOSCallback', {'foo': 'bar'}, function(response) {
console.log('JS got response', response)
})
})
pod 'WKWebViewJavascriptBridge', '~> 1.2.0'
。pod install
或 pod update
。import WKWebViewJavascriptBridge
。github "Lision/WKWebViewJavascriptBridge" ~> 1.2.0
添加到您的 Cartfile。carthage update --platform ios
。WKWebViewJavascriptBridge
framework 添加到您的项目中。克隆 repo 并手动添加 WKWebViewJavascriptBridge 中的文件。
此框架需要 iOS 9.0+
和 Xcode 9.0+
。
WKWebViewJavascriptBridge 在 MIT 许可下提供。 有关详细信息,请参见 LICENSE 文件。