webview中java与js交互

WebView提供了在Android应用中展示网页的强大功能。也是目前Hybird app的大力发展的基础。作为Android系统的一个非常重要的组件,它提供两方面的强大的能力:对HTML的解析,布局和绘制;对JavaScript的解释和执行。Hybird App的组成是Native+H5,Native部分是java语言实现;而JavaScript是H5中必不可少的部分。因此就会遇到Java与JavaScript互相调用的情况!这里记录了一个最基本的互相调用的例了!

1.Native布局中添加WebView组件

1 <WebView
2         android:id="@+id/wv_contacts"
3         android:layout_below="@id/tv_title"
4         android:layout_width="match_parent"
5         android:layout_height="match_parent">
6 </WebView>

2.初始化WebView,设置允许使用JavaScript并载入页面

1   private void initWebView() {
2         mWebView = (WebView) findViewById(R.id.wv_contacts);
3         WebSettings settings = mWebView.getSettings();
4         settings.setJavaScriptEnabled(true);
5         mWebView.loadUrl("file:///android_asset/constacts.html");
6     }

3.java调用javaScript(mWebView.loadUrl("javascript:method(param)");)
首先定义好JavaScript函数:

1 function showData(constactsData){
2             var html="";
3             var ullist = document.getElementById("contacts_list");
4             var constactsJsonData = eval(constactsData);
5             for(var i = 0; i < constactsJsonData.length; i++){
6                 html += "<li onclick=callPhone(\"" + constactsJsonData[i].number + "\")>" + constactsJsonData[i].name + "</li>";
7             }
8             ullist.innerHTML = html;
9         }

然后在java调用JavaScript,放在onPageFinished回调中调用是为了保证,调用Js时,Js已全部加载完成

 1 mWebView.setWebViewClient(new WebViewClient() {
 2             @Override
 3             public boolean shouldOverrideUrlLoading(WebView view, String url) {
 4                 view.loadUrl(url);
 5                 return true;
 6             }
 7
 8             @Override
 9             public void onPageFinished(WebView view, String url) {
10                 super.onPageFinished(view, url);
11                 showContactsInfo();
12             }
13         });
14
15 private void showContactsInfo() {
16         String info = jsInterface.readContacts();
17         mWebView.loadUrl("javascript:showData(" + info + ")");
18     }

4.在Js中调用Java(mWebView.addJavascriptInterface(new JavaScriptInterface(), "interface");)。如代码所示,在Js中调用Java Native方法。需要将需要调用的方法所属对象转化为一个别名。将这个别名透传到JavaScript中,然后在JavaScript中通过别名访问Native方法。

首先添加别名

1 mWebView.addJavascriptInterface(new JSInterface(this.getApplicationContext()), "jsinterface"); 
然后定义Native方法

1 public void callPhone(String number) {
2         Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));
3         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
4         mContext.startActivity(intent);
5     }

最后通过别名在JavaScript中进行调用
 1 function callPhone(number){ 2 jsinterface.callPhone(number); 3 }

如果便完成了Hybird App中的最基本的Java和JavaScript的通信的功能!

时间: 2024-10-25 21:46:21

webview中java与js交互的相关文章

android 中java和javascript交互

android的WebView是一个非常强大的控件,本文主要针对其简单使用和笔者在使用时所遇到的问题做一些总结. 本文参考了该博文:http://blog.csdn.net/zgjxwl/article/details/9627685 一.WebView中Java与javascript交互 1.这是要和js交互的注入接口类: public final class JavascriptInteerface{ @JavascriptInterface public void test(String

安卓中java和js如何交互

1.安卓中java和js如何交互 在Android上怎样实现JAVA和JS交互呢?Android的webview是基于webkit内核的,webview中集成了js与java互调的接口函数,通过addJavas criptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个URL,供浏览器来进行解析,实现Java和js交互. 要想运行网页上的js脚本,webview必须设置支持Javas cript. 2.

Android WebView加载本地html并实现Java与JS交互

最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢.图片.css .js .html这些资源每个大概需要10-200ms ,一般都是30ms就ok了.不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载的速度很重要!从Google上我们了解到,webview加载页面的顺序是:先加载html,然后从里面解析

《在WebView中如何让JS与Java安全地互相调用》核心JS全解析

1.说明: <[在WebView中如何让JS与Java安全地互相调用](http://www.pedant.cn/2014/07/04/webview-js-java-interface-research/)>核心JS全解析 2. 核心JS解析如下,欢迎拍砖!!! javascript: (function(win) {     console.log("HostApp initialization begin");     //win.HostApp对象     var 

Android中Java和JavaScript交互

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本.本文将介绍如何实现Java代码和Javascript代码的相互调用. 如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方的代码. 本例代码 为了便于讲解,先贴出全部代码 Java代码 package com.example.j

Android 中Java和JavaScript交互入门

如何实现JavaScript 和java 交互 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方的代码. #直接看示例代码: java代码如下: package com.ccb.javascript; import java.net.URISyntaxException; import android.annotation.SuppressLint; impo

WebView 加载网页和java 与js交互

[mw_shl_code=java,true]WebView是一个可以显示网页的控件.需求:通过WebView加载assets下的html文件.实现页面的缩放.向menu键添加:前进.后退和刷新,实现对网页的操作点击网页中的链接,仍然使用本WebView浏览器,而非调用系统的浏览器网页中有button,点击button,调用android的Toast点击WebView隐藏地址栏和button,点击menu键显示地址栏和button.WebView加载网页的方式WebView webview =

Android应用开发-------------WebView(一)之WebView与服务器端的Js交互

最近公司再添加功能的时候,有一部分功能是用的html,在一个浏览器或webview中展示出html即可.当然在这里我们当然用webview控件喽 WebApp的好处: 在应用里嵌套web的好处有这么几点,1,跨平台,不仅可以在Android上运行,也可以在ios上运行,而且样式什么的绝对统一,因为都是加载的html,用的都是同一套html 2,修改灵活,容易更新版本.例如大家常看到的app里面的广告页,大多是嵌套的html,这样只要后台替换一下页面的内容,手机端就会改变展现内容,跟新版本也是如此

安卓高级 WebView的使用到 js交互

我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要处理解析,渲染网页等浏览器做的事情 setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站ti