问题:最近项目中遇到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();
新闻热点
疑难解答