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];
    }

0 0
原创粉丝点击