Repository navigation
Expand file tree
/
Copy pathSHRMUIWebViewJavaScriptBridge.m
More file actions
executable file
·103 lines (81 loc) · 3.33 KB
/
Copy pathSHRMUIWebViewJavaScriptBridge.m
File metadata and controls
executable file
·103 lines (81 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// SHRMUIWebViewJavaScriptBridge.m
// Hybrid-framework
//
// Created by Kevin on 2019/4/14.
// Copyright © 2019 王凯. All rights reserved.
//
#import "SHRMUIWebViewJavaScriptBridge.h"
#import "SHRMWebViewEngine.h"
#import "UIWebView+TS_JavaScriptContext.h"
@interface SHRMUIWebViewJavaScriptBridge () <TSWebViewDelegate>
@property (nonatomic, strong) SHRMWebViewEngine *webViewEngine;
@end
@implementation SHRMUIWebViewJavaScriptBridge {
__weak UIWebView *_webView;
}
+ (instancetype)bindBridgeWithWebView:(UIWebView *)webView {
return [[self alloc] initWithWebView:webView];
}
- (instancetype)initWithWebView:(UIWebView *)webView {
if (self = [super init]) {
_webView = webView;
_webView.delegate = self;
}
return self;
}
- (void)setWebViewDelegate:(NSObject<UIWebViewDelegate> *)webViewDelegate {
_webViewDelegate = webViewDelegate;
}
#pragma mark - uiwebview delegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
if (webView != _webView) { return; }
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webViewDidStartLoad:)]) {
[strongDelegate webViewDidStartLoad:webView];
}
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (webView != _webView) { return; }
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webViewDidFinishLoad:)]) {
[strongDelegate webViewDidFinishLoad:webView];
}
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if (webView != _webView) { return; }
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) {
[strongDelegate webView:webView didFailLoadWithError:error];
}
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (webView != _webView) { return YES;}
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) {
return [strongDelegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType];
}else {
return YES;
}
}
#pragma mark - TSWebViewDelegate
- (void)webView:(UIWebView *)webView didCreateJavaScriptContext:(JSContext*)ctx {
__weak SHRMUIWebViewJavaScriptBridge *weakSelf = self;
ctx[@"postUIWebViewParamer"] = ^(NSArray *paramer){
dispatch_async( dispatch_get_main_queue(), ^{
[weakSelf.webViewEngine.webViewhandleFactory handleMsgCommand:paramer];
});
};
}
#pragma mark - setter&getter
- (void)setWebViewEngine:(SHRMWebViewEngine *)webViewEngine {
_webViewEngine = webViewEngine;
}
#pragma mark - SHRMJavaScriptBridgeProtocol
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id , NSError * ))completionHandler {
NSString* ret = [(UIWebView*)_webView stringByEvaluatingJavaScriptFromString:javaScriptString];
if (completionHandler) {
completionHandler(ret, nil);
}
}
@end