Skip to content

Commit 9f30d44

Browse files
committed
Conflicts: WebViewJavascriptBridge_OSX/WebViewJavascriptBridge_OSX.m WebViewJavascriptBridge_iOS/WebViewJavascriptBridge_iOS.m
2 parents 1dd9c74 + 82ef902 commit 9f30d44

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

WebViewJavascriptBridge_OSX/WebViewJavascriptBridge_OSX.m

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
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
+ (instancetype)bridgeForWebView:(WebView *)webView handler:(WVJBHandler)handler {
@@ -17,7 +23,7 @@ + (instancetype)bridgeForWebView:(WebView *)webView webViewDelegate:(id)webViewD
1723
bridge.webView.frameLoadDelegate = bridge;
1824
bridge.webView.resourceLoadDelegate = bridge;
1925
bridge.webView.policyDelegate = bridge;
20-
26+
2127
return bridge;
2228
}
2329

@@ -32,7 +38,9 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
3238
{
3339
if (webView != self.webView) { return; }
3440

35-
if (![[webView stringByEvaluatingJavaScriptFromString:@"typeof WebViewJavascriptBridge == 'object'"] isEqualToString:@"true"]) {
41+
self.numRequestsLoading--;
42+
43+
if (self.numRequestsLoading == 0 && ![[webView stringByEvaluatingJavaScriptFromString:@"typeof WebViewJavascriptBridge == 'object'"] isEqualToString:@"true"]) {
3644
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"WebViewJavascriptBridge.js" ofType:@"txt"];
3745
NSString *js = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
3846
[webView stringByEvaluatingJavaScriptFromString:js];
@@ -53,6 +61,8 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
5361

5462
- (void)webView:(WebView *)webView didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame {
5563
if (webView != self.webView) { return; }
64+
self.numRequestsLoading--;
65+
5666
__strong typeof(self.webViewDelegate) strongDelegate = self.webViewDelegate;
5767
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:didFailLoadWithError:forFrame:)]) {
5868
[strongDelegate webView:strongDelegate didFailLoadWithError:error forFrame:frame];
@@ -89,6 +99,9 @@ - (void)webView:(WebView *)webView didCommitLoadForFrame:(WebFrame *)frame {
8999

90100
- (NSURLRequest *)webView:(WebView *)webView resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource {
91101
if (webView != self.webView) { return request; }
102+
103+
self.numRequestsLoading++;
104+
92105
__strong typeof(self.webViewDelegate) strongDelegate = self.webViewDelegate;
93106
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:)]) {
94107
return [strongDelegate webView:webView resource:identifier willSendRequest:request redirectResponse:redirectResponse fromDataSource:dataSource];

WebViewJavascriptBridge_iOS/WebViewJavascriptBridge_iOS.m

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
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

Comments
 (0)