【发布时间】: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有时可能不会被调用,从而可能阻止其中一个请求通过。不过,我对后者不太有信心。 -
根据我在应用程序中得到的日志,
shouldOverrideUrlLoading和onPageStarted可以按任意顺序调用,这很混乱。我还不知道在什么情况下会发生这种情况。
标签: android