【问题标题】:WebViewClient - onPageStarted() vs shouldOverrideUrlLoading()?WebViewClient - onPageStarted() 与 shouldOverrideUrlLoading()?
【发布时间】:2012-04-06 04:42:30
【问题描述】:

我正在使用 WebViewClient。我们是否应该看到 onPageStarted() 回调总是与 shouldOverrideUrlLoading() 回调配对?如果我在我的 WebView 中加载 example.com,我们是否应该看到这两种方法都被回调?来自文档:

onPageStarted()

通知主机应用程序页面已开始加载。每次加载主框架时都会调用一次此方法,因此具有 iframe 或框架集的页面将为主框架调用一次 onPageStarted。这也意味着当嵌入框架的内容发生变化时,不会调用 onPageStarted,即单击目标为 iframe 的链接。

shouldOverrideUrlLoading()

当一个新的 url 即将被加载到当前的 WebView 中时,给宿主应用程序一个接管控制权的机会。如果未提供 WebViewClient,默认情况下 WebView 将要求 Activity Manager 为 url 选择正确的处理程序。如果提供了 WebViewClient,则返回 true 表示宿主应用程序处理 url,返回 false 表示当前 WebView 处理 url。

我在每个方法中都放置了一个日志语句,我发现它们并不总是配对在一起。在什么情况下不会?

谢谢

http://developer.android.com/reference/android/webkit/WebViewClient.html

【问题讨论】:

  • 如果你在shouldOverrideUrlLoading() 上返回true,那么onPageStarted() 将不会被调用。除此之外,如果有两个背靠背请求,onPageStart 有时可能不会被调用,从而可能阻止其中一个请求通过。不过,我对后者不太有信心。
  • 根据我在应用程序中得到的日志,shouldOverrideUrlLoadingonPageStarted 可以按任意顺序调用,这很混乱。我还不知道在什么情况下会发生这种情况。

标签: android


【解决方案1】:

我知道这个问题很老,但还是要回答。 AFAIK,将为页面中的每个 url 调用 shouldOverrideUrlLoading() ,而 onPageStart() 将仅针对页面的顶部 url 调用。

【讨论】:

  • 看来,您将shouldOverrideUrlLoadingshouldInterceptRequest 混淆了。第一个每个页面只调用一次,第二个是针对每个 http 请求(如果它是您所说的“url”)。
猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多