Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")

原创 2015年11月18日 15:26:39

网上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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012301841/article/details/49907779

android4.4 webview调用javascript出现Uncaught ReferenceError: is not define或者has no method

这几天用Nexcu5 4.4.4系统做一个简单的手机设备号获取,然后调用javascript显示在网页里的功能,以前做过n多类似的程序,结果程序一运行啥问题都出来了,呵呵 [INFO:CONSOLE(...
  • changemyself
  • changemyself
  • 2014-10-18 16:16:12
  • 66018

Android WebView的使用(三)js、java代码调用出错

最近学习WebView的使用,前两天还好好的,没有遇到
  • u010057266
  • u010057266
  • 2014-10-27 19:26:52
  • 3421

Android webview解决JS报错chromium: [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot read property 'getItem'

Android webview解决JS报错chromium: [INFO:CONSOLE(1)] “Uncaught TypeError: Cannot read property ‘getItem’...
  • codekxx
  • codekxx
  • 2017-07-04 13:08:19
  • 2623

android调用JS失败时可能的原因

做支付宝支付完成后,客户端需要调用JS,通知前端支付完成或者失败,更新前端的界面等。 一般来说,只需要调用下面一句话就可以调用JS中alipayCallBack()方法。String payResu...
  • jiahui_zhu
  • jiahui_zhu
  • 2015-12-08 16:12:44
  • 3394

Android Webview和js交互踩坑笔记

在Webview加载完特定在线网址后调用js方法传递一些参数/数据给前端使用. [INFO:CONSOLE(1)] "Uncaught ReferenceError: getData is not d...
  • Xiong_IT
  • Xiong_IT
  • 2016-09-29 17:46:50
  • 2749

android studio cmd $ANDROID_HOME is not defined

直接 cmd  下   set ANDROID_HOME=D:/android/sdk
  • RichieZhu
  • RichieZhu
  • 2016-02-04 14:26:38
  • 1195

javascript函数报Uncaught ReferenceError: XXX is not defined

在写javascript函数的时候,JavaScript写在哪里?通常有三种形式:  1. 内部:Html网页的中;  2. 内部:Html网页的中;  3. 外部:外部JS文件里。  (...
  • chenwiehuang
  • chenwiehuang
  • 2016-09-17 19:59:10
  • 19409

input的onclick事件调用报错Uncaught ReferenceError: XXX is not defined

这个问题遇到两三天了,就是找不出来原因,网上了也找了好多相关的文章,都不能解决。在chrome上报的是Uncaught ReferenceError: login is not defined,在IE...
  • red_sheeps
  • red_sheeps
  • 2015-01-21 19:21:03
  • 24053

Android webview js 调用java方法报错"Uncaught TypeError: Object [object Object] has no method xx

webview开发,在Android4.4下js调用java方法报错"Uncaught TypeError: Object [object Object] has no method,同样的写法在4....
  • q610098308
  • q610098308
  • 2015-07-19 12:41:02
  • 2462

Uncaught ReferenceError: moresearch is not defined 错误

用AngularJs做单击按钮,弹出页面时,提示Uncaught ReferenceError: moresearch is not defined 错误,我的代码是这样的: 更多搜索,单击“更多搜...
  • lengyuewusheng99
  • lengyuewusheng99
  • 2017-01-23 10:06:53
  • 897
收藏助手
不良信息举报
您举报文章:Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")
举报原因:
原因补充:

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