ios - UIWebView 显示 UIActivityIndi​​cator 用于加载,但在页面初始加载后忽略其他加载请求(例如 javascript 加载的广告)

标签 ios uiwebview loading uiactivityindicatorview

这是一个问答帖子。为了通知我在浏览 StackOverflow 的数据库时遇到过这个问题的许多其他用户。这些用户都没有得到可靠的答案(他们中的大多数人几年前就提出了这个问题,所以我不打算修改帖子)。


许多人遇到的问题如下:

当您尝试在 UIWebView 中加载一个页面,然后该页面可能通过 iFrame 加载另一个页面,或者它通过 javascript 加载广告时,您最终会再次调用页面加载函数,如果您使用的是 UIActivityIndi​​cator,它将也会再次被调用并惹恼您的用户。

解决这个问题的方法是存储以前的 MainURL 并检查正在尝试加载的新 MainURL,如果它们匹配则忽略加载函数。 (下面我的回答中的示例代码)

**在网页已经真正加载后将调用 webViewDidStartLoad 方法的网页示例如下:www.speakeasy.net/speedtest/

最佳答案

//Define the NSStrings "lastURL" & "currentURL" in the .h file.
//Define the int "falsepositive" in the .h file. (You could use booleans if you want)
//Define your UIWebView's delegate (either in the xib file or in your code `<UIWebViewDelegate>` in .h and `webView.delegate = self;` in .m viewDidLoad)

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    lastURL = [NSString stringWithFormat:@"%@", webView.request.mainDocumentURL];
    if (falsepositive != 1) {
        NSLog(@"Loaded");
        //hide UIActivityIndicator
    } else {
        NSLog(@"Extra content junk (i.e. advertisements) that the page loaded with javascript has finished loading");
        //This method may be a good way to prevent ads from loading hehe, but we won't do that
    }
}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
    NSURL *requestURL = [request mainDocumentURL];
    currentURL = [NSString stringWithFormat:@"%@", requestURL]; //not sure if "%@" should be used for an NSURL but it worked..., could cast `(NSString *)` if we *really* wanted to...
    return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    if ([currentURL isEqualToString:lastURL]) {
        falsepositive = 1;
        NSLog(@"The page is loading extra content with javascript or something, ignore this");
    } else {
        falsepositive = 0;
        NSLog(@"Loading");
        //show UIActiviyIndicator
    }
}

//make sure you read the //comments// at the top of this code snippet so that you properly define your .h variables O:) Thanks!



//

关于ios - UIWebView 显示 UIActivityIndi​​cator 用于加载,但在页面初始加载后忽略其他加载请求(例如 javascript 加载的广告),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466621/

相关文章:

ios - Swift 2.0 错误处理显示警告

iphone - UIWebView Fontsize 和 UItextView Fontsize 之间的区别

javascript - 在 UIWebView 中滚动网页

iphone - 如何从 XML 中获取值

ios - 在 swift 中为 for 循环添加延迟

javascript - 如何通过 javascript 手动显示选项卡加载指示器?

javascript - 使用 get() 加载页面之前加载图像

javascript - 有些 JS 加载,有些则不加载

ios - 从 firebase 检索数据 - Swift

ios - 在 iphone 应用程序中逐页显示 html 页面