Skip to content

Commit 5ec6c29

Browse files
author
Peyton Randolph
committed
add OS X support
1 parent b06988f commit 5ec6c29

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

WebViewJavascriptBridge_OSX/WebViewJavascriptBridge_OSX.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
@interface WebViewJavascriptBridge : WebViewJavascriptBridgeAbstract
55

6-
@property (nonatomic, strong) WebView *webView;
7-
@property (nonatomic, strong) id webViewDelegate;
6+
@property (nonatomic, weak) WebView *webView;
7+
@property (nonatomic, weak) id webViewDelegate;
88

99
+ (id)bridgeForWebView:(WebView*)webView handler:(WVJBHandler)handler;
1010
+ (id)bridgeForWebView:(WebView*)webView webViewDelegate:(id)webViewDelegate handler:(WVJBHandler)handler;

WebViewJavascriptBridge_OSX/WebViewJavascriptBridge_OSX.m

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)