【问题标题】:how can I clear the contents of a UIWebView/WKWebView?如何清除 UIWebView/WKWebView 的内容?
【发布时间】:2016-01-18 22:43:37
【问题描述】:

我有一个可以通过不同 URL 循环的 webview。当我从一个切换到另一个时,我希望旧网页在加载下一个之前消失。如何在不重新分配 webview 的情况下做到这一点?

如果我尝试[self.webView loadHTMLString:@"" baseURL:nil]; 并在同一函数中加载我的 URL,则之前的网页仍然存在:

[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.pageURL]];

编辑:这显然对你来说不够清楚。以下代码不会清除 webview,它会显示上一页,直到加载新页面:

- (void) startLoadOfNextURL:(NSURL*)url
{
    // clear:
    [self.webView loadHTMLString:@"" baseURL:nil]; //DOESNT WORK  

    // Load real next URL
    NSURLRequest* request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
}

【问题讨论】:

  • 你能请教一下吗?请参阅下面的链接,该链接讨论了如何清除 webview stackoverflow.com/questions/6576154/how-to-clear-a-uiwebview
  • 它没有回答我的问题
  • 您需要清除旧网页并正确加载新网页,我尝试了以下提到链接的方法,它帮助我尝试将 URL 设置为 about:blank 并重新加载页面。
  • 再次阅读我的问题 - 我想清除页面并立即加载网页,即(网页 -> 点击 -> 空白 -> 新页面)
  • @CarienvanZyl 我认为唯一可靠的方法是重新初始化网络视图

标签: ios wkwebview


【解决方案1】:

您可以在控制器关闭时编写以下代码。

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

【讨论】:

    【解决方案2】:

    你可以让它加载一个空白页面

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
    

    【讨论】:

    • 我知道,但我想清除网页视图然后立即加载新页面
    • 这个答案是解决您问题的关键。只需将 about:blank 加载到 clear 页面,然后加载您需要的任何内容。
    • 但是我不能在同一个函数中做这两个(页面不清晰,请阅读我的问题)
    【解决方案3】:

    以下代码清屏然后导航

    斯威夫特

    webView.evaluateJavaScript("document.documentElement.remove()") { (_, _) in
        self.webView.load(urlRequest)
    }
    

    【讨论】:

      【解决方案4】:

      改用 JavaScript。

      webView.evaluateJavaScript("document.body.remove()")
      

      【讨论】:

        【解决方案5】:

        清除webview的旧内容

        当您调用- loadHTMLString:baseURL: 时,它不会阻塞,直到加载完成。一旦它记录了您的请求,它就会返回并在后台加载。

        因此,您需要等待第一次加载完成后才能启动新的加载请求。

        对于UIWebView,您将使用UIWebViewDelegate's - webViewDidFinishLoad:.

        使用 WKWebView,您将使用 WKNavigationDelegate's - webView:didFinishNavigation:

        如果您真的想在没有委托方法的情况下清除内容,另一种方法是使用 JavaScript(例如https://stackoverflow.com/a/4241420/3352624)。然后对于 UIWebView,您可以调用 - stringByEvaluatingJavaScriptFromString:。该方法将阻止执行,直到 JavaScript 执行并返回。

        对于WKWebView,您需要执行https://stackoverflow.com/a/30894786/3352624 之类的操作,因为它的- evaluateJavaScript:completionHandler: 不会阻塞。

        使旧内容“消失”

        如果你真的只是想让“旧网页消失”,你可以暂时用一个空白的 UIView 覆盖 webview 的内容区域。您可以在启动加载时隐藏内容,然后在加载完成后使用上面的委托方法显示内容。

        【讨论】:

          【解决方案6】:

          斯威夫特

          webView.load(URLRequest(url: URL(string: "about:blank")!))
          
          DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
             //Load request or write code here
          })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-12
            • 2010-12-19
            • 2019-11-13
            • 1970-01-01
            相关资源
            最近更新 更多