e];
}
}
/* Platform specific internals: iOS
**********************************/
#elif defined WVJB_PLATFORM_IOS
- (void) _platformSpecificSetup:(WVJB_WEBVIEW_TYPE*)webView {
_webView = webView;
_webView.delegate = self;
_base = [[WebViewjava scriptBridgeBase alloc] init];
_base.delegate = self;
}
- (void) _platformSpecificDealloc {
_webView.delegate = nil;
}
- (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];
}
}
//捕获url,并进行分析
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (webView != _webView) { return YES; }
NSURL *url = [request URL];
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if ([_base isCorrectProcotocolScheme:url]) {
if ([_base isBridgeLoadedURL:url]) {
[_base injectjava scriptFile];
} else if ([_base isQueueMessageURL:url]) {
NSString *messageQueueString = [self _eva luatejava script:[_base webViewjava scriptFetchQueyCommand]];
[_base flushMessageQueue:messageQueueString];
} else {
[_base logUnkownMessage:url];
}
return NO;
} else if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) {
return [strongDelegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType];
} else {
return YES;
}
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
if (webView != _webView) { return; }
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webViewDidStartLoad:)]) {
[strongDelegate webViewDidStartLoad:webView];
}
}
#endif
@end
WebViewjava scriptBridge是主要的JSBridge逻辑实现代码
Webview容器关键代码 实现
实现代码如下
建立JSBridge桥梁
- (void)viewDidLoad {
[super viewDidLoad];
// 一些其它操作
// WebViewjava scriptBridge
// 给webView建立JS和OC的沟通桥梁
[WebViewjava scriptBridge enableLogging];
self.bridge = [WebViewjava scriptBridge bridgeForWebView:self.wv];
[self.bridge setWebViewDelegate:self];
[self registAPIForJS];
}
注册API方法
- (void)registAPIForJS
{
// 测试原生方法
[self.bridge registerHandler:@"testNativeFunc" handler:^(id data, WVJBResponseCallback responseCallback) {
//可以这样获取参数
NSString *str = data[@"key值"];
//可以做一些自己的事情
}];
}
捕获url scheme并执行方法的代码
//关键是这句代码
[self.bridge setWebViewDelegate:self];
//然后再WebViewjava scriptBridge里就可以重新shouldStartLoadWithRequest来捕获url了