Android WebView 中 addJavascriptInterface 接口无效问题

转自:http://www.jianshu.com/p/2b9ed6aa13ec

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值