Js与android webview遭遇过的坑

Uncaught TypeError: Object [object Object] has no method

可能产生该情况有几种可能

1、安全限制问题

如果只在4.2版本以上的机器出问题,那么就是系统处于安全限制的问题了。Android文档这样说的

Caution: If you’ve set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available your web page code (the method must also be public). If you do not provide the annotation, then the method will not accessible by your web page when running on Android 4.2 or higher.

    中文大意为

警告:如果你的程序目标平台是17或者是更高,你必须要在暴露给网页可调用的方法(这个方法必须是公开的)加上@JavascriptInterface注释。如果你不这样做的话,在4.2以以后的平台上,网页无法访问到你的方法。
例:
@JavascriptInterface
public void testMothed(String str) {
}

解决方法

将targetSdkVersion设置成17或更高,引入@JavascriptInterface注释
自己创建一个注释接口名字为@JavascriptInterface,然后将其引入。注意这个接口不能混淆。这种方式不推荐,大概在4.4之后有问题。
注,创建@JavascriptInterface代码

2、代码混淆问题

如果在没有混淆的版本运行正常,在混淆后的版本的代码运行错误,并提示Uncaught TypeError: Object [object Object] has no method,那就是你没有做混淆例外处理。 在混淆文件加入类似这样的代码

-keepattributes *Annotation*
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

本人测试环境是android5.1 moto x 1085

博文主要参考
http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/

阅读更多
个人分类: android开发
想对作者说点什么? 我来说一句

android webveiew js调用

2016年07月12日 8.96MB 下载

没有更多推荐了,返回首页

不良信息举报

Js与android webview遭遇过的坑

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭