Android五分钟轻松教会你掌握WebView与JS交互

简介:

背景:Android API中提供了WebView组件来实现对html的渲染。现在HTML5、CSS3、jS的相关开发技术,以及数据交换格式json/XML。Web开发工程师的技能。为了减少对android的过度依赖,通常会在原生的Android 嵌入部分的html了。

这样一来就避免不了为js数据交互。

我们新建一个简单的布局,只有一个webview控件

 
 
  1. <android:id="@+id/webView" 
  2. android:layout_width="fill_parent" 
  3. android:layout_height="wrap_content" 
  4. /> 

我们找到这个webView,并加上载本地的main.html,其中main.html存储在工程文件的assets根目录下。

 
 
  1. WebView webView = (WebView) findViewById(R.id.webView); 
  2. webView.addJavascriptInterface(newJSObject(context), "aikaifa"); 
  3. WebSettings webSettings = webView.getSettings(); 
  4. webSettings.setJavaScriptEnabled(true);// 支持js 
  5. Handler handler = new Handler(); 
  6. handler.postDelayed(new Runnable() { 
  7. public void run() { 
  8. webView.loadUrl("file:///android_asset/main.html"); 
  9. }, 500); 

1.js调用Android方法

细心的你应该会注意到上面有个JSObject类,没错,就是这个开启了入口,前端js 才可以调用我们Android这边写的方法。其中的“aikaifa” 可以理解成一个标示,可以随便改成你喜欢的。

我们来看一下JSObject这个类:

 
 
  1. public class JSObject { 
  2.  private Context context; 
  3.  public JSObject(Context context){ 
  4.  this.context=context; 
  5. @JavascriptInterface 
  6.  public void goBack({ 
  7.  Activity activity = (Activity) context; 
  8.  activity.finish(); 
  9.  } 

该类定义了goBack方法,注入JS可以调用。

js如果想要调用goBack这个方法。可以这个aikaifa.goBack() 这样调用即可。

这样前端就可以很方便调用我们Android这边的方法了。

2.Android调用JS方法

既然js可以调用我们的方法,那我们同样也调用js方法

例如我们想调用js 中getName方法。

我们可以这样写。

 
 
  1. public void getTestJS() 
  2.    Timertimer = new Timer(); 
  3.    final Handler handler = new Handler(){ 
  4.    public void handleMessage(Message msg) { 
  5.        switch (msg.what) { 
  6.           case 1: 
  7.          webView.loadUrl("javascript:getName()"); 
  8.          break; 
  9.     } 
  10.    super.handleMessage(msg); 
  11.   } 
  12. }; 
  13.    timer.schedule(new TimerTask() { 
  14.    public void run() { 
  15.             Message msg = new Message(); 
  16.             msg.what = 1; 
  17.              handler.sendMessage(msg); 
  18.        } 
  19.     }, 500, 500); 

其中getName方法是js中的一个方法,我们可以在需要的地方调用getTestJS方法就可以了。

这样WebView与js交互就大致完成了。




作者:洪生鹏
来源:51CTO
目录
相关文章
|
3月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
38 0
|
3天前
|
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.
3 0
|
3天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
5 0
|
1月前
|
小程序 JavaScript 前端开发
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
|
1月前
|
移动开发 JavaScript Android开发
Android与Html5交互
Android与Html5交互
|
1月前
|
JavaScript 前端开发
javascript中的交互效果
javascript中的交互效果
|
2月前
|
前端开发 JavaScript
前端 JavaScript 与 HTML 怎么实现交互
前端 JavaScript 与 HTML 怎么实现交互
|
2月前
|
Rust 前端开发 JavaScript
Rust与JavaScript的跨语言交互:探索与实践
本文旨在探讨Rust与JavaScript之间的跨语言交互方法。我们将深入了解WebAssembly(Wasm)的角色,以及它如何使得Rust与JavaScript能够在Web应用中和谐共处。此外,我们还将介绍Rust与JavaScript的集成方式,包括Rust编译到Wasm、使用wasm-bindgen进行Rust与JavaScript的绑定,并通过实际案例展示如何实现两者之间的交互。
|
2月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
25 0
|
3月前
|
存储 监控 前端开发
JavaScript手册:公司员工电脑监控软件前端交互的代码设计
在当今信息时代,随着公司对员工电脑活动的监控需求不断增加,前端交互的代码设计变得尤为关键。本手册将深入探讨JavaScript编写的公司员工电脑监控软件监控代码,着重介绍如何设计能够在不引起怀疑的情况下,实现对员工电脑活动的细致监控。
226 2