Android WebViewClient';什么样的方法会被调用?
我的应用程序中有一个webview,首先加载a.html,单击a.html中的一个按钮,然后加载b.html,单击b.html中的一个按钮,然后启动一个活动。简而言之,顺序是a.html->b.html->开始一项活动。my webView扩展了WebViewClient,并覆盖其方法,如下所示Android WebViewClient';什么样的方法会被调用?,android,webview,webviewclient,Android,Webview,Webviewclient,我的应用程序中有一个webview,首先加载a.html,单击a.html中的一个按钮,然后加载b.html,单击b.html中的一个按钮,然后启动一个活动。简而言之,顺序是a.html->b.html->开始一项活动。my webView扩展了WebViewClient,并覆盖其方法,如下所示 private class WebViewHandler extends WebViewClient { @Override public void onPage
private class WebViewHandler extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
Log.d("onPageStarted", "onPageStarted:" + url );
mProgress.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url)
{
Log.d("onPageFinished", "onPageFinished:" + url );
mProgress.setVisibility(View.GONE);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
Log.d("url", "onPageoverloaded the url: "+url);
String tutorialId = url.substring(url.lastIndexOf("=") + 1);
MetaioDebug.log("Tutorial Id detected: "+tutorialId);
if (url.startsWith("metaio://"))
{
if (tutorialId != null)
{
MetaioDebug.log("Native code tutorial to be loaded #"+tutorialId);
if (tutorialId.equals("1"))
{
Intent intent = new Intent(getApplicationContext(), Tutorial1.class);
startActivity(intent);
}
return true;
}
}
问题是,onPageStarted()
仅在a.html开始加载时调用,而在b.html开始加载时不会调用shouldOverrideUrlLoading(WebView视图,字符串url)
仅在我单击b.html中的按钮时调用,而不是在a.html中调用
我很困惑这3个方法应该在什么时候被调用?我认为
onPageFinished()
应该返回false
从:
如果提供了WebViewClient,则返回true表示主机应用程序处理url,而返回false表示当前WebView处理url。
我不知道为什么它不能在a.html
上工作,但它可能与您的返回值有关,因为系统会在某个时候确定它是否会处理前进中的事情
至于你的onPageStarted
问题,我认为你看到了预期的行为
通知主机应用程序页面已开始加载。此方法对于每个主框架加载调用一次,因此带有iframe或frameset的页面将对主框架调用onpagestart一次。这也意味着,当嵌入帧的内容发生更改时,即单击目标为iframe的链接时,不会调用onPageStarted。
我认为您的WebView认为自己处于“完成”状态,因为它已经完成了您在a.html中要求它完成的原始渲染
一种解决方法是使用b.html创建并扩展新的WebView,以保证调用onPageFinished()
。我认为这取决于如何将b.html加载到webview中
您是否暗示您在加载b.html
后看到调用了onPageFinished()
,而不是onPageStarted()
?或者两人都没有接到电话
根据评论添加:
尝试以另一种方式加载b.html
,以便WebView了解它正在加载一个全新的资源:
让当前值为b.html
的href
生成一个JavaScript方法,该方法调用Java中调用类似以下内容的JavaScript接口对象:
webview.loadURL(“file:///b.html"); //或者无论b.html的文件位置是什么。
我认为这会让您的Web视图认为它正在加载一个新资源,因此同时调用
onPageStarted()
和onPageFinished()
来回答最后一个问题:是的,onPageFinished()在我加载b.html后调用,但在b.html开始加载时不调用onPageStarted()。顺序应该是onPageStarted()->onPageFinished(),但这里不是这样的。onPageFinished()
没有与onPageStarted()
相同的注释,它只被调用一次。对我来说,这意味着每次你(重新)加载资源时它都会被调用。不幸的是,我认为你看到了预期的行为。顺便问一下,你是如何加载b.html
?它是否与a.html的方法相同?您所说的“onPageFinished()没有与onPageStarted()相同的注释”是什么意思??在a.html中,加载b.htmlSorry时有这样一行
,因为它很模糊。。。我的意思是在Android文档评论中。签出此url(无法使链接在评论中工作)。,java.lang.String)