网上android和js交互的代码有不少,也很容易搜到。最近在做的项目需要用到js桥,遇到了一些问题,记录下来,希望以后遇到能马上解决掉。

一开始我找的demo是从这个:http://blog.csdn.net/beyond0525/article/details/9374301 
上面有js调用android的代码,也有android调用js的代码,很全面,在API 17一下跑起来都OK的,但是我们升级API 版本,问题就来了,android调用js没有问题,js调用android会有一些小问题。

查看log日志

[INFO:CONSOLE(1)] "Uncaught ReferenceError: is not define
I/chromium(490): [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected token ILLEG
[Android] Web Console: Uncaught TypeError: Object [object Object] has no method 'xxx'

会发现Uncaught ReferenceError: xxx is not defined or xxx has no method 这个异常,要么是xxx变量或者方法没有定义,要么是xxx找不到这个方法。

解决方法

添加一个自定义的WebViewClient,指定加载步骤,在浏览器的网页完全显示的时候,在调用js桥。

mWebView.setWebViewClient(new WebViewClientDemo());
lass WebViewClientDemo extends WebViewClient { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
view.loadUrl(url);
return true;
} @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 在这里执行你想调用的js函数
// android 调用js代码
// mWebView.loadUrl("javascript:funFromjs()");
// js调用android代码,设置本地调用对象及其接口
mWebView.addJavascriptInterface(new JsObject(), "android");
}
}

如果加上以上代码还没有解决问题的话,看来我们需要加上一些特技了。 
1.我们需要给js调用android的方法加上一个@JavascriptInterface的注解

    class JsObject{

        @JavascriptInterface
public void funAndroid() {
Toast.makeText(mContext, "调用android本地方法funAndroid!", Toast.LENGTH_LONG).show();
} }

2.一个比较奇怪的问题,有的HTML界面需要加上 mWebView.loadData(“”, “text/html”, null); 
这个好像跟H5界面有关的。

这样,js桥叫可以在高版本的 API 上正常的和android客户端交互了。

Demo地址: http://download.csdn.net/detail/u012301841/9279911

Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")的更多相关文章

  1. JS问题Uncaught ReferenceError:XXXX is not defined

    背景: html中一个table,table中进行分页.每行后面有一系列操作,如删除,修改.现在以删除为例说明问题. 实现方式: 使用button,在onclick中调用js函数,js函数中传递参数如 ...

  2. JS报错修改日记(1):Uncaught ReferenceError: showQRcode is not defined

    为了加一个查看二维码的功能,如: //页面内按钮 <a class="manipulate-btn" href="#" onclick="sho ...

  3. stickUp.js:98 Uncaught ReferenceError: vartop is not defined at HTMLDocument.<anonymous> (stickUp.js:98)

    附加var vartop = 0;在var topMargin = 0;这之后,这里是我附加的代码:$(document).ready(function(){ var contentButton = ...

  4. clipboard复制剪贴板功能,以及用requirejs时报错---Uncaught ReferenceError: Clipboard is not defined

    zeroclipboard是走的flash插件,手机浏览器是不支持的,所以不得不舍弃之,用clipboard,clipboard不需要flash就可以完成复制剪切等功能,而且可以兼容pc,移动端,下面 ...

  5. 简说chart2.4的应用,以及Uncaught ReferenceError : require is not defined的解决

    51呢最近在学习chart.js,然后呢就照着中文的帮助文档来然后就一直出Uncaught ReferenceError : require is not defined的问题查了挺多才知道是帮助文档 ...

  6. Uncaught ReferenceError: jQuery is not defined

    页面调试时,明明引入了JQ文件,却一直提示Uncaught ReferenceError: jQuery is not defined错误. 转自:http://blog.csdn.net/baicp ...

  7. Uncaught ReferenceError: layer is not defined

    错误详细信息,如下: Uncaught ReferenceError: layer is not defined' 关键词就是not defined 未定义,那么解决方案就是给它定义. 原来的问题代码 ...

  8. (网页)Uncaught ReferenceError: pageImport is not defined

    在js开发中,很多人遇到类似问题,都找不到解决方法.Uncaught ReferenceError: $ is not defined,在这里给大家提供几个解决方法. 1.出现这个错误,最可能的是引用 ...

  9. 关于 eval 的报错 Uncaught ReferenceError: False is not defined

    var obj ={'id': 16, 'name': '管理员', 'delflag': False, 'grade': 1000000.0}VM3614:1 Uncaught ReferenceE ...

随机推荐

  1. 解决redis connection refused: connect无法连接redis

    环境 VM VirtualBox安装虚拟机CentOS 7 1.Redis.conf配置文件中 注释掉 bind 127.0.0.1 2.防火墙关闭(或添加可访问的端口,具体不在此描述) 最后一个坑 ...

  2. jquery遍历table为每一个单元格取值及赋值

    表格代码 <tr> <td> <input type="text" style="border: none; text-align: cen ...

  3. Java 面试知识点解析(五)——网络协议篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  4. mysql查询当天所有数据sql语句

    mysql查询当天的所有信息: select * from test where year(regdate)=year(now()) and month(regdate)=month(now()) a ...

  5. 如何解决python升级后yum报错

    当我们yum命令的时候,会提示 "File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxEr ...

  6. .Net Core版开源跨平台框架SkyMallCore

    相互学习提升,有不足之处请指教!有需要急速开发的朋友可以拿来用哦! SkyMallCore 该项目目前放在github上,功能仍在完善,已Fork的园友已给了一些建议, 我会继续完善,并将开发过程遇到 ...

  7. 接口测试返回的json文件中字符串是乱序

    问题描述 接口测试中post方式匹配返回信息时显示不匹配, 但是statuscode明明是200, 而且用postman /restclient等工具测出来也是没问题的. 根本原因 封装了这么个方法来 ...

  8. Python 可视化工具 Matplotlib

    英文出处:Chris Moffitt. Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时 ...

  9. BZOJ_4765_普通计算姬_分块+dfs序+树状数组

    BZOJ_4765_普通计算姬_分块 Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能 ...

  10. Redis详解(一)------ redis的简介与安装

    工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的博客将整体的介绍 Redis 的用法. 1.Redis 的简介 Redis:REmote DIctionary Server(远程字典 ...