11#import " WebViewJavascriptBridge_iOS.h"
22
3+ @interface WebViewJavascriptBridge ()
4+
5+ @property (nonatomic , assign ) NSUInteger numRequestsLoading;
6+
7+ @end
8+
39@implementation WebViewJavascriptBridge
410
511#pragma mark UIWebViewDelegate
@@ -9,15 +15,15 @@ + (instancetype)bridgeForWebView:(UIWebView *)webView handler:(WVJBHandler)handl
915}
1016
1117+ (instancetype )bridgeForWebView : (UIWebView *)webView webViewDelegate : (id <UIWebViewDelegate>)webViewDelegate handler : (WVJBHandler)messageHandler {
12- WebViewJavascriptBridge* bridge = [[WebViewJavascriptBridge alloc ] init ];
18+ WebViewJavascriptBridge* bridge = [[[ self class ] alloc ] init ];
1319 bridge.messageHandler = messageHandler;
1420 bridge.webView = webView;
1521 bridge.webViewDelegate = webViewDelegate;
1622 bridge.messageHandlers = [NSMutableDictionary dictionary ];
1723 [bridge reset ];
1824
1925 [webView setDelegate: bridge];
20-
26+
2127 return bridge;
2228}
2329
@@ -29,7 +35,9 @@ - (void)dealloc;
2935- (void )webViewDidFinishLoad : (UIWebView *)webView {
3036 if (webView != self.webView ) { return ; }
3137
32- if (![[webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
38+ self.numRequestsLoading --;
39+
40+ if (self.numRequestsLoading == 0 && ![[webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
3341 NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
3442 NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
3543 [webView stringByEvaluatingJavaScriptFromString: js];
@@ -50,6 +58,9 @@ - (void)webViewDidFinishLoad:(UIWebView *)webView {
5058
5159- (void )webView : (UIWebView *)webView didFailLoadWithError : (NSError *)error {
5260 if (webView != self.webView ) { return ; }
61+
62+ self.numRequestsLoading --;
63+
5364 __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
5465 if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:didFailLoadWithError: )]) {
5566 [strongDelegate webView: webView didFailLoadWithError: error];
@@ -76,6 +87,9 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
7687
7788- (void )webViewDidStartLoad : (UIWebView *)webView {
7889 if (webView != self.webView ) { return ; }
90+
91+ self.numRequestsLoading ++;
92+
7993 __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
8094 if (strongDelegate && [strongDelegate respondsToSelector: @selector (webViewDidStartLoad: )]) {
8195 [strongDelegate webViewDidStartLoad: webView];
0 commit comments