此项目基于 WebViewJavascriptBridge,在其上仅对 WKWebView 提供支持,由 Swift 实现!
您可以通过使用 WKWebViewJavascriptBridge 书写几行代码实现混合模块,而无需关心底层的消息传递实现。
众所周知,WKWebView 比 UIWebView 加载网页的速度更快,效率更高,且没有太多的内存开销。
在当前时间节点,大多数 iOS App 都是基于 iOS 9.0+ 的,这是一个 WKWebView 的时代。
iOS 平台跨域访问漏洞成因是由于 UIWebView 默认开启了WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 选项。
相比之下,WKWebView 默认 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 选项为 false。
关于更多 UIWebView 跨域访问漏洞,点击 这里 了解更多。
- Swift 的支持:Swift 3.2 ~ 5 的支持。
- 高性能:消息传递性能高于传统实现方式(拦截 Requests)。
- 高速:无需考虑 Alert Box 安全超时。
- 轻量:框架除去自动生成的
.h
仅有 3 个文件。 - 非侵入性:无需改写
webView
的继承基类(这里假设当前时间节点下大部分 iOS App 已经完成了从 UIWebView 到 WKWebView 的迁徙,反正早晚要做这件事不是吗?)。
bridge = WKWebViewJavascriptBridge(webView: webView)
bridge.register(handlerName: "testiOSCallback") { (paramters, callback) in
print("testiOSCallback called: \(String(describing: paramters))")
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)
})
})
- 在你的 Podfile 中添加
pod 'WKWebViewJavascriptBridge', '~> 1.2.0'
。 - 执行
pod install
或pod update
。 - 添加
import WKWebViewJavascriptBridge
。
- 在你的 Cartfile 中添加
github "Lision/WKWebViewJavascriptBridge" ~> 1.2.0
。 - 执行
carthage update --platform ios
。 - 添加
WKWebViewJavascriptBridge
Framework 到你的项目中。
clone
这个项目并手动添加 WKWebViewJavascriptBridge 目录中的文件。
此框架要求 iOS 9.0+
以及 Xcode 9.0+
。
- Email: [email protected]
- Sina: @Lision
- Twitter: @Lision
WKWebViewJavascriptBridge 基于 MIT 许可证,查看 LICENSE 文件了解更多信息。