javascript - js怎么和安卓交互
阿神
阿神 2017-04-10 15:02:08
[JavaScript讨论组]

我们的应用想包成一个安卓APP,但是没有用phonegap,用的似乎是原生的,具体我也不太明白。我主要负责web,现在需要和安卓的哥们儿进行交互,它暴露给我一个函数比如说window.haha.hehe(),我调用这个之后安卓客户端就能调用原生的地图。我想要获取地图信息,但是不知道该怎么做。如果我在window.haha.hehe里传一个回调函数,但是android那边应该怎么写呢?网上看到一种方法,是把回调函数变成字符串传过去,安卓那边解析后执行。但是那样执行的作用域是全局的,根本无法访问到我调用window.haha.hehe()时作用域里的变量啊。
有没有什么比较好的方法呢,谢谢啦

阿神
阿神

闭关修行中......

全部回复(5)
迷茫

试试Crosswalk+Cordova,于是你就可以自己做应用开发了

ringa_lee

你这边需要封装好,把你函数声明完成后,注册到一个全局的函数列表里,并把这个函数调用方式通过字符串或者其他方式传入到Android提供的函数里。

假设调用方式是callback[3](poi)
那么可以window.haha.hehe("callback[3]");告诉Android端调用callback[3]就可以啦。
这里很类似jsonp。

Android端就可以使用

javamWebView.loadUrl("javascript:callback[3](poi)");

调用到你的回调函数。

另外,这和你的变量作用域没有关系,举个例子

jsvar callback = [];
var clou = function () {
    var a = 3;
    var p = function (poi) {
        console.log(a);
    }
    callback.push(p);
};
clou();
callback[0]();

你看,能输出3

怪我咯

之前看到的博客,记下来了。

WebView 与 JS 交互

1.Android 利用 webView 调用网页上的JS 代码

Android 中可以通过WebView来实现和Js的交互,在程序中调用Js代码,
只需要将webView控件的支持Js的属性设置为true,
然后通过loadUrl就可以直接进行调用,如下所示:

mWebView.getSettings().setJavaScriptEnable(true);     
mWebView.loadUrl("javascript:test()");

2.网页上调用Android 中 Java 代码的方法

在网页中调用 Java 代码,需要在webView 控件中添加 javascriptInterface。如下所示

mWebView.addJavascriptInterface(new Object() {     
  public void clickOnAndroid() {    
    mHandler.post(new Runnable() {    
      public void run() {   
        Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show();   
      }   
    });   
  }   
}, "demo");

在网页中,只需要像调用 JS 方法一样进行调用就可以了

<p id='b'><a onclick="window.demo.clickOnAndroid()">b.c</a></p>

3.Java 代码调用 JS 并传递参数

首先调用带参数的 JS 函数,如 function test(str) ,
然后只需要在调用JS 时传入参数即可,如下所示:

mWebView.loadUrl("javascript:test('aa')");  

4.JS 中调用Java 函数并传递参数

首先一样需要带参数的函数形式,但需注意此处的参数需要final类型,
即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,
然后进行修改。如下所示:

mWebView.addJavascriptInterface(new Object() {  
  public void clickOnAndroid(final int i) {   
    mHandler.post(new Runnable() {   
      public void run() {   
        int j = i;   
        j++;   
        Toast.makeText(Test.this,    
        "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();   
      }   
    });   
  }   
}, "demo"); 

然后在 HTML 页面中,利用如下代码:

<p id='b'><a onclick="window.demo.clickOnAndroid(2)">b.c</a></p> 

即可实现调用。

天蓬老师

个人总结的最全面的Java与JS交互的文章

怪我咯

总结的确实挺全面的,我想问一下,如果以你所说,js调用native带参方法,并且需要native返回数据,在native端直接return能调用起js里的callback方法吗?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号