11#import " WebViewJavascriptBridge_OSX.h"
22
3+ @interface WebViewJavascriptBridge ()
4+
5+ @property (nonatomic , assign ) NSUInteger numRequestsLoading;
6+
7+ @end
8+
39@implementation WebViewJavascriptBridge
410
511+ (id )bridgeForWebView : (WebView *)webView handler : (WVJBHandler)handler {
@@ -17,15 +23,17 @@ + (id)bridgeForWebView:(WebView *)webView webViewDelegate:(id)webViewDelegate ha
1723 bridge.webView .frameLoadDelegate = bridge;
1824 bridge.webView .resourceLoadDelegate = bridge;
1925 bridge.webView .policyDelegate = bridge;
20-
26+
2127 return bridge;
2228}
2329
2430- (void )webView : (WebView *)webView didFinishLoadForFrame : (WebFrame *)frame
2531{
2632 if (webView != self.webView ) { return ; }
2733
28- if (![[self .webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
34+ self.numRequestsLoading --;
35+
36+ if (self.numRequestsLoading == 0 && ![[self .webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
2937 NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
3038 NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
3139 [self .webView stringByEvaluatingJavaScriptFromString: js];
@@ -45,6 +53,9 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
4553
4654- (void )webView : (WebView *)webView didFailLoadWithError : (NSError *)error forFrame : (WebFrame *)frame {
4755 if (webView != self.webView ) { return ; }
56+
57+ self.numRequestsLoading --;
58+
4859 if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didFailLoadWithError:forFrame: )]) {
4960 [self .webViewDelegate webView: self .webView didFailLoadWithError: error forFrame: frame];
5061 }
@@ -78,6 +89,9 @@ - (void)webView:(WebView *)webView didCommitLoadForFrame:(WebFrame *)frame {
7889
7990- (NSURLRequest *)webView : (WebView *)webView resource : (id )identifier willSendRequest : (NSURLRequest *)request redirectResponse : (NSURLResponse *)redirectResponse fromDataSource : (WebDataSource *)dataSource {
8091 if (webView != self.webView ) { return request; }
92+
93+ self.numRequestsLoading ++;
94+
8195 if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:resource:willSendRequest:redirectResponse:fromDataSource: )]) {
8296 return [self .webViewDelegate webView: webView resource: identifier willSendRequest: request redirectResponse: redirectResponse fromDataSource: dataSource];
8397 }
0 commit comments