【问题标题】:how does one check if UIWebView is empty or not如何检查 UIWebView 是否为空
【发布时间】:2011-09-28 10:37:15
【问题描述】:

我需要检查完成加载后的 webview 是否有任何内容。

我需要的很简单。它在我的页面底部有一个小的 webview 条(如广告)

我打电话

NSURLRequest *request=[NSURLRequest requestWithURL:adURL];
[gWebView loadRequest:request];

我收到回调

-(void)webViewDidFinishLoad:(UIWebView *)webView {

但在我的场景中,webview 将返回空,有时它会包含数据。

如果我的服务器 php 文件没有返回任何内容,我不想显示 webview。

如何验证我在回调(或任何其他方式)中收到了一个空页面?

【问题讨论】:

    标签: ios uiwebview uiwebviewdelegate


    【解决方案1】:

    如果您正在加载 HTML 页面:

    NSString *string = [myWebView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML"];
    BOOL isEmpty = string==nil || [string length]==0;
    

    或者您可以先加载内容,测试它是否不为空,然后将其提供给 webview。请参阅UIWebView's loadHTMLString:baseURL:loadData:MIMEType:textEncodingName:baseURL:

    【讨论】:

    • 这可行,但它在字符串中返回“”,尽管我可以通过检查是否在字符串中得到它来使其工作。感谢您的帮助。
    • 对“一年后发表评论”感到抱歉,但这可能会有所帮助。只需将 ('html') 更改为 ('body') 即可。
    • 我试图用它来检测是否已经加载了格式错误的 PDF 文件(或者,实际上,没有加载),并且“body”和“html”都不能用于此目的。有趣的是,在 iOS7 上,如果 PDF 文档格式错误,委托方法 didFailLoadWithError 不会被调用。
    【解决方案2】:

    这是基于 Jano 的方法,但性能应该更好:

    NSString *script = @"document.getElementsByTagName('body')[0].innerHTML.length";
    NSString *length = [self.webView stringByEvaluatingJavaScriptFromString:script];
    
    if (length.integerValue > 0) {
        NSLog(@"not empty");
    }
    

    【讨论】:

      【解决方案3】:

      只是回复一个旧帖子,但也许新来的人会觉得它有用。我在同样的问题上苦苦挣扎,发现这个解决方案适用于我的情况:

      if (webView.request.URL.absoluteURL == nil) {
              NSLog(@"nil webby");
              NSLog(@"url: %@", webView.request.URL.absoluteURL);
              // Perform some task when the url is nil
          } else {
              NSLog(@"loaded webby");
              NSLog(@"url: %@", webView.request.URL.absoluteURL);
              // Perform some task when the url is loaded
      }
      

      您可以从 webViewDidFinishLoad: 方法中调用它。

      【讨论】:

        【解决方案4】:

        就我而言,我希望检测 PDF 是否格式错误。即,由于无法加载 PDF,Web 视图将为空。由于在 iOS 7.1.1 中,我没有收到 didFailLoadWithError 委托回调,因此我需要一种不同的方法来执行此操作。在尝试将 PDF 文档加载到 Web 视图之前,我最终使用了以下方法。

        // See https://developer.apple.com/library/ios/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html
        - (BOOL) isValidPDFDoc: (NSURL *) deviceLocalURL {
            CFStringRef path;
            CFURLRef url;
            CGPDFDocumentRef document;
            size_t count;
            BOOL validDocument = YES;
        
            // Must use path of URL not absoluteString here.
            path = CFStringCreateWithCString (NULL, [[deviceLocalURL path] cStringUsingEncoding:NSASCIIStringEncoding],
                                              kCFStringEncodingUTF8);
            url = CFURLCreateWithFileSystemPath (NULL, path, // 1
                                                 kCFURLPOSIXPathStyle, 0);
            CFRelease (path);
            document = CGPDFDocumentCreateWithURL (url);// 2
            if (!document) {
                validDocument = NO;
            }
        
            CFRelease(url);
            count = CGPDFDocumentGetNumberOfPages (document);// 3
            if (count == 0) {
                validDocument = NO;
            }
        
            CGPDFDocumentRelease (document);
        
            return validDocument;
        }
        

        【讨论】:

          猜你喜欢
          • 2017-11-15
          • 2020-05-29
          • 2018-04-02
          • 2016-04-05
          • 2018-01-08
          • 2020-09-25
          • 2012-01-15
          • 2016-07-16
          • 2021-08-14
          相关资源
          最近更新 更多