我对Android webview有疑问.
假设URL A重定向到URL 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小时苦苦挣扎:(
the*_*ook 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++;
}
}
Run Code Online (Sandbox Code Playgroud)
private class HelloWebViewClient extends WebViewClient {
}
mWebView.setWebViewClient(new HelloWebViewClient());
Run Code Online (Sandbox Code Playgroud)
如果覆盖shouldOverrideUrlLoading(),则返回false.可能不是正确的方式,但它适用于我.
| 归档时间: |
|
| 查看次数: |
6637 次 |
| 最近记录: |