iOS WebView与h5
来源:互联网 发布:软件平台建设规划 编辑:程序博客网 时间:2024/05/16 18:50
@interface BasicWebViewController ()
{
NSString *_requestUrl;
NSURLRequest *_lastRequest;
JSContext *_jsContext;NSMutableArray *_requestArray;//依次请求的requestNSInteger _ViewCounts;//当前H5加载页数NSDictionary *_navigationParam;//从H5请求来的导航栏信息UIActivityIndicatorView *_activityIndicator;BOOL _specialJumpJs;
}
@end
@implementation BasicWebViewController
-(void)loadView
{
_webView = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];
_webView.backgroundColor = [UIColor colorWithRed:0.92 green:0.92 blue:0.92 alpha:1];
_webView.scrollView.showsHorizontalScrollIndicator = NO;
_webView.scrollView.showsVerticalScrollIndicator = NO;
_webView.delegate = self;
self.view = _webView;
}
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// self.navigationController.navigationBarHidden = NO;
[self navigationConfig];NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
NSString *str = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
NSString *url1 = [NSString stringWithFormat:@”%@%@?data=%@”,AppServer,_urlStr,str];
if([_specialParameter length] != 0)
{
url1 = [NSString stringWithFormat:@”%@%@?%@”,AppServer_Address2,_urlStr,_specialParameter];
}
NSString *url = [url1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
_requestUrl = url;NSURLRequest *webRequset = [NSURLRequest requestWithURL:[NSURL URLWithString:_requestUrl]];
[self addHeaderRequest:webRequset];
}
//导航栏样式
- (void)navigationConfig
{
if(_isHideLeftItem)
{
_backButton.hidden = YES;
}
else
{
_backButton.hidden = NO;
}
self.navigationController.navigationBarHidden = NO;
_requestArray = [NSMutableArray array];
}
-(void)backViewController
{
if(_ViewCounts > 1)
{
_ViewCounts–;
[_requestArray removeLastObject];
[self addHeaderRequest:_requestArray.lastObject];
_ViewCounts–;
[_requestArray removeLastObject];
}
else
{
[super backViewController];
}
}
-(void)cancelAction
{
[self.navigationController popViewControllerAnimated:YES];
}
-(void)addHeaderRequest:(NSURLRequest *)request
{
NSMutableURLRequest *mutableRequest = [request mutableCopy];
request = [mutableRequest copy];
_lastRequest = request;if(_requestArray.count > 0){ for (int i = 0; i < _requestArray.count-1; i++) { if([_lastRequest.URL isEqual:[_requestArray[i] URL]]) { _ViewCounts = i; [_requestArray removeObjectsInRange:NSMakeRange(i, _requestArray.count - i)]; break; } }}[_requestArray addObject:request];_ViewCounts++;[_webView loadRequest:request];
}
-(BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType
{
if(![request.URL isEqual:_lastRequest.URL])
{
[self addHeaderRequest:request];
}
return YES;
}
(void) webViewDidStartLoad:(UIWebView *)webView
{
//创建UIActivityIndicatorView背底半透明View
UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
[view setTag:108];
[view setBackgroundColor:[UIColor lightGrayColor]];
[view setAlpha:0.8];
[self.view addSubview:view];_activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[_activityIndicator setCenter:self.view.center];
[_activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
[view addSubview:_activityIndicator];[_activityIndicator startAnimating];
}(void)removeActivity
{
[_activityIndicator stopAnimating];
UIView view = (UIView)[self.view viewWithTag:108];
[view removeFromSuperview];
}(void)webView:(UIWebView )webView didFailLoadWithError:(nullable NSError )error
{
[self removeActivity];
NSString *urlString = [[error userInfo] objectForKey:@”NSErrorFailingURLStringKey”];
//在这里处理异常信息,例如需要登录,则需设置viewcounts =1
}
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
[self removeActivity];if(_jsContext == nil){ // 1. _jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; BFLOG(@"_jsContext = %@",_jsContext);}// 2. 关联打印异常_jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) { context.exception = exceptionValue;};__weak typeof(self) weakSelf = self;_jsContext[@"callAppFunc"] = ^(id param) { [weakSelf navigationType:param]; };// Mozilla/5.0 (iPhone; CPU iPhone OS 10_10 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411id userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; //js方法名+参数NSString* jsCode = @"sendDatatoApp()";//调用html页面的js方法[webView stringByEvaluatingJavaScriptFromString:jsCode];if(_isHideLeftItem && _ViewCounts == 1){ _backButton.hidden = YES;}else{ _backButton.hidden = NO;}
}
(void)navigationType:(id)param
{
_navigationParam = [NSJSONSerialization JSONObjectWithData:[param dataUsingEncoding:NSUTF8StringEncoding]
options:NSJSONReadingMutableContainers
error:nil];
if([_navigationParam[@”rightBtn”][@”text”] length] > 0)//文字类 右Item
{
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:_navigationParam[@”rightBtn”][@”text”] style:UIBarButtonItemStylePlain target:self action:@selector(toNext)];
}
if([_navigationParam[@”rightBtn”][@”img”] length] > 0)//图片类 右Item
{
if([_navigationParam[@”rightBtn”][@”img”] isEqualToString:@”search-lcon”])
{
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@”search”] style:UIBarButtonItemStylePlain target:self action:@selector(toNext)];
}
else
{
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:_navigationParam[@”rightBtn”][@”img”]] style:UIBarButtonItemStylePlain target:self action:@selector(toNext)];
}
}
if([_navigationParam[@”rightBtn”][@”text”] length] == 0 && [_navigationParam[@”rightBtn”][@”img”] length] == 0)
{
self.navigationItem.rightBarButtonItem = nil;
}
// 加一个刷新按钮
if([_navigationParam[@”title”] isEqualToString:@”—”])
{
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];
}
if([_navigationParam[@”jump”] length] > 0)
{
if([_navigationParam[@”jump”] isEqualToString:@”dock”])
{
[_webView reload];
self.tabBarController.selectedIndex = 0;
}
}
}(void)toNext
{
NSURLRequest *request;
if([_navigationParam[@”rightBtn”][@”url”] length] > 0)
{
request = [NSURLRequest requestWithURL:[NSURL URLWithString:_navigationParam[@”rightBtn”][@”url”]]];
[self addHeaderRequest:request];
}
if([_navigationParam[@”rightBtn”][@”js”] length] > 0)
{
_specialJumpJs = YES;
//js方法名+参数
NSString* jsCode = [NSString stringWithFormat:@”%@”,_navigationParam[@”rightBtn”][@”js”]];
//调用html页面的js方法
[_webView stringByEvaluatingJavaScriptFromString:jsCode];
}
}(void)refreshAction
{
[self addHeaderRequest:_requestArray.lastObject];
}
- iOS WebView与h5
- iOS webview与H5的交互
- webview与h5交互
- iOS webView与H5的交互(返回页面的处理)
- iOS webView与H5的交互(返回页面的处理)
- iOS webView与H5的交互(返回页面的处理)
- WebView与H5的交互
- Webview 与h5的交互
- Webview 与h5的交互
- WebView与H5那些事儿
- iOS WebView获取H5界面代码
- H5与iOS交互
- iOS 与H5交互
- iOS 与h5交互
- iOS 与H5交互
- iOS与H5交互
- iOS 与 h5 交互
- iOS与h5交互
- 2016个人计划
- PAT (Basic Level)1024. 科学计数法
- libpq简单示例
- Storm里executor数量如何产生,acker如何分配的
- 上海1套房8个月涨500万 购房者:干30年不如买房
- iOS WebView与h5
- spring自定义标签实现
- 【总结】PHP常见面试题汇总(三)
- 图像验证码识别(五)——去除噪点
- Android Intent调用大全、系统自带Intent调用大全
- unity中事件分发系统 EventDispatcher
- Exercise #4
- C# Lambda表达式、匿名、回调
- WIFI基本知识整理