@@ -7,7 +7,7 @@ + (id)bridgeForWebView:(WebView *)webView handler:(WVJBHandler)handler {
77}
88
99+ (id )bridgeForWebView : (WebView *)webView webViewDelegate : (id )webViewDelegate handler : (WVJBHandler)messageHandler {
10- WebViewJavascriptBridge* bridge = [[WebViewJavascriptBridge alloc ] init ];
10+ WebViewJavascriptBridge* bridge = [[[ self class ] alloc ] init ];
1111 bridge.messageHandler = messageHandler;
1212 bridge.webView = webView;
1313 bridge.webViewDelegate = webViewDelegate;
@@ -25,10 +25,10 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
2525{
2626 if (webView != self.webView ) { return ; }
2727
28- if (![[self . webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
28+ if (![[webView stringByEvaluatingJavaScriptFromString: @" typeof WebViewJavascriptBridge == 'object'" ] isEqualToString: @" true" ]) {
2929 NSString *filePath = [[NSBundle mainBundle ] pathForResource: @" WebViewJavascriptBridge.js" ofType: @" txt" ];
3030 NSString *js = [NSString stringWithContentsOfFile: filePath encoding: NSUTF8StringEncoding error: nil ];
31- [self . webView stringByEvaluatingJavaScriptFromString: js];
31+ [webView stringByEvaluatingJavaScriptFromString: js];
3232 }
3333
3434 if (self.startupMessageQueue ) {
@@ -38,48 +38,53 @@ - (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)frame
3838 self.startupMessageQueue = nil ;
3939 }
4040
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];
4344 }
4445}
4546
4647- (void )webView : (WebView *)webView didFailLoadWithError : (NSError *)error forFrame : (WebFrame *)frame {
4748 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];
5052 }
5153}
5254
5355- (void )webView : (WebView *)webView decidePolicyForNavigationAction : (NSDictionary *)actionInformation request : (NSURLRequest *)request frame : (WebFrame *)frame decisionListener : (id <WebPolicyDecisionListener >)listener
5456{
5557 if (webView != self.webView ) { [listener use ]; }
5658 NSURL *url = [request URL ];
59+ __strong typeof (self.webViewDelegate ) strongDelegate = self.webViewDelegate ;
5760 if ([[url scheme ] isEqualToString: kCustomProtocolScheme ]) {
5861 if ([[url host ] isEqualToString: kQueueHasMessage ]) {
5962 [self _flushMessageQueue ];
6063 } else {
6164 NSLog (@" WebViewJavascriptBridge: WARNING: Received unknown WebViewJavascriptBridge command %@ ://%@ " , kCustomProtocolScheme , [url path ]);
6265 }
6366 [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];
6770 } else {
6871 [listener use ];
6972 }
7073}
7174
7275- (void )webView : (WebView *)webView didCommitLoadForFrame : (WebFrame *)frame {
7376 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];
7680 }
7781}
7882
7983- (NSURLRequest *)webView : (WebView *)webView resource : (id )identifier willSendRequest : (NSURLRequest *)request redirectResponse : (NSURLResponse *)redirectResponse fromDataSource : (WebDataSource *)dataSource {
8084 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];
8388 }
8489
8590 return request;
0 commit comments