@@ -7,7 +7,7 @@ + (id)bridgeForWebView:(WebView *)webView handler:(WVJBHandler)handler {
7
7
}
8
8
9
9
+ (id )bridgeForWebView : (WebView *)webView webViewDelegate : (id )webViewDelegate handler : (WVJBHandler)messageHandler {
10
- WebViewJavascriptBridge* bridge = [[WebViewJavascriptBridge alloc ] init ];
10
+ WebViewJavascriptBridge* bridge = [[[ self class ] alloc ] init ];
11
11
bridge.messageHandler = messageHandler;
12
12
bridge.webView = webView;
13
13
bridge.webViewDelegate = webViewDelegate;
@@ -25,10 +25,10 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
25
25
{
26
26
if (webView != self.webView ) { return ; }
27
27
28
- if (![[self . webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
28
+ if (![[webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
29
29
NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
30
30
NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
31
- [self . webView stringByEvaluatingJavaScriptFromString: js];
31
+ [webView stringByEvaluatingJavaScriptFromString: js];
32
32
}
33
33
34
34
if (self.startupMessageQueue ) {
@@ -38,48 +38,53 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
38
38
self.startupMessageQueue = nil ;
39
39
}
40
40
41
- if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didFinishLoadForFrame: )]) {
42
- [self .webViewDelegate webView: webView didFinishLoadForFrame: frame];
41
+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
42
+ if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:didFinishLoadForFrame: )]) {
43
+ [strongDelegate webView: webView didFinishLoadForFrame: frame];
43
44
}
44
45
}
45
46
46
47
- (void )webView : (WebView *)webView didFailLoadWithError : (NSError *)error forFrame : (WebFrame *)frame {
47
48
if (webView != self.webView ) { return ; }
48
- if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didFailLoadWithError:forFrame: )]) {
49
- [self .webViewDelegate webView: self .webView didFailLoadWithError: error forFrame: frame];
49
+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
50
+ if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:didFailLoadWithError:forFrame: )]) {
51
+ [strongDelegate webView: strongDelegate didFailLoadWithError: error forFrame: frame];
50
52
}
51
53
}
52
54
53
55
- (void )webView : (WebView *)webView decidePolicyForNavigationAction : (NSDictionary *)actionInformation request : (NSURLRequest *)request frame : (WebFrame *)frame decisionListener : (id <WebPolicyDecisionListener >)listener
54
56
{
55
57
if (webView != self.webView ) { [listener use ]; }
56
58
NSURL *url = [request URL ];
59
+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
57
60
if ([[url scheme ] isEqualToString: kCustomProtocolScheme ]) {
58
61
if ([[url host ] isEqualToString: kQueueHasMessage ]) {
59
62
[self _flushMessageQueue ];
60
63
} else {
61
64
NSLog (@" WebViewJavascriptBridge: WARNING: Received unknown WebViewJavascriptBridge command %@ ://%@ " , kCustomProtocolScheme , [url path ]);
62
65
}
63
66
[listener ignore ];
64
- } else if ([self . webView resourceLoadDelegate ]
65
- && [self .webViewDelegate respondsToSelector: @selector (webView:decidePolicyForNavigationAction:request:frame:decisionListener: )]) {
66
- [self .webViewDelegate webView: webView decidePolicyForNavigationAction: actionInformation request: request frame: frame decisionListener: listener];
67
+ } else if ([webView resourceLoadDelegate ]
68
+ && [strongDelegate respondsToSelector: @selector (webView:decidePolicyForNavigationAction:request:frame:decisionListener: )]) {
69
+ [strongDelegate webView: webView decidePolicyForNavigationAction: actionInformation request: request frame: frame decisionListener: listener];
67
70
} else {
68
71
[listener use ];
69
72
}
70
73
}
71
74
72
75
- (void )webView : (WebView *)webView didCommitLoadForFrame : (WebFrame *)frame {
73
76
if (webView != self.webView ) { return ; }
74
- if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:didCommitLoadForFrame: )]) {
75
- [self .webViewDelegate webView: webView didCommitLoadForFrame: frame];
77
+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
78
+ if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:didCommitLoadForFrame: )]) {
79
+ [strongDelegate webView: webView didCommitLoadForFrame: frame];
76
80
}
77
81
}
78
82
79
83
- (NSURLRequest *)webView : (WebView *)webView resource : (id )identifier willSendRequest : (NSURLRequest *)request redirectResponse : (NSURLResponse *)redirectResponse fromDataSource : (WebDataSource *)dataSource {
80
84
if (webView != self.webView ) { return request; }
81
- if (self.webViewDelegate && [self .webViewDelegate respondsToSelector: @selector (webView:resource:willSendRequest:redirectResponse:fromDataSource: )]) {
82
- return [self .webViewDelegate webView: webView resource: identifier willSendRequest: request redirectResponse: redirectResponse fromDataSource: dataSource];
85
+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
86
+ if (strongDelegate && [strongDelegate respondsToSelector: @selector (webView:resource:willSendRequest:redirectResponse:fromDataSource: )]) {
87
+ return [strongDelegate webView: webView resource: identifier willSendRequest: request redirectResponse: redirectResponse fromDataSource: dataSource];
83
88
}
84
89
85
90
return request;
0 commit comments