Android WebView 中 addJavascriptInterface 接口无效问题
2016-03-16 11:31
639 查看
转自:http://www.jianshu.com/p/2b9ed6aa13ec
Java 与 Javascript 交互
最近遇到这样一个需求,Android 程序中需要使用 WebView 来加载一个网页,而这个网页会根据请求的参数正确与否返回不同的内容。当请求参数正确,则返回正常显示的 HTML 页面。如果请求参数错误,直接返回 json。
所以,我们必须通过 WebView 来对页面内容做出区分,如果是正常的页面内容则显示,反之,则解析其中的 json。我们知道,WebView 提供了一个接口,可以让我们注入 Java 对象到页面中,这样,页面中的 javascript 就能直接访问 Java 对象的接口,从而实现 Java 和 Javascript 的交互。
首先必须启用 WebView 中的 Javascript 支持。
注入 Java 对象到 WebView 中。
Java 对象定义如下,需要特别注意的是,在 JELLY_BEAN_MR1 之后,只有 public 且添加了
Native Application 有点太可怕了。(没加注解,导致反射无效,查了好久也是醉了)
最后,在 WebView 载入完成后的回调方法中调用如下方法就能获得网页的内容了。
Java 与 Javascript 交互
最近遇到这样一个需求,Android 程序中需要使用 WebView 来加载一个网页,而这个网页会根据请求的参数正确与否返回不同的内容。当请求参数正确,则返回正常显示的 HTML 页面。如果请求参数错误,直接返回 json。
所以,我们必须通过 WebView 来对页面内容做出区分,如果是正常的页面内容则显示,反之,则解析其中的 json。我们知道,WebView 提供了一个接口,可以让我们注入 Java 对象到页面中,这样,页面中的 javascript 就能直接访问 Java 对象的接口,从而实现 Java 和 Javascript 的交互。
首先必须启用 WebView 中的 Javascript 支持。
webView.getSettings().setJavaScriptEnabled(true);
注入 Java 对象到 WebView 中。
webView.addJavascriptInterface(new JavascriptHandler(), "handler");
Java 对象定义如下,需要特别注意的是,在 JELLY_BEAN_MR1 之后,只有 public 且添加了
@JavascriptInterface注解的方法才能被调用。这也是为了安全考虑。毕竟页面可以直接操作
Native Application 有点太可怕了。(没加注解,导致反射无效,查了好久也是醉了)
class JavascriptHandler { @JavascriptInterface public void getContent(String htmlContent){ Log.i(TAG, "html content:" + htmlContent); }
最后,在 WebView 载入完成后的回调方法中调用如下方法就能获得网页的内容了。
@Override public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:window.handler.getContent(document.body.innerHTML);"); super.onPageFinished(view, url); }
相关文章推荐
- Html5 android 使用总结
- AndroidManifest.xml文件——安全属性(app风险)
- 深入浅出 - Android系统移植与平台开发(一)
- Android编译系统详解(一)
- Android图片海报制作软件开发实践
- Android开发四大组件
- GitHub Android Libraries Top 100 简介
- Android UrlEncodedFormEntity() 和 StringEntity() 的区别
- Android的内存泄漏和调试
- Android 开发之API兼容问题
- Android 对资源文件的优化
- Android 开发中使用 SQLite 数据库
- Android文字长度未超过屏幕宽度也可以滚动的TextView
- Android SDK开发 -- TitleBar重构 - 使用策略模式、舍弃代理模式
- 重新配置android开发环境(由32位到64位)
- Android界面设计适配不同屏幕的尺寸和密度解读
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- android L版本及4.4以下版本编译环境切换
- 向大牛迈进