浅谈android和js的交互问题

简介: 浅谈android和js的交互问题

现在很多app里面很多功能都用html5实现,也就是用webview加载html显示一些 图文信息。这么做的好处就是减少开发成本 ,一套html在android  ,ios及web都可以跑。节省了很多开发成本。但是这个也就带来相应的一些问题。最大问题就是交互问题。所以下面给大家说一下android和js怎么实现交互(android调用js中的方法,js里面调用android的方法)。


一.js调用android

webview设置

//设置编码
        mWebView.getSettings().setDefaultTextEncodingName("utf-8");
        //支持js
        mWebView.getSettings().setJavaScriptEnabled(true);
        //设置本地调用对象及其接口
        mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
        //载入js
        mWebView.loadUrl("file:///android_asset/test.html");

方法声明:

class JavaScriptObject {
        Context mContxt;
        public JavaScriptObject(Context mContxt) {
            this.mContxt = mContxt;
        }
        @JavascriptInterface
        public void getAndroidMethod(String name) {
            Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
        }
    }

html中js调用

<script>
    function funFromjs(){
      document.getElementById("mydiv").innerHTML="android调用了js的方法";
    }
    var aTag = document.getElementsByTagName('a')[0];
    aTag.addEventListener('click', function(){
        //调用android本地方法
    myObj.getAndroidMethod("js调用了android的方法!");
        return false;
    }, false);
    </script>

测试的test.html放到android的assets目录下面。

二.android调用js

android 调用js   客户端代码:

mWebView.loadUrl("javascript:funFromjs()");

funFromjs这个函数 是在html里面的js 声明好的。 大家看上面的代码里面有这个函数。

三.特别注意的地方

总的来说很简单,但是有两点需要特别注意的。

第一点

mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
myObj.getAndroidMethod("js调用了android的方法!");

js代码里面的 myObj  不用特殊定义一个对象 ,这个对象是在android webview加载html时候注入的对象,可以认为他们俩就是一个对象。


第二点@JavascriptInterface


大家注意在android 声明出来的方法前面 要加上这个javasriptInterface 注解,否则会报Uncaught TypeError: Object [object Object] has no method...  这个错误。


正常需要判断为 targetSdkVersion>=17时,需要加上@JavascriptInterface,所以target=android-17或更高以便引入高版本android.jar。反之,如果仅targetSdkVersion低于17,那么目标版本不用加@JavascriptInterface,当然加上也行。


所以大家直接加上就可以。


相关文章
|
4月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
41 0
|
4天前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
13 2
|
4天前
|
XML JSON API
转Android上基于JSON的数据交互应用
转Android上基于JSON的数据交互应用
|
4天前
|
Java Android开发
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
|
7天前
|
JavaScript 前端开发
js的交互事件
js的交互事件
13 1
|
19天前
android-agent-web中js-bridge案例
android-agent-web中js-bridge案例
21 2
|
28天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
12 0
|
28天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
14 0
|
1月前
|
JavaScript C#
C#winForm程序与html JS交互调用
C#winForm程序与html JS交互调用
|
2月前
|
小程序 JavaScript 前端开发
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)