js 和 安卓互相调用

今天写的是安卓中调用html中的js,如果安卓中和js想要相互调用,首先要代码设置webview能够执行javaScript 默认是不执行的代码如下图


然后像webview注册一个对象onfire ,同样也传递一个JavaScriptCallBack实例给webview,通过window.onfire就可以调用javaStcritpCallBack中的方法。


接下来看JavaScriptCallBack类,该类可以任意实现,下图是我的实现

上面说了 你可以在js中通window.onfire.getPlayType("param")调用 安卓的方法,但是安卓Api17以上应该添加注解,避免无法调用。

因为webview中的js调用安卓中的代码是个很大的特性,但是在安卓4.2以下也就Api17一下,存在着很大的安全隐患,在一个包含不信任内容的webview中使用这个方法,他可以通过反射方法访问注入的对象(JavaScriptCallBack 开头向webview注入的对象)的publicmethods ,这样就可以恶意调用宿主的方法,所以在4.2之后任何暴露给js的方法都要使用注解@javaScriptInterface

那安卓中如果调用webview中的js方法呢, 同样很简单 只需要一句话,看下图代码


有js基础的肯定能够看懂javascript:doPlayType()这点代码因为在html也是同样这么使用调用js方法的

做了上面这么多工作安卓和js的互相调用就没什么问题了,但是最后混淆打包上线肯定会出现问题的,做混淆之后JavaScriptCallBack这个类名,方法名就完全变了,那么js就无法找到安卓中的java 方法,调不起来,只需要在混淆文件中添加几句就好了, 如下图 JavaScriptCallBack是我的一个内部类 改成自己的就好了



发布了27 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013297345/article/details/53405051
今日推荐