android WebView交互优化

安卓的WebView一般是嵌套在activity或者fragment中的,但是如果在这种activity页面上点击返回按钮,一般会finish掉当前activity.其实是应该关闭当前的WebView的界面,回到前一个连接的地址.一般我们使用一下的方法来实现.

if(webView.canGoback()){//在这里如果无法再往回后退的话,那么就会返回false,那么就可以执行自己的逻辑代码了.

webView.goBack();

}

接下来是Webview界面的一些常用的配置:

mainWebView.getSettings().setJavaScriptEnabled(true);
mainWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mainWebView.getSettings().setAppCacheEnabled(false);
mainWebView.getSettings().setSupportZoom(true);
mainWebView.getSettings().setSaveFormData(false);
mainWebView.getSettings().setDomStorageEnabled(true);
mainWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mainWebView.getSettings().setUseWideViewPort(false);
mainWebView.setWebViewClient(new WebViewClient() {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("billPaySuccess.jsp")){
  Intent intent = new Intent();
  intent.setClass(getApplicationContext(), OrderPaySucActivity.class);
  intent.putExtra("orderPayBean", orderPayBean);
  startActivity(intent);
  finish();
}else
  mainWebView.loadUrl(url);
return true;
}

});

mainWebView.loadUrl(webUrlsl);

下面是对返回按钮的监听事件:

public boolean onKeyDown(int keyCode, KeyEvent keyEvent){

  if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {
  if (goBackView != null) {
    goBackView.performClick();
  } else
    finish();
 return true;
  }
  return super.onKeyDown(keyCode, event);

}

当按下返回键时,如果当前页面存在返回按钮那么相当于点击了返回按钮,如果没有返回按钮的话则finish掉当前页面.这样只在返回按钮的监听器中完成逻辑就可以了.

补充:

1.在网上看到网友有介绍下面这个东西的,没测试过怎么样

  关于webview的加载栈,后来发现webview本身也有对应的API

  //获取历史

  WebBackForwardList mWebBackForwardList = webView.copyBackForwardList(); 

2.该网友的另外一篇关于webview的使用的文章写得不错,可以看看哦

    Android WebView常见问题及解决方案汇总

  http://blog.csdn.net/t12x3456/article/details/13769731

  Android WebView Touch事件及相关问题处理

  http://blog.csdn.net/t12x3456/article/details/17565171

原文地址:https://www.cnblogs.com/yiludugufei/p/4432203.html