1
1
#import " WebViewJavascriptBridge_iOS.h"
2
2
3
+ @interface WebViewJavascriptBridge ()
4
+
5
+ @property (nonatomic , assign ) NSUInteger numRequestsLoading;
6
+
7
+ @end
8
+
3
9
@implementation WebViewJavascriptBridge
4
10
5
11
#pragma mark UIWebViewDelegate
@@ -9,22 +15,24 @@ + (instancetype)bridgeForWebView:(UIWebView *)webView handler:(WVJBHandler)handl
9
15
}
10
16
11
17
+ (instancetype )bridgeForWebView : (UIWebView *)webView webViewDelegate : (id <UIWebViewDelegate>)webViewDelegate handler : (WVJBHandler)messageHandler {
12
- WebViewJavascriptBridge* bridge = [[WebViewJavascriptBridge alloc ] init ];
18
+ WebViewJavascriptBridge* bridge = [[[ self class ] alloc ] init ];
13
19
bridge.messageHandler = messageHandler;
14
20
bridge.webView = webView;
15
21
bridge.webViewDelegate = webViewDelegate;
16
22
bridge.messageHandlers = [NSMutableDictionary dictionary ];
17
23
[bridge reset ];
18
24
19
25
[webView setDelegate: bridge];
20
-
26
+
21
27
return bridge;
22
28
}
23
29
24
30
- (void )webViewDidFinishLoad : (UIWebView *)webView {
25
31
if (webView != self.webView ) { return ; }
26
32
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" ]) {
28
36
NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
29
37
NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
30
38
[self .webView stringByEvaluatingJavaScriptFromString: js];
@@ -44,6 +52,7 @@ - (void)webViewDidFinishLoad:(UIWebView *)webView {
44
52
45
53
- (void )webView : (UIWebView *)webView didFailLoadWithError : (NSError *)error {
46
54
if (webView != self.webView ) { return ; }
55
+ self.numRequestsLoading --;
47
56
if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didFailLoadWithError: )]) {
48
57
[self .webViewDelegate webView: self .webView didFailLoadWithError: error];
49
58
}
@@ -68,6 +77,7 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
68
77
69
78
- (void )webViewDidStartLoad : (UIWebView *)webView {
70
79
if (webView != self.webView ) { return ; }
80
+ self.numRequestsLoading ++;
71
81
if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webViewDidStartLoad: )]) {
72
82
[self .webViewDelegate webViewDidStartLoad: webView];
73
83
}
0 commit comments