在开发中时常会用到webView,当用到webView加载页面的时候,对于开发方便了很多,但是也会遇到一个问题:webView和iOS原生页面如何进行交互。
点击webView的某个按钮,iOS原生页面需要进行相应,如何实现?
//点击按钮功能,JS调用OC拦截请求
var u = navigator.userAgent.toLowerCase();
var isApple = /(iphone|ipad|ipod|ios)/i.test(u);
var isAndroid = /android/i.test(u);
$("#close").on('click',function () {
var u = navigator.userAgent.toLowerCase();
if(isApple){
//apple终端
window.location = 'close://';
}else if(isAndroid){
//安卓终端
if(window.AndroidBridge){
window.AndroidBridge.close();
}
}
});
以上代码是加在webView的按钮中的(iOS开发人员看不明白的话,给公司相应的写js的工作人员看就可以了)。
在加在webView的页面声明属性
@property (nonatomic, strong, readonly) JSContext *jsContext;
加载webView
UIWebView *wkWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, ScreenWidth,ScreenHeight-64)];
wkWebView.backgroundColor = [UIColor whiteColor];
wkWebView.delegate = self;
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"需要加在的页面链接"]];
[wkWebView loadRequest:request];
self.wkWebView = wkWebView;
[self.view addSubview:self.wkWebView];
webView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//�➡️第一种方案,JS发起一个假的URL请求,然后拦截这次请求,再做相应的处理⬅️
NSString *scheme = [request.URL scheme];
scheme = [scheme lowercaseString];
if ([scheme isEqualToString:@"close"]) {
NSLog(@"拦截了close操作");
return NO;
}
return YES;
}