Android WebView与JavaScript交互(续)

记得之前写过一个Android WebView与JavaScript交互的文章,记得当时写完还是一阵激动的,完成了老大的交付的任务,就可以~呵呵呵~了,今天一不小心看到了一篇文章中提到用addJavascriptInterface()方法在Android 4.2以前的设备上并不能安全的访问,具体请参见Android WebView的Js对象注入漏洞解决方案这篇博客,里面详细介绍了如何出现漏洞以及漏洞的解决方案。很不幸,我们的应用要兼容到4.0的版本,所以需要一个解决方案来解决4.2以前不安全的问题,上述博客中讲到的解决方案有点繁琐,像我等懒货只能另寻它法了。终于让我找到了一个较简便的方案来完成这个功能。具体请参拜为WebView中的Java与JavaScript提供【安全可靠】的多样互通方案

  • 下面进入使用环节:
    首先,要添加项目依赖,这样我们才能使用大牛完成的功能。

Maven

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.3</version>
</dependency>
<dependency>
  <groupId>cn.pedant.safewebviewbridge</groupId>
  <artifactId>library</artifactId>
  <version>1.4</version>
  <type>aar</type>
</dependency>

Gradle

dependencies {
    compile 'cn.pedant.safewebviewbridge:library:1.4'
}

等项目依赖添加完成后就可以快乐的使用大牛开发的功能了。
主要的WebView一些设置问题已经在Android WebView与JavaScript交互一文中有了详细的介绍,有需要的淫可以去看看,我们直接进入safe-java-js-webview-bridge使用环节。
新建一个class文件,名为HostJsScope.java,里面的方法全部定义为public静态方法,且必须包含WebView这个参数,请见下面的代码片段:

public static void toastMessage(WebView webView, String message) {
        Toast.makeText(webView.getContext(), message, Toast.LENGTH_LONG).show();
    }

方法中只是简单的调用了Android的Toast的提示功能,在看看如何调用。

<input type="button" onclick="toastMessage('渠道发生')" value="测试JavaJsBridge"/>

在as.html中定义一个按钮,点击调用as.js中的方法toastMessae()方法,接下来看看toastMessae()方法的具体内容:

function toastMessage(message) {
        window.HostApp.toastMessage(ss)
    }

没错,就是这么简单,你就可以方便的在WebView中调用Android中原生的方法了。哦,忘了说了,需要在Activity中关联到HostJsScope,具体代码:

wvBridge.setWebChromeClient(
                new InjectedChromeClient("HostApp", HostJsScope.class)
        );

是的,你没有看错,就是这么简单的一句就可以安全与JavaScript交互了。

好了,大致的内容也就这么多了,如果有朋友有更好的见解或者上述内容中出现有误之处,请悄悄指出,反正我也不会改,不要憋坏了自己哟!

最后,献上源码:传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值