版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ContainsK/article/details/57414784
問題:最近項目中遇到WebView在重定向時GOBACK不好用了!我在webview進行表單提交後,返回列表顯示提交成功,GOBACK後又進行了一次表單提交....就這樣一直循環。
分析:URLx--》URLa --》 URLb--》表單提交(重定向) --》URLa 根據需求,這時候我們在URLa GOBACK應該是返回到URLx的,但是因爲有重定向,它會返回到 "表單提交(重定向)"//相當於又提交了一次。
解決思路:建立一個url列表棧,將加載完畢的URL加入到棧,如果當前URL已經進入棧則清除它上面的其他URL 有點像Android裏的SingleTop模式。
代碼:
// WebView 配置
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 添加到url棧
addUrlStack(url);
}
});
// 添加url棧
protected void addUrlStack(String url) {
// TODO Auto-generated method stub
boolean isx = false;
for (int i = 0; i < urlStack.size(); i++) {
if (isx) {
urlStack.remove(i--);
continue;
}
String stack = urlStack.get(i);
if (stack.equals(url)) {
isx = true;
continue;
}
}
if (!isx)
urlStack.add(url);
}
// GOBACK
protected void webviewGoBack() {
if (urlStack.size() < 2)
finish();
else {
urlStack.remove(urlStack.size() - 1);
String url = urlStack.get(urlStack.size() - 1);
mWebView.loadUrl(url);
}
}
然後在需要GOBACK 的地方直接調用 webviewGoBack();