我对Android webview有疑问。
假设网址A重定向到网址B.
我的Android应用程序在尝试打开URL A时,webview会自动重定向到URL B.
如果将URL重定向到其他某个URL,我会看到这两个URL都存储在webview历史记录中。现在我的webview历史记录包含[,,URL A,URL B]
在从URL B网页点击后退键,webview将尝试加载URL A,再次重定向到URL B.我们需要双击后退键才能返回到URL A之外
如何解决此问题?从过去2小时开始苦苦挣扎:(
答案 0 :(得分:11)
我也有同样的问题,并想出如何解决它。这就像你的一样。当我点击第一个链接(www.new.a)时,它会自动重定向其他链接(mobile.new.a)。通常链接重定向两个或三个,我的解决方案几乎在每个重定向链接上都有效。我希望这个答案可以帮助你改进重定向链接。
我终于明白了。您需要一个包含四个API的WebViewClient。 WebViewClient中有shouldOverrideUrlLoading(),onPageStarted(),onPageFinished()和doUpdateVisitedHistory()。您需要的所有API都是API 1,所以不用担心。
就是这样。您可以使用其他函数而不是onKeyUp()。
public class MyWebView extends WebView{
...
private int mRedirectedCount=0;
....
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && this.canGoBack()) {
if(mRedirectedCount>0){
while(mRedirectedCount>0){
this.goBack();
mRedirectedCount--;
}
mRedirectedCount=0; //clear
}else{
this.goBack();
}
return true;
}
private class MyWebViewClinet extends WebViewClient{
boolean mIsPageFinished=true;
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
.....
if(mIsPageFinished){
mRedirectedCount=0; //clear count
}
.....
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
mIsPageFinished = false;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mIsPageFinished = true;
}
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
if(!mIsPageFinished){
mRedirectedCount++;
}
}
答案 1 :(得分:5)
private class HelloWebViewClient extends WebViewClient {
}
mWebView.setWebViewClient(new HelloWebViewClient());
如果覆盖shouldOverrideUrlLoading()
,则返回false。
可能不是正确的方法,但它适用于我。
答案 2 :(得分:0)
我也有问题,现在已经解决了问题。
**如果提供了WebViewClient,则返回true表示主机应用程序处理url,而return false表示当前WebView处理url。 **
答案 3 :(得分:-1)
尝试覆盖OnBackPressed()以覆盖默认的硬键返回操作。你可以完成当前的活动或控制你想要的方式。