【问题标题】:Clear UIWebView content upon dismissal of modal view (iPhone OS 3.0)关闭模式视图时清除 UIWebView 内容(iPhone OS 3.0)
【发布时间】:2010-05-29 00:51:18
【问题描述】:

我目前有一个显示在模式视图中的 UIWebView。它基本上是一个详细视图,在用户单击链接时提供页面视图。当视图被关闭然后再次打开时(当用户单击另一个链接时),之前加载的内容仍然可见,并且新内容加载到最后一个内容的“顶部”。这是有道理的,因为 UIWebView 的实例在会话之间持续存在,并且仅在需要内存时才释放。

但是,我想在模式视图被关闭时完全清除 UIWebView,以便 1)清除内容和 2)释放内存。到目前为止,我的研究和尝试还没有找到答案。这些链接对我不起作用:

  1. is it possible to free memory of UIWebView?
  2. Reused UIWebView showing previous loaded content for a brief second on iPhone

我已经尝试[[NSURLCache sharedURLCache] removeAllCachedResponses]; 并将 webView 设置为 nil 并在 modal-view-dismiss 时手动释放 webView 无济于事。干瘪群众有什么想法吗?

【问题讨论】:

    标签: memory iphone-sdk-3.0 uiwebview modalviewcontroller


    【解决方案1】:

    有时loadHTMLString 太慢了。你也可以使用:

    [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];
    

    我不确定这是否会释放大量内存...

    【讨论】:

    • 完美!可能是 webview 视觉清除的最简单的解决方案。还是不明白为什么 loadHTMLString 这么慢。可能是因为我之后直接加载另一个页面,而webview在开始加载新页面时停止加载并显示空白页面。
    • 这里的最佳解决方案。不知道为什么这不是最佳投票答案。无论如何 - 很好的答案!
    • 这个方法最好的一点是委托方法webViewDidFinishLoad不会被调用!
    • 顺便说一句,这不会清除 pdf 格式的内容,知道吗?
    • 哇你解决了我的问题!!! javascript 解决方案比加载 nil 字符串解决方案快 50%!...非常感谢!
    【解决方案2】:

    释放 Web 视图可能是最好的方法。如果视图在视图层次结构中(具有超级视图),则必须调用 removeFromSuperview 以获取超级视图以释放视图。

    您还可以为空文档加载 html 字符串:

    [webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
    

    【讨论】:

      【解决方案3】:

      似乎在某些情况下,drawonward 和 rob 建议的方法可能不起作用(可能与正在清除的页面上的 CSS 有关),但这确实有效:

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

      【讨论】:

        【解决方案4】:

        评估 javascript 通常比加载新请求更快。

        [webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
        

        【讨论】:

        • 我见过的最佳答案。
        【解决方案5】:

        在我的情况下,我需要立即从其内容中清除 Web 视图,并能够立即开始加载其他内容。加载空文档 HTML 字符串或使用 JavaScript 清除页面都不会产生预期的效果。相反,我使用了:

        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];
        

        这会将视图清除为默认背景并按预期启动下一页的加载。

        我希望这对其他人也有帮助。

        【讨论】:

          【解决方案6】:

          我更喜欢以下:

          [m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
          

          【讨论】:

          • 你为什么喜欢它?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-29
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多