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,15 +15,15 @@ + (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
@@ -29,7 +35,9 @@ - (void)dealloc;
29
35
- (void )webViewDidFinishLoad : (UIWebView *)webView {
30
36
if (webView != self.webView ) { return ; }
31
37
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" ]) {
33
41
NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
34
42
NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
35
43
[webView stringByEvaluatingJavaScriptFromString: js];
@@ -50,6 +58,9 @@ - (void)webViewDidFinishLoad:(UIWebView *)webView {
50
58
51
59
- (void )webView : (UIWebView *)webView didFailLoadWithError : (NSError *)error {
52
60
if (webView != self.webView ) { return ; }
61
+
62
+ self.numRequestsLoading --;
63
+
53
64
__strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
54
65
if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:didFailLoadWithError: )]) {
55
66
[strongDelegate webView: webView didFailLoadWithError: error];
@@ -76,6 +87,9 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
76
87
77
88
- (void )webViewDidStartLoad : (UIWebView *)webView {
78
89
if (webView != self.webView ) { return ; }
90
+
91
+ self.numRequestsLoading ++;
92
+
79
93
__strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
80
94
if (strongDelegate && [strongDelegate respondsToSelector: @selector (webViewDidStartLoad: )]) {
81
95
[strongDelegate webViewDidStartLoad: webView];
0 commit comments