安卓解决WebView中无法执行js的问题

WebView中支持js 使得WebView变得一下子强大起来,甚至很多web app的应用直接使用WebView去传参.有时候明明在测试的时候js是没问题的,而混淆打包后就无法执行了.比如在WebView所加载的图片中给各个图片都添加了点击事件的响应,但是混淆加密发布正式的包后安装发现点击相应WebView的图片毫无反应.归类后主要有下面2种情况:

情况一,测试时js可执行,混淆加密后js不可执行

这情况,应该就是混淆加密的时候proguard.cfg没有加入保护特定属性和类的代码,解决方案如下:

在项目中的proguard.cfg中加入下面代码:

-keepattributes *Annotation*  
-keepattributes *JavascriptInterface*  

-keep class com.test.android.XXX_Activity$*{
        <methods>;
}

-keepclassmembers  class <span style="font-family: Arial, Helvetica, sans-serif;">com.test.android.XXX_Activity$</span>$*{
        *;
}

上面这段代码的意思是,保护项目中的注解属性和JavascriptInterface属性,同时对com.test.android包中的XXX_Activity类中的方法属性保护不加密.这样就能确保项目在混淆加密是通过保护使用了js的类和属性使得js可执行.


情况二,js在测试时无法执行

这种情况,因为开发版本为17以上(包括17)的, 都需要给对应的js方法前加上@android.webkit.JavascriptInterface 注解, 才能使该方法被系统识别.

比如代码中添加js接口的时候有这么一段:

function(){
    var ele = document.getElementsByTagName("img");
    javascript:contentlistener.getInfo(ele);
}

那么相应的getInfo(String ele)方法前就应该加入@android.webkit.JavascriptInterface注解:

@android.webkit.JavascriptInterface
public void getInfo(String ele){
    //...
}

这样js接口方法就能在17以上的系统可执行了.17以下(不包括17)可以不加.






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值