An iOS bridge for sending messages to and from javascript in a UIWebView
Just open the xcode project (requires xcode > 4.2) and hit run to see the example application work.
See WebViewJavascriptBridge/AppDelegate.* and WebViewJavascriptBridge/ExampleWebViewJavascriptBridgeDelegate.* for example code that works. Or, follow these steps:
-
Copy
Classes/WebViewJavascriptBridge.h
andClasses/WebViewJavascriptBridge.m
into your xcode project -
#import "WebViewJavascriptBridge.h"
-
Implement your javascript bridge delegate - it will handle all messages sent from the javascript
// MyJavascriptBridgeDelegate.h #import <Foundation/Foundation.h> #import "WebViewJavascriptBridge.h"
@interface MyJavascriptBridgeDelegate : NSObject
@end
// MyJavascriptBridgeDelegate.m @implementation MyJavascriptBridgeDelegate
- (void) handleMessage:(NSString *)message { NSLog(@"MyJavascriptBridgeDelegate received message: %@", message); }
@end
-
Instantiate a bridge, your delegate, and assign it to the web view
UIWebView *theWebView = ...; javascriptBridgeDelegate = [[ExampleWebViewJavascriptBridgeDelegate alloc] init]; javascriptBridge = [MyJavascriptBridgeDelegate createWithDelegate:javascriptBridgeDelegate]; theWebView.delegate = javascriptBridge;
-
Send some messages from objc to javascript
[javascriptBridge sendMessage:@"Well hello there"];
-
Finally, set up the javascript side of things
document.addEventListener('WebViewJavascriptBridgeReady', function() { WebViewJavascriptBridge.setMessageHandler(function(message) { alert("Got message from ObjC: " + message) }); WebViewJavascriptBridge.sendMessage('Right back atcha from the JS!'); }, false)