【问题标题】:How to determine when Android WebView is completely done loading?如何确定 Android WebView 何时完全完成加载?
【发布时间】:2011-08-01 01:37:17
【问题描述】:

我想知道如何确定 WebView 何时完全完成加载。

让我完全定义

  • 所有重定向都发生了
  • 页面可见,尚未加载任何内容

这个问题的答案不好:

WebViewClient.onPageFinished() - 如果有重定向加载页面,则会触发多次。它还会在页面显示之前触发。

PictureListener.onNewPicture() - 每次屏幕更改和 AFAICT 每次重定向时都会触发。我怎么知道最后一枪是哪一枪?

WebChromeClient.onProgressChanged() - 与 onPageFinished 相同的问题。 (在大卫建议下面这个解决方案后添加)

Thread.sleep(5000) - 应该很明显,为什么这是不可接受的。

当然,上述方法的巧妙组合将是完美的。

你问我为什么想知道这个? 因为我想在网络视图完全加载完成后一次注入一些javascript。

【问题讨论】:

  • 添加到您的WebViewClient.onPageFinished()“错误答案”:根据this,如果页面中有多个 iframe,它会触发多次
  • @Carlos Man 的位置与您完全相同。唯一让我的情况变得更糟的是 PictureListener 已被弃用。你能想出一个解决方案吗?我必须计算需要将内容宽度除以屏幕宽度的 web 视图中的总页数。但在页面完全呈现在屏幕上之前,我无法做到这一点。有什么解决办法吗?
  • @ArunavhKrishnan 上次我看这个是 3 年前。最后,我认为我做了类似于接受的答案的事情。祝你好运!
  • 您可以使用立即调用函数表达式 (IIFE) 或添加一个事件侦听器来侦听 DOM 就绪事件,而不是在页面加载完成后注入 JavaScript。有DOMContentLoaded 以及window.onloaddocument.ready

标签: javascript android webview


【解决方案1】:

感谢 David Caunt 建议查看响应标头。

我发现以下方法效果很好:

不要让 webview 执行 HTTP 请求,而是自己执行它们,这样您就可以检查重定向的 HTTP 状态代码。遵循重定向链。当您收到一个不是重定向的请求时,设置一个标志并通过webview.loadDataWithBaseURL 将数据发送到 webview。在WebViewClient.onPageFinished() 中检查了该标志,因此它知道所有重定向都已完成。此时可以注入javascript。当然,此时页面本身可能正在执行一些 javascript 操作,这很难知道,因此向 javascript 添加延迟(比如 500 毫秒)可以让 DOM 稳定下来。 setTimeout(function(){/* your code */}, 500).

【讨论】:

  • 知道有用!至于页面自己的javascript,很难检测到何时完成。
  • @Carlos Rendon +1 以获得出色的大纲。我很惊讶这不是在 WebView 或其任何附属接口中实现的。这个功能非常需要,但 WebView 人员唯一能做的就是弃用 PictureListener。知道为什么吗?
  • 虽然那时,我并不是唯一一个梦想着accessing the http response headers in a WebView的人。
【解决方案2】:

您是否考虑过设置自己的 WebChromeClient?

看起来onProgressUpdated 可能会在页面完全加载时通知您。

这似乎是Android内置浏览器使用的方法。

【讨论】:

  • 感谢您的建议。不幸的是,这与 WebViewClient.onPageFinished() 有相同的问题,由于重定向,它会触发多次。例如,在“gmail.com”上,它会触发 3 次,进度 == 100。
  • 进度的下一个0值什么时候进来?如果它在响应发出重定向后立即触发,则使用超时并假设您在最后一个请求上可能是安全的。否则,我会寻找一种方法来获取响应标头或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多