Skip to content

Commit ad1daba

Browse files
committed
Update README to document new API
1 parent c1d335e commit ad1daba

File tree

1 file changed

+34
-104
lines changed

1 file changed

+34
-104
lines changed

README.md

Lines changed: 34 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ self.bridge = [WebViewJavascriptBridge bridgeForWebView:webView handler:^(id dat
7373
3) Go ahead and send some messages from ObjC to javascript:
7474
7575
```objc
76-
[self.bridge send:@"Well hello there"];
77-
[self.bridge send:[NSDictionary dictionaryWithObject:@"Foo" forKey:@"Bar"]];
78-
[self.bridge send:@"Give me a response, will you?" responseCallback:^(id responseData) {
79-
NSLog(@"ObjC got its response! %@", responseData);
76+
[self.bridge registerHandler:@"ObjC Echo" handler:^(id data, WVJBResponseCallback responseCallback) {
77+
NSLog(@"ObjC Echo called with: %@", data);
78+
responseCallback(data);
79+
}];
80+
[self.bridge callHandler:@"JS Echo" responseCallback:^(id responseData) {
81+
NSLog(@"ObjC received response: %@", responseData);
8082
}];
8183
```
8284

@@ -95,24 +97,21 @@ function setupWebViewJavascriptBridge(callback) {
9597
}
9698

9799
setupWebViewJavascriptBridge(function(bridge) {
98-
bridge.init(function(message, responseCallback) {
99-
alert('Received message: ' + message)
100-
if (responseCallback) {
101-
responseCallback("Right back atcha")
102-
}
103-
})
104100

105101
/* Initialize your app here */
106102

107-
bridge.send('Hello from the javascript')
108-
bridge.send('Please respond to this', function responseCallback(responseData) {
109-
console.log("Javascript got its response", responseData)
103+
bridge.registerHandler('JS Echo', function(data, responseCallback) {
104+
console.log("JS Echo called with:", data)
105+
responseCallback(data)
106+
})
107+
bridge.callHandler('ObjC Echo', function responseCallback(responseData) {
108+
console.log("JS received response:", responseData)
110109
})
111110
})
112111
```
113112

114-
WKWebView Support (iOS 8 & OS 10.10)
115-
------------------------------------
113+
WKWebView Support (iOS 8+ & OS 10.10+)
114+
--------------------------------------
116115

117116
WARNING: WKWebView still has [many bugs and missing network APIs.](https://github.com/ShingoFukuyama/WKWebViewTips/blob/master/README.md) It may not be a simple drop-in replacement.
118117

@@ -128,10 +127,7 @@ WebViewJavascriptBridge supports [WKWebView](http://nshipster.com/wkwebkit/) for
128127
2) Instantiate WKWebViewJavascriptBridge and with a WKWebView object
129128

130129
```objc
131-
WKWebViewJavascriptBridge* bridge = [WKWebViewJavascriptBridge bridgeForWebView:webView handler:^(id data, WVJBResponseCallback responseCallback) {
132-
NSLog(@"Received message from javascript: %@", data);
133-
responseCallback(@"Right back atcha");
134-
}];
130+
WKWebViewJavascriptBridge* bridge = [WKWebViewJavascriptBridge bridgeForWebView:webView];
135131
```
136132
137133
Contributors & Forks
@@ -145,41 +141,14 @@ API Reference
145141
146142
### ObjC API
147143
148-
##### `[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview handler:(WVJBHandler)handler]`
149-
##### `[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview webViewDelegate:(UIWebViewDelegate*)webViewDelegate handler:(WVJBHandler)handler]`
144+
##### `[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview`
150145
151146
Create a javascript bridge for the given web view.
152147
153-
The `WVJBResponseCallback` will not be `nil` if the javascript expects a response.
154-
155-
Optionally, pass in `webViewDelegate:(UIWebViewDelegate*)webViewDelegate` if you need to respond to the [web view's lifecycle events](http://developer.apple.com/library/ios/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html).
156-
157148
Example:
158149
159150
```objc
160-
[WebViewJavascriptBridge bridgeForWebView:webView handler:^(id data, WVJBResponseCallback responseCallback) {
161-
NSLog(@"Received message from javascript: %@", data);
162-
if (responseCallback) {
163-
responseCallback(@"Right back atcha");
164-
}
165-
}]
166-
167-
[WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) { /* ... */ }];
168-
```
169-
170-
##### `[bridge send:(id)data]`
171-
##### `[bridge send:(id)data responseCallback:(WVJBResponseCallback)responseCallback]`
172-
173-
Send a message to javascript. Optionally expect a response by giving a `responseCallback` block.
174-
175-
Example:
176-
177-
```objc
178-
[self.bridge send:@"Hi"];
179-
[self.bridge send:[NSDictionary dictionaryWithObject:@"Foo" forKey:@"Bar"]];
180-
[self.bridge send:@"I expect a response!" responseCallback:^(id responseData) {
181-
NSLog(@"Got response! %@", responseData);
182-
}];
151+
[WebViewJavascriptBridge bridgeForWebView:webView];
183152
```
184153

185154
##### `[bridge registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler]`
@@ -192,6 +161,10 @@ Example:
192161
[self.bridge registerHandler:@"getScreenHeight" handler:^(id data, WVJBResponseCallback responseCallback) {
193162
responseCallback([NSNumber numberWithInt:[UIScreen mainScreen].bounds.size.height]);
194163
}];
164+
[self.bridge registerHandler:@"log" handler:^(id data, WVJBResponseCallback responseCallback) {
165+
NSLog(@"Log: %@", data);
166+
}];
167+
195168
```
196169
197170
##### `[bridge callHandler:(NSString*)handlerName data:(id)data]`
@@ -208,82 +181,39 @@ Example:
208181
}];
209182
```
210183

211-
#### Custom bundle
212-
`WebViewJavascriptBridge` requires `WebViewJavascriptBridge.js.txt` file that is injected into web view to create a bridge on JS side. Standard implementation uses `mainBundle` to search for this file. If you e.g. build a static library and you have that file placed somewhere else you can use this method to specify which bundle should be searched for `WebViewJavascriptBridge.js.txt` file:
213-
214-
##### `[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webView webViewDelegate:(UIWebViewDelegate*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle`
215-
216-
Example:
217-
218-
```objc
219-
[WebViewJavascriptBridge bridgeForWebView:_webView
220-
webViewDelegate:self
221-
handler:^(id data, WVJBResponseCallback responseCallback) {
222-
NSLog(@"Received message from javascript: %@", data);
223-
}
224-
resourceBundle:[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"ResourcesBundle" withExtension:@"bundle"]]
225-
];
226-
```
227-
228-
### Javascript API
184+
#### `[bridge setWebViewDelegate:UIWebViewDelegate*)webViewDelegate]`
229185

230-
##### `document.addEventListener('WebViewJavascriptBridgeReady', function onBridgeReady(event) { ... }, false)`
186+
Optionally, set a `UIWebViewDelegate` if you need to respond to the [web view's lifecycle events](http://developer.apple.com/library/ios/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html).
231187

232-
Always wait for the `WebViewJavascriptBridgeReady` DOM event.
233188

234-
Example:
235-
236-
```javascript
237-
document.addEventListener('WebViewJavascriptBridgeReady', function(event) {
238-
var bridge = event.bridge
239-
// Start using the bridge
240-
}, false)
241-
```
242189

243-
##### `bridge.init(function messageHandler(data, response) { ... })`
244190

245-
Initialize the bridge. This should be called inside of the `'WebViewJavascriptBridgeReady'` event handler.
191+
### Javascript API
246192

247-
The `messageHandler` function will receive all messages sent from ObjC via `[bridge send:(id)data]` and `[bridge send:(id)data responseCallback:(WVJBResponseCallback)responseCallback]`.
193+
##### `bridge.registerHandler("handlerName", function(responseData) { ... })`
248194

249-
The `response` object will be defined if if ObjC sent the message with a `WVJBResponseCallback` block.
195+
Register a handler called `handlerName`. The ObjC can then call this handler with `[bridge callHandler:"handlerName" data:@"Foo"]` and `[bridge callHandler:"handlerName" data:@"Foo" responseCallback:^(id responseData) { ... }]`
250196

251197
Example:
252198

253199
```javascript
254-
bridge.init(function(data, responseCallback) {
255-
alert("Got data " + JSON.stringify(data))
256-
if (responseCallback) {
257-
responseCallback("Right back atcha!")
258-
}
200+
bridge.registerHandler("showAlert", function(data) { alert(data) })
201+
bridge.registerHandler("getCurrentPageUrl", function(data, responseCallback) {
202+
responseCallback(document.location.toString())
259203
})
260204
```
261205

262-
##### `bridge.send("Hi there!")`
263-
##### `bridge.send({ Foo:"Bar" })`
264-
##### `bridge.send(data, function responseCallback(responseData) { ... })`
265206

266-
Send a message to ObjC. Optionally expect a response by giving a `responseCallback` function.
207+
##### `bridge.callHander("handlerName", data, function responseCallback(responseData) { ... })`
267208

268-
Example:
269-
270-
```javascript
271-
bridge.send("Hi there!")
272-
bridge.send("Hi there!", function(responseData) {
273-
alert("I got a response! "+JSON.stringify(responseData))
274-
})
275-
```
276-
277-
##### `bridge.registerHandler("handlerName", function(responseData) { ... })`
278-
279-
Register a handler called `handlerName`. The ObjC can then call this handler with `[bridge callHandler:"handlerName" data:@"Foo"]` and `[bridge callHandler:"handlerName" data:@"Foo" responseCallback:^(id responseData) { ... }]`
209+
Call an ObjC handler called `handlerName`. If `responseCallback` is defined, the ObjC handler can respond.
280210

281211
Example:
282212

283213
```javascript
284-
bridge.registerHandler("showAlert", function(data) { alert(data) })
285-
bridge.registerHandler("getCurrentPageUrl", function(data, responseCallback) {
286-
responseCallback(document.location.toString())
214+
bridge.callHandler("Log", "Foo")
215+
bridge.callHandler("getScreenHeight", null, function(response) {
216+
alert('Screen height:' + response)
287217
})
288218
```
289219

0 commit comments

Comments
 (0)