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,22 +15,24 @@ + (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
2430- (void )webViewDidFinishLoad : (UIWebView *)webView {
2531 if (webView != self.webView ) { return ; }
2632
27- if (![[self .webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
33+ self.numRequestsLoading --;
34+
35+ if (self.numRequestsLoading == 0 && ![[self .webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
2836 NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
2937 NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
3038 [self .webView stringByEvaluatingJavaScriptFromString: js];
@@ -44,6 +52,7 @@ - (void)webViewDidFinishLoad:(UIWebView *)webView {
4452
4553- (void )webView : (UIWebView *)webView didFailLoadWithError : (NSError *)error {
4654 if (webView != self.webView ) { return ; }
55+ self.numRequestsLoading --;
4756 if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didFailLoadWithError: )]) {
4857 [self .webViewDelegate webView: self .webView didFailLoadWithError: error];
4958 }
@@ -68,6 +77,7 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
6877
6978- (void )webViewDidStartLoad : (UIWebView *)webView {
7079 if (webView != self.webView ) { return ; }
80+ self.numRequestsLoading ++;
7181 if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webViewDidStartLoad: )]) {
7282 [self .webViewDelegate webViewDidStartLoad: webView];
7383 }
0 commit comments