Js与android webview遭遇过的坑

原创 2015年11月20日 13:06:30

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 WebView中那些不得不解决的坑~~

前面那张hybrid开发心得 有人问 怎么解决不用onJsPrompt 来回调js函数的问题。其实很简单,就是在在你的jscalljava回调函数内 另外开个线程去load js代码即可: ...
  • lyglostangel
  • lyglostangel
  • 2016年03月03日 10:16
  • 785

Android Webview的一些使用总结和遇到过得坑

WebView 用来显示网页的一个View,它使用WebKit渲染引擎显示web页面,可以加载在线的或者本地的html页面,WebView可以对页面进行一系列操作,如历史页面的向前、向后,放大和缩小,...
  • u013700502
  • u013700502
  • 2017年04月06日 13:35
  • 2159

Android WebView使用详解包括js互调

目前很多Android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性。 先说下WebView的...
  • easyer2012
  • easyer2012
  • 2016年05月24日 15:26
  • 4420

Android:你要的WebView与 JS 交互方式 都在这里了

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图上述功能是由Android的WebView实现的,其中涉及到Android客户端与W...
  • carson_ho
  • carson_ho
  • 2017年03月22日 09:19
  • 81397

android中Webview与javascript的交互(互相调用)

最近做android项目中遇到要在webview中做与js交互相关的东东,涉及到js中调用android本地的方法,于是查了资料整理了一下android和js互相调用的过程。如下demo,demo的主...
  • Beyond0525
  • Beyond0525
  • 2013年07月18日 23:07
  • 147952

Android端使用WebView注入一段js代码实现js调用android

需求:为网页上个链接增加点击事件,但是这个链接无法增加js代码 url:http://public.rongcloud.cn/view/D4F444BE2D94D760329F3CF38B4AE35C...
  • u011404611
  • u011404611
  • 2017年01月09日 15:23
  • 4158

Android中使用WebView与JS交互全解析

1.概述 首先,需要提出一个概念,那就是hybrid,主要意思就是native原生Android和h5混合开发。为什么要这样做呢?大家可以想象一下针对于同一个活动,如果使用纯native的开发方...
  • btt2013
  • btt2013
  • 2016年11月29日 16:06
  • 950

WebView的使用以及Android与Js的交互

WebView的官方文档地址:https://developer.android.com/reference/android/webkit/WebView.html 1.想要使用WebView,需要在...
  • u012975370
  • u012975370
  • 2016年11月02日 13:48
  • 871

Android开发之WebView和JS交互详解

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。...
  • jiaoyaning1210
  • jiaoyaning1210
  • 2016年03月31日 14:04
  • 777

WebView---Android中调用js方法及js中调用本地方法

Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持H...
  • IT1039871366
  • IT1039871366
  • 2015年06月04日 17:07
  • 2194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Js与android webview遭遇过的坑
举报原因:
原因补充:

(最多只允许输入30个字)