【问题标题】:How To Clear A UIWebView如何清除 UIWebView
【发布时间】:2011-07-04 21:18:19
【问题描述】:

我对整个编程业务很陌生,想知道是否有任何方法可以清除 iphone 编程中 UIWebView 的内容,以便下一个视图的加载符号不会出现在前面最后一个视图。 非常感谢, 托马斯

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    尝试将 URL 设置为 about:blank 并重新加载页面。

    【讨论】:

    • 谢谢伙计,我会投票给你,但我自己没有足够的排名
    • 知道不会导致webViewDidFinishLoad委托方法触发的替代方法吗? (nil'ing 委托是不可行的:clear 之后会立即加载另一个真实内容,因此请准备好委托以防快速响应......所以需要在第一次加载之后关闭委托,然后再打开之前第二次加载,但都是异步的,所以在第一次加载完成之前我不能阻塞)。
    • @BillPatterson 只需检查位置/网址。
    【解决方案2】:

    只需加载一个空的 html 字符串到其中

    [self.webView loadHTMLString:@"" baseURL:nil];

    【讨论】:

    • 无需设置'baseURL' ... [self.webView loadHTMLString:@"" baseURL:nil];
    • @ChrisAllinson 确定我根据你的建议简化了它
    • 我发现它不起作用,除非我专门传递一个 baseURL
    • 对我来说,这通过了A JavaScript exception occurred 大约一百万次,所以我改变了它,哈哈,它起作用了!
    【解决方案3】:

    用于文档目的的答案扩展可能会帮助其他人:

    我有同样的愿望(在加载下一个 url 之前清除内容),但设置了 UIWebView 委托来接收webviewDidFinishLoad:(UIWebView)webview 消息并更新 UI 的另一部分作为响应。

    问题:对清除内容的调用调用了委托方法,所以会出现错误命中(也就是说,在清除完成时也得到调用,但委托被编码为只期望调用加载真实内容时)。

    解决方案:使用已知 URL 进行清除,并让 webviewDidFinishLoad: 在该 URL 完成时忽略调用:

    - (void) startLoadOfNextURL:(NSURL*)url
    {
        // clear:
        [self.webView loadHTMLString:@"" baseURL:nil];
    
        // Load real next URL
        NSURLRequest* request = [NSURLRequest requestWithURL:url];
        [self.webView loadRequest:request];
    }
    
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        NSLog(@"WebView finished loading: %@", webView);
        if ([self.webView.request.URL.absoluteString isEqualToString:@"about:blank"]) {
            NSLog(@"  This is Blank. Ignoring as false event.");
        }
        else {
            NSLog(@"  This is a real url");
            [self updateUIInSomeWay];
        }
    }
    

    注意:使用这个:

        [self.webView loadHTMLString:@"about:blank" baseURL:nil];
    

    实际上导致单词“about:blank”在 webview 的内容窗格中显示为文本!

    最后的复杂情况:在实践中,由于我的两个 [webview load...] 调用如此接近,我发现 web 视图实际上取消了它以支持第二个请求并调用 @,而不是用于清除的“加载”事件987654326@ 用于第一个加载请求。因此,我不得不在那个事件中加入类似的代码:

    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
        NSLog(@"WebView error on: %@", webView);
        NSLog(@"Error is: %@", error);
    
        NSURL* failingURL = [error.userInfo objectForKey:@"NSErrorFailingURLKey"];
        if ([failingURL.absoluteString isEqualToString:@"about:blank"]) {
            NSLog(@"  This is Blank. Ignoring.");
        }
        else {
            NSLog(@"  This is a real URL.");
            [self doSomethingAboutError];
        }
    }
    

    【讨论】:

      【解决方案4】:

      斯威夫特,Xcode 7 测试版 5

      webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!))
      

      【讨论】:

        【解决方案5】:

        Swift 4.0,XCODE 9

        webView.loadRequest(URLRequest.init(url: URL.init(string: "about:blank")!))
        

        【讨论】:

          【解决方案6】:

          Swift 4.2、xCode 10

          中的答案相同
          if let clearURL = URL(string: "about:blank") {
             myWebView.loadRequest(URLRequest(url: clearURL))
          }
          

          【讨论】:

            猜你喜欢
            • 2013-02-09
            • 2011-02-01
            • 2012-05-23
            • 2016-01-18
            • 1970-01-01
            • 2011-07-25
            • 1970-01-01
            • 2013-04-16
            • 1970-01-01
            相关资源
            最近更新 更多