Advertisement

Android WebView重定向GOBACK问题

阅读量:

问题 :最近项目中遇到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();

**
**

全部评论 (0)

还没有任何评论哟~