1 Star 0 Fork 0

github-iOS/WKWebViewJavascriptBridge

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

language  Carthage compatible  License MIT  Support  CocoaPods  Build Status  CocoaPods

此项目基于 WebViewJavascriptBridge,在其上仅对 WKWebView 提供支持,由 Swift 实现!

WKWebViewJavascriptBridge 能为你做什么?

您可以通过使用 WKWebViewJavascriptBridge 书写几行代码实现混合模块,而无需关心底层的消息传递实现。

为什么仅支持 WKWebView?

WKWebView 的优势

众所周知,WKWebView 比 UIWebView 加载网页的速度更快,效率更高,且没有太多的内存开销

在当前时间节点,大多数 iOS App 都是基于 iOS 9.0+ 的,这是一个 WKWebView 的时代。

UIWebView 跨域访问漏洞

iOS 平台跨域访问漏洞成因是由于 UIWebView 默认开启了WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 选项。

相比之下,WKWebView 默认 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 选项为 false。

关于更多 UIWebView 跨域访问漏洞,点击 这里 了解更多。

特性

  • Swift 的支持:Swift 3.2 ~ 5 的支持。
  • 高性能:消息传递性能高于传统实现方式(拦截 Requests)。
  • 高速:无需考虑 Alert Box 安全超时。
  • 轻量:框架除去自动生成的 .h 仅有 3 个文件。
  • 非侵入性:无需改写 webView 的继承基类(这里假设当前时间节点下大部分 iOS App 已经完成了从 UIWebView 到 WKWebView 的迁徙,反正早晚要做这件事不是吗?)。

用法

1. 用 WKWebView 实例化 WKWebViewJavascriptBridge :

bridge = WKWebViewJavascriptBridge(webView: webView)

2. 在 Native 中注册 Handler,调用 JS Handler :

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)

3. 复制并粘贴 setupWKWebViewJavascriptBridge 到你的 JS 中:

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)
}

4. 最后,调用 setupWKWebViewJavascriptBridge 之后用 Bridge 来注册 Handlers 以及调用 Native Handlers :

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)
	})
})

安装

Cocoapods

  1. 在你的 Podfile 中添加 pod 'WKWebViewJavascriptBridge', '~> 1.2.0'
  2. 执行 pod installpod update
  3. 添加 import WKWebViewJavascriptBridge

Carthage

  1. 在你的 Cartfile 中添加 github "Lision/WKWebViewJavascriptBridge" ~> 1.2.0
  2. 执行 carthage update --platform ios
  3. 添加 WKWebViewJavascriptBridge Framework 到你的项目中。

手动集成

clone 这个项目并手动添加 WKWebViewJavascriptBridge 目录中的文件。

要求

此框架要求 iOS 9.0+ 以及 Xcode 9.0+

联系

许可证

WKWebViewJavascriptBridge 基于 MIT 许可证,查看 LICENSE 文件了解更多信息。

MIT License Copyright (c) 2018 Lision Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

A Bridge for Sending Messages between Swift and JavaScript in WKWebViews. 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/github-iOS/WKWebViewJavascriptBridge.git
git@gitee.com:github-iOS/WKWebViewJavascriptBridge.git
github-iOS
WKWebViewJavascriptBridge
WKWebViewJavascriptBridge
master

搜索帮助