Skip to content

Commit 9f442c0

Browse files
committed
update readme context
1 parent 413f951 commit 9f442c0

File tree

4 files changed

+238
-6
lines changed

4 files changed

+238
-6
lines changed

README.md

Lines changed: 119 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,121 @@
1-
# WKWebViewJavascriptBridge
1+
![](Rources/WKWebViewJavascriptBridge.jpg)
22

3-
🌉 A Bridge for Sending Messages between Swift and JavaScript in WKWebViews.
3+
[![language](https://img.shields.io/badge/Language-Swift-FFA08F.svg)](https://github.com/apple/swift) 
4+
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-FE95AE.svg?style=flat)](https://github.com/Carthage/Carthage) 
5+
[![License MIT](https://img.shields.io/badge/license-MIT-FC89CD.svg?style=flat)](https://raw.githubusercontent.com/Lision/WKWebViewJavascriptBridge/master/LICENSE) 
6+
[![Support](https://img.shields.io/badge/support-iOS%209%2B%20-FB7DEC.svg?style=flat)](https://www.apple.com/nl/ios/) 
7+
[![CocoaPods](https://img.shields.io/cocoapods/p/WKWebViewJavascriptBridge.svg?style=flat)](http://cocoadocs.org/docsets/WKWebViewJavascriptBridge) 
8+
[![Build Status](https://api.travis-ci.org/Lision/WKWebViewJavascriptBridge.svg?branch=master)](https://travis-ci.org/Lision/WKWebViewJavascriptBridge) 
9+
[![CocoaPods](https://img.shields.io/cocoapods/v/WKWebViewJavascriptBridge.svg?style=flat)](http://cocoapods.org/pods/WKWebViewJavascriptBridge)
410

5-
🚧 This framework is under construction!
11+
> [中文介绍](https://github.com/Lision/WKWebViewJavascriptBridge/blob/master/README_ZH-CN.md)
12+
13+
# What Can WKWebViewJavascriptBridge Do?
14+
15+
You can write hybrid moudles in just a few lines of code by use WKWebViewJavascriptBridge without need to be concerned with the underlying messaging implementation.
16+
17+
![](Rources/WKWebViewJavascriptBridgeDemo.gif)
18+
19+
# Why Only Support WKWebView?
20+
21+
### Advantages of WKWebView
22+
23+
It is well known that **WKWebView loads web pages faster and more efficiently than UIWebView**, and also **doesn't have as much memory overhead** for you.
24+
25+
Under the current timeline, most iOS apps only support iOS 9.0+.
26+
27+
### UIWebView Cross-Domain Access Vulnerability
28+
29+
The reason for the iOS platform cross-domain access vulnerability is due to UIWebView turning on the WebKitAllowUniversalAccessFromFileURLs and WebKitAllowFileAccessFromFileURLs options.
30+
31+
**WKWebView default allowFileAccessFromFileURLs and allowUniversalAccessFromFileURLs option is false.**
32+
33+
# Features
34+
35+
- **Swift Support:** Swift 3.2 ~ 4 Support.
36+
- **High Performance:** The messaging performance is higher than intercept requests.
37+
- **High Speed:** No need to consider alert box safety timeout.
38+
- **Lightwight:** This framework contains only 3 files.
39+
- **Non-intrusive:** There is no need to make the webview class inherit from other base class.
40+
41+
# Usage
42+
43+
### 1. Instantiate WKWebViewJavascriptBridge with a WKWebView:
44+
45+
``` swift
46+
bridge = WKWebViewJavascriptBridge(webView: webView)
47+
```
48+
49+
### 2. Register a Handler in Native, and Call a JS Handler:
50+
51+
``` swift
52+
bridge.register(handlerName: "testiOSCallback") { (paramters, callback) in
53+
print("testiOSCallback called: \(String(describing: paramters))")
54+
callback?("Response from testiOSCallback")
55+
}
56+
57+
bridge.call(handlerName: "testJavascriptHandler", data: ["foo": "before ready"], callback: nil)
58+
```
59+
60+
### 3. Copy and Paste setupWKWebViewJavascriptBridge into Your JS:
61+
62+
``` js
63+
function setupWKWebViewJavascriptBridge(callback) {
64+
if (window.WKWebViewJavascriptBridge) { return callback(WKWebViewJavascriptBridge); }
65+
if (window.WKWVJBCallbacks) { return window.WKWVJBCallbacks.push(callback); }
66+
window.WKWVJBCallbacks = [callback];
67+
window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null)
68+
}
69+
```
70+
71+
### 4. Finally, Call setupWKWebViewJavascriptBridge and then Use The Bridge to Register Handlers and Call Native Handlers:
72+
73+
``` js
74+
setupWKWebViewJavascriptBridge(function(bridge) {
75+
76+
/* Initialize your app here */
77+
78+
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
79+
console.log('iOS called testJavascriptHandler with', data)
80+
responseCallback({ 'Javascript Says':'Right back atcha!' })
81+
})
82+
83+
bridge.callHandler('testiOSCallback', {'foo': 'bar'}, function(response) {
84+
console.log('JS got response', response)
85+
})
86+
})
87+
```
88+
89+
# Installation
90+
91+
### Cocoapods
92+
93+
1. Add `pod 'WKWebViewJavascriptBridge', '~> 1.0.1'` to your Podfile.
94+
2. Run `pod install` or `pod update`.
95+
3. Add `import WKWebViewJavascriptBridge`.
96+
97+
### Carthage
98+
99+
1. Add `github "Lision/WKWebViewJavascriptBridge" ~> 1.0.1` to your Cartfile.
100+
2. Run `carthage update --platform ios`.
101+
3. Add the `WKWebViewJavascriptBridge` framework to your project.
102+
103+
### Manually
104+
105+
Either clone the repo and manually add the Files in [WKWebViewJavascriptBridge](https://github.com/Lision/WKWebViewJavascriptBridge/tree/master/WKWebViewJavascriptBridge).
106+
107+
# Requirements
108+
109+
This framework requires `iOS 9.0+` and `Xcode 9.0+`.
110+
111+
# Contact
112+
113+
114+
- Sina: [@Lision](https://weibo.com/5071795354/profile)
115+
- Twitter: [@Lision](https://twitter.com/LisionChat)
116+
117+
# License
118+
119+
[![](https://camo.githubusercontent.com/5e085da09b057cc65da38f334ab63f0c2705f46a/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f662f66382f4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672f31323870782d4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672e706e67)](https://raw.githubusercontent.com/Lision/WKWebViewJavascriptBridge/master/LICENSE)
120+
121+
WKWebViewJavascriptBridge is provided under the MIT license. See LICENSE file for details.

README_ZH-CN.md

Lines changed: 119 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,121 @@
1-
# WKWebViewJavascriptBridge
1+
![](Rources/WKWebViewJavascriptBridge.jpg)
22

3-
🌉 基于 WKWebViews 的用于 Swift 和 JavaScript 相互之间发送消息的桥梁。
3+
[![language](https://img.shields.io/badge/Language-Swift-FFA08F.svg)](https://github.com/apple/swift) 
4+
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-FE95AE.svg?style=flat)](https://github.com/Carthage/Carthage) 
5+
[![License MIT](https://img.shields.io/badge/license-MIT-FC89CD.svg?style=flat)](https://raw.githubusercontent.com/Lision/WKWebViewJavascriptBridge/master/LICENSE) 
6+
[![Support](https://img.shields.io/badge/support-iOS%209%2B%20-FB7DEC.svg?style=flat)](https://www.apple.com/nl/ios/) 
7+
[![CocoaPods](https://img.shields.io/cocoapods/p/WKWebViewJavascriptBridge.svg?style=flat)](http://cocoadocs.org/docsets/WKWebViewJavascriptBridge) 
8+
[![Build Status](https://api.travis-ci.org/Lision/WKWebViewJavascriptBridge.svg?branch=master)](https://travis-ci.org/Lision/WKWebViewJavascriptBridge) 
9+
[![CocoaPods](https://img.shields.io/cocoapods/v/WKWebViewJavascriptBridge.svg?style=flat)](http://cocoapods.org/pods/WKWebViewJavascriptBridge)
410

5-
🚧 此框架正在施工!
11+
# WKWebViewJavascriptBridge 能为你做什么?
12+
13+
您可以通过使用 WKWebViewJavascriptBridge 书写几行代码实现混合模块,而无需关心底层的消息传递实现。
14+
15+
![](Rources/WKWebViewJavascriptBridgeDemo.gif)
16+
17+
# 为什么仅支持 WKWebView?
18+
19+
### WKWebView 的优势
20+
21+
众所周知,WKWebView 比 UIWebView 加载网页的**速度更快,效率更高,且没有太多的内存开销**
22+
23+
在当前时间节点,大多数 iOS App 都是基于 iOS 9.0+ 的,**这是一个 WKWebView 的时代。**
24+
25+
### UIWebView 跨域访问漏洞
26+
27+
iOS 平台跨域访问漏洞成因是由于 UIWebView 默认开启了WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 选项。
28+
29+
**相比之下,WKWebView 默认 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 选项为 false。**
30+
31+
关于更多 UIWebView 跨域访问漏洞,点击 [这里](https://mp.weixin.qq.com/s/aRlxqxGw8etqep62qG4khA) 了解更多。
32+
33+
# 特性
34+
35+
- Swift 的支持:Swift 3.2 ~ 4 的支持。
36+
- 高性能:消息传递性能高于传统实现方式(拦截 Requests)。
37+
- 高速:无需考虑 Alert Box 安全超时。
38+
- 轻量:框架除去自动生成的 `.h` 仅有 3 个文件。
39+
- 非侵入性:无需改写 `webView` 的继承基类(这里假设当前时间节点下大部分 iOS App 已经完成了从 UIWebView 到 WKWebView 的迁徙,反正早晚要做这件事不是吗?)。
40+
41+
# 用法
42+
43+
### 1. 用 WKWebView 实例化 WKWebViewJavascriptBridge :
44+
45+
``` swift
46+
bridge = WKWebViewJavascriptBridge(webView: webView)
47+
```
48+
49+
### 2. 在 Native 中注册 Handler,调用 JS Handler :
50+
51+
``` swift
52+
bridge.register(handlerName: "testiOSCallback") { (paramters, callback) in
53+
print("testiOSCallback called: \(String(describing: paramters))")
54+
callback?("Response from testiOSCallback")
55+
}
56+
57+
bridge.call(handlerName: "testJavascriptHandler", data: ["foo": "before ready"], callback: nil)
58+
```
59+
60+
### 3. 复制并粘贴 setupWKWebViewJavascriptBridge 到你的 JS 中:
61+
62+
``` js
63+
function setupWKWebViewJavascriptBridge(callback) {
64+
if (window.WKWebViewJavascriptBridge) { return callback(WKWebViewJavascriptBridge); }
65+
if (window.WKWVJBCallbacks) { return window.WKWVJBCallbacks.push(callback); }
66+
window.WKWVJBCallbacks = [callback];
67+
window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null)
68+
}
69+
```
70+
71+
### 4. 最后,调用 setupWKWebViewJavascriptBridge 之后用 Bridge 来注册 Handlers 以及调用 Native Handlers :
72+
73+
``` js
74+
setupWKWebViewJavascriptBridge(function(bridge) {
75+
76+
/* Initialize your app here */
77+
78+
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
79+
console.log('iOS called testJavascriptHandler with', data)
80+
responseCallback({ 'Javascript Says':'Right back atcha!' })
81+
})
82+
83+
bridge.callHandler('testiOSCallback', {'foo': 'bar'}, function(response) {
84+
console.log('JS got response', response)
85+
})
86+
})
87+
```
88+
89+
# 安装
90+
91+
### Cocoapods
92+
93+
1. 在你的 Podfile 中添加 `pod 'WKWebViewJavascriptBridge', '~> 1.0.1'`
94+
2. 执行 `pod install``pod update`
95+
3. 添加 `import WKWebViewJavascriptBridge`
96+
97+
### Carthage
98+
99+
1. 在你的 Cartfile 中添加 `github "Lision/WKWebViewJavascriptBridge" ~> 1.0.1`
100+
2. 执行 `carthage update --platform ios`
101+
3. 添加 `WKWebViewJavascriptBridge` Framework 到你的项目中。
102+
103+
### 手动集成
104+
105+
`clone` 这个项目并手动添加 [WKWebViewJavascriptBridge](https://github.com/Lision/WKWebViewJavascriptBridge/tree/master/WKWebViewJavascriptBridge) 目录中的文件。
106+
107+
# 要求
108+
109+
此框架要求 `iOS 9.0+` 以及 `Xcode 9.0+`
110+
111+
# 联系
112+
113+
114+
- Sina: [@Lision](https://weibo.com/5071795354/profile)
115+
- Twitter: [@Lision](https://twitter.com/LisionChat)
116+
117+
# 许可证
118+
119+
[![](https://camo.githubusercontent.com/5e085da09b057cc65da38f334ab63f0c2705f46a/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f662f66382f4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672f31323870782d4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672e706e67)](https://raw.githubusercontent.com/Lision/WKWebViewJavascriptBridge/master/LICENSE)
120+
121+
WKWebViewJavascriptBridge 基于 MIT 许可证,查看 LICENSE 文件了解更多信息。
83.4 KB
Loading
104 KB
Loading

0 commit comments

Comments
 (0)