2012-03-21 61 views
6

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

onPageStarted()

通知页面已经开始加载主机应用程序。这种方法对于每个主框架负载都被调用一次,所以带有iframe或框架集的页面将为主框架调用onPageStarted一次。这也意味着,当嵌入帧的内容改变时,不会调用onPageStarted,即点击目标是iframe的链接。

shouldOverrideUrlLoading()

给主机应用程序的机会,当一个新的URL是关于在当前的WebView要加载接管控制权。如果未提供WebViewClient,则默认情况下,WebView将要求活动管理器为URL选择适当的处理程序。如果提供了WebViewClient,则返回true表示主机应用程序处理url,而返回false表示当前的WebView处理该url。

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

感谢

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

+0

如果你在'shouldOverrideUrlLoading()'返回true,那么'onPageStarted()'不会被调用。除此之外,如果有两个请求背对背,onPageStart有时可能不会被调用,因此可能会阻止其中一个请求通过。不过,我对后者并不太自信。 – Jakar 2014-06-03 02:44:44

+0

根据我在我的应用程序中得到的日志,可以按任何顺序调用'shouldOverrideUrlLoading'和'onPageStarted',这很令人困惑。我还没有发现在哪种情况下会发生这种情况。 – Stan 2016-01-01 20:20:01

回答

1

我知道这个问题是旧的,但无论如何回答。 AFAIK,shouldOverrideUrlLoading()将被调用,因为onPageStart()将仅被调用用于页面的顶部url的页面中的每个url。

+1

看来,你将'shouldOverrideUrlLoading'与'shouldInterceptRequest'混淆。第一个每页仅调用一次,第二个用于每个http请求(如果它是你称之为“url”的)。 – Stan 2016-01-01 20:27:13

相关问题