WebViewClient - onPageStarted()与shouldOverrideUrlLoading()有什么区别?

6
我正在使用WebViewClient。我们是否总是应该看到与shouldOverrideUrlLoading()回调配对的onPageStarted()回调?如果我在我的WebView中加载example.com,我们是否应该看到两个方法都被回调?根据文档:
onPageStarted()
通知托管应用程序页面已开始加载。对于每个主框架加载,将调用一次此方法,因此具有iframe或frameset的页面将为主框架调用一次onPageStarted。这也意味着当嵌入式框架的内容更改时,即点击目标为iframe的链接时,不会调用onPageStarted。
shouldOverrideUrlLoading()
在当前WebView即将加载新URL时,使宿主应用程序有机会接管控制权。如果未提供WebViewClient,则默认情况下,WebView将要求Activity Manager选择适当的处理程序来处理URL。如果提供了WebViewClient,则返回true表示宿主应用程序处理URL,而返回false表示当前WebView处理URL。
我在每种方法中放置了一个日志语句,并且我看到它们并不总是成对出现。什么情况下它们不会成对出现?
谢谢

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


如果在shouldOverrideUrlLoading()中返回true,则不会调用onPageStarted()。除此之外,如果有两个连续的请求,可能会导致onPageStart有时不被调用,从而可能阻止其中一个请求通过。虽然我对后者不是很自信。 - Reed
根据我在应用程序中获得的日志,shouldOverrideUrlLoadingonPageStarted 可以以任意顺序调用,这非常令人困惑。我还没有找出发生这种情况的具体情形。 - Stan
1个回答

1
我知道这个问题很老,但还是要回答一下。据我所知,shouldOverrideUrlLoading()将会针对页面中的每一个URL进行调用,而onPageStart()只会针对页面顶部的URL进行调用。

2
看起来,你正在混淆shouldOverrideUrlLoadingshouldInterceptRequest。第一个仅在每个页面调用一次,而第二个是针对每个http请求的(如果这就是你所称呼的“url”)。 - Stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接