diff --git a/README.md b/README.md index 7bdd0299..d662c766 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ WebViewJavascriptBridge is used by a range of companies and projects. This list - Dojo4's [Imbed](http://dojo4.github.io/imbed/) - [CareZone](https://carezone.com) - [Hemlig](http://www.hemlig.co) +- [BrowZine](http://thirdiron.com/browzine/) Setup & Examples (iOS & OSX) ---------------------------- @@ -150,6 +151,15 @@ Example: NSLog(@"Current UIWebView page URL is: %@", responseData); }]; +##### `[bridge disableJavscriptAlertBoxSafetyTimeout:(BOOL)isDisabled]` + +Disable the use of setTimeout when sending a message across the bridge. It is only safe to disable this timeout if you do not call any of the javascript popup box functions (alert, confirm, and prompt). If you call one of these functions from the bridged javascript code, the app will hang. When this setTimeout call is not used, there can be a significant decrease in the amount of time it takes to send and receive messages across the bridge. + +Example: + + [self.bridge disableJavscriptAlertBoxSafetyTimeout:YES]; + + #### Custom bundle `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: @@ -181,12 +191,14 @@ Example: // Start using the bridge }, false) -##### `bridge.init(function messageHandler(data, response) { ... })` +##### `bridge.init(function messageHandler(data, response) { ... }, disableAlertSafety)` Initialize the bridge. This should be called inside of the `'WebViewJavascriptBridgeReady'` event handler. The `messageHandler` function will receive all messages sent from ObjC via `[bridge send:(id)data]` and `[bridge send:(id)data responseCallback:(WVJBResponseCallback)responseCallback]`. +The `disableAlertSafety` parameter has the same effect as calling `[bridge disableJavscriptAlertBoxSafetyTimeout:(BOOL)isDisabled]`. + The `response` object will be defined if if ObjC sent the message with a `WVJBResponseCallback` block. Example: diff --git a/WebViewJavascriptBridge/WebViewJavascriptBridge.h b/WebViewJavascriptBridge/WebViewJavascriptBridge.h index 9e90829f..b4f49f74 100644 --- a/WebViewJavascriptBridge/WebViewJavascriptBridge.h +++ b/WebViewJavascriptBridge/WebViewJavascriptBridge.h @@ -39,5 +39,6 @@ typedef void (^WVJBHandler)(id data, WVJBResponseCallback responseCallback); - (void)callHandler:(NSString*)handlerName; - (void)callHandler:(NSString*)handlerName data:(id)data; - (void)callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback; +- (void)disableJavscriptAlertBoxSafetyTimeout:(BOOL)isDisabled; @end diff --git a/WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt b/WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt index daa84ace..87b75eb0 100644 --- a/WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt +++ b/WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt @@ -10,6 +10,8 @@ var responseCallbacks = {} var uniqueId = 1 + + var disableDispatchTimeout = false function _createQueueReadyIframe(doc) { messagingIframe = doc.createElement('iframe') @@ -18,9 +20,10 @@ doc.documentElement.appendChild(messagingIframe) } - function init(messageHandler) { + function init(messageHandler, disableAlertSafety) { if (WebViewJavascriptBridge._messageHandler) { throw new Error('WebViewJavascriptBridge.init called twice') } WebViewJavascriptBridge._messageHandler = messageHandler + _disableJavascriptAlertBoxSafetyTimeout(disableAlertSafety) var receivedMessages = receiveMessageQueue receiveMessageQueue = null for (var i=0; i