参考:http://blog.csdn.net/it1039871366/article/details/46372207
在Android版本功能开发中遇到一个新的需求,在WebView的HTML中点击按钮或触发事件然后android客户端进行处理,如跳转Activity、请求接口等,刚开始听到这个需求有些懵,因为对于WebView的了解确实不够深入,没有丝毫头绪,只好求助百度,百度上看到了几篇博客,也就是关于WebView与js之间的交互,参考相关博客,完成了这次的需求。
Android端:
wv.getSettings().setJavaScriptEnabled(true); wv.addJavascriptInterface(mContext, "JavaScriptInterface"); //设置 缓存模式 wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // 开启 DOM storage API 功能 wv.getSettings().setDomStorageEnabled(true); wv.setWebChromeClient(new MyWebViewClient()); // 防止WebView自动启动浏览器 wv.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { String headStr = "targeturl://"; if (url.length() != 0 && url.startsWith(headStr)) { int index = url.indexOf(headStr) + headStr.length(); //获得方法名 String targetUrl = url.substring(index); targetDetail(targetUrl); return true; } else { view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // TODO Auto-generated method stub // super.onReceivedError(view, errorCode, description, failingUrl); rl_loadding.setVisibility(View.GONE); iv_loadding.clearAnimation(); rl_reset.setVisibility(View.VISIBLE); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); rl_loadding.setVisibility(View.VISIBLE); iv_loadding.startAnimation(operatingAnim); } @Override public void onPageFinished(WebView view, String url) { rl_loadding.setVisibility(View.GONE); iv_loadding.clearAnimation(); } });
需要开启 setJavaScriptEnabled(true);
Html端:
var jumpContent=document.getElementById("jump611");jumpContent.οnclick=function(){ window.location.href="targeturl://https://www.baidu.com"; }
代码分析:
参考js交互完成此次需求,刚开始准备仿照交互案例,做出这样的功能,可项目除了Android客户端之外,还有ios版本,考虑到兼容问题,所以使用另一种办法,在js中进行link跳转,然后在android端中对跳转进行截取,匹配到字符串"targeturl://"后获取到后面写的参数,即"https://www.baidu.com",然后进行android端操作,如打开、如接受ActivityName,通过反射方法进行客户端内跳转、打开应用等等