码迷,mamicode.com
首页 > Web开发 > 详细

webViewDidFinishLoad 执行多次的问题

时间:2015-12-25 09:59:00      阅读:1459      评论:0      收藏:0      [点我收藏+]

标签:

在做网页加载进度条的时候,发现UIWebViewDelegate中webViewDidFinishLoad方法会执行多次:

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"start******");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"end....");
}

  查阅网上资料,说网页内有异步请求或者重定向时,就会多次调用上述方法,然后证实异步请求是不是有这种情况:

例子中加载本地html文件,用js模拟异步请求:

  加载本地html:

    NSString * path = [[NSBundle mainBundle] pathForResource:@"demo11" ofType:@"html"];
    NSString * HTMLString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    [self.webView1 loadHTMLString:HTMLString baseURL:nil];

 

  js代码:

    var xhr = new XMLHttpRequest();
    xhr.open("GET","http://localhost:8080/myweb1/testserlet",true);
    xhr.send("name");
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                alert("success!");
            }else{
                alert("failed"+xhr.status);
            }
            
        }
    }

发现webViewDidFinishLoad并没有多次执行,那么剩下的原因就是网页的重定向

解决办法是用webView.isLoading属性

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (webView.isLoading) {
        return;
    }
   //code... 
}

这样每进入一个新的网页,webViewDidFinishLoad只执行一次。

 

 

或者折中方法,让次方法只执行一次的话(不管网页的跳转):

定义一个属性:@property(nonatomic) BOOL isFirstLoadWeb;

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (!self.isFirstLoadWeb) {
        self.isFirstLoadWeb = YES;
    }else
        return;
    //code...
}

  

 

 

 先这样吧,如果有理解错误的,后边再改。。。

 

webViewDidFinishLoad 执行多次的问题

标签:

原文地址:http://www.cnblogs.com/yingu/p/5074306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!