h5与原生态混编,一般情况下是在VC中插入一个webview,在webview(网上第三方比较好的WKWebView网页视图)中加载h5的地址url,使用的功能大部分主要分为:
1、原生oc调用js
在网页加载完成之后,在成功回调方法中:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"在JS中Alert弹出的message"];
[_webView stringByEvaluatingJavaScriptFromString:jsStr];
}
或者用JavaScriptCore库
- (void)webViewDidFinishLoad:(UIWebView *)webView{
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('在JS中Alert弹出的message')";
[context evaluateScript:textJS];
}
2、js调用原生oc
使用JavaScriptCore库
- (void)webViewDidFinishLoad:(UIWebView *)webView{
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"js_share"] = ^{
NSArray *arg = [JSContext currentArguments];
if(arg && arg.count){
JSValue *value = arg[0];
NSString *string = value.toString;
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
[self shareButtonAction:dict];
}
};
}
3、原生oc通过代理监听url
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSLog(@"%@", request.URL);
if([request.URL.absoluteString hasSuffix:@"/login"]){
LoginViewController *vc = [CommonMethod getVCFromNib:[LoginViewController class]];
[self.navigationController pushViewController:vc animated:YES];
[self.webView reload];
return NO;
}
}
最后如何清除webview的缓存
//清除cookie
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]){
[storage deleteCookie:cookie];
}
//清除UIWebView的缓存
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSURLCache * cache = [NSURLCache sharedURLCache];
[cache removeAllCachedResponses];
[cache setDiskCapacity:0];
[cache setMemoryCapacity:0];