iOS WebView重定向新开界面问题

今早进入公司打开App出现新的问题----用H5加载的页面出现了需要登录验证.
经过上网查证才知道是WebView页面重定向的导致.

介绍一下导致的原因:因为公司网络需要认证登录.
=================直接上图,贴代码=================

1、加载请求的方法---

- (void)loadData
{
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[DefaultsUserInfo shared].strMgrServeUrl,URL_HELP_FEEED]];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url
                                                  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                              timeoutInterval:10];

    [self.webView loadRequest:request];

    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { }];

    //用于解决网络超时的问题
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(request.timeoutInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [task cancel];
    });
}

2、WebView常用的代理的方法

#pragma mark - UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView;
- (void)webViewDidFinishLoad:(UIWebView *)webView;
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

以上三个方法的具体实现根据需求而定,这里不一一介绍了(懒得废话)

3、最重要却又容易忽略的方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

结合webViewDidFinishLoad:这里我贴出我的具体实现:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (self.webViewDidFinishLoad)
    {
        self.webViewDidFinishLoad(YES);
    }

    if ([self.webView.request.URL.absoluteString containsString:@"about:blank"])
    {
        NSError *err;
        [self webView:self.webView didFailLoadWithError:err];
    }
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ([request.URL.absoluteString containsString:[DefaultsUserInfo shared].strMgrServeUrl] ||[request.URL.absoluteString containsString:@"about:blank"])
    {
        return YES;
    }else {
        NSURL *url = [NSURL URLWithString:@"about:blank"];
        NSURLRequest *requestRedirect = [[NSURLRequest alloc] initWithURL:url
                                                       cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                                   timeoutInterval:10];
        [self.webView loadRequest:requestRedirect];
        return NO;
    }
}

具体介绍:
可根据request.URL.absoluteString获取到当前requestURL是否是我们实际App中请求的地址,若是则可继续返回Yes,继续等待服务器响应;否则,利用空白页代替之前请求(之所以用空白页是因为其他不确定因素会详情其他元素,影响App可观性).

=================谢谢观赏~~~=================

空白页打开方式,可百度得知.
about:blank是打开浏览器空白页的命令。


about:blank
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,606评论 8 265
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,288评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • WebView·开车指南 目录 WebView简介 WebView基本使用 WebView常用方法 WebSett...
    南城的人阅读 4,781评论 0 19
  • 好多年没写东西了,一直想再写点什么,却除了一手流水账,再写不出其他。 小学三年级老师布置家庭作业:写一...
    永和印刷荣阅读 169评论 0 0