关于Android通过webview与js交互的方法
来源:互联网 发布:linux主目录是什么 编辑:程序博客网 时间:2024/06/05 02:24
这段时间很多小伙伴问我关于android与js交互的相关问题,索性就开一贴与大家交流一下
现在市面上的app大致分为三类,纯原生的、html套壳的、原生与html混编的,前两个就不说了,最后一个原生与html混编势必会用到android与js的数据交互,即webview控件的使用。
现在来看一下方法吧
首先要记得开启网络权限
<uses-permission android:name="android.permission.INTERNET" />
然后使用webview控件
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="传值给html" /> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" tools:layout_editor_absoluteX="8dp" tools:layout_editor_absoluteY="8dp"> </WebView>
这里面包含的样式根据布局自定义的,你们在使用时不用理会,只要有webview控件就ok
然后在Activity中编写代码:
webView = (WebView) findViewById(R.id.webview);webView.getSettings().setJavaScriptEnabled(true);//开启js使用权限 webView.getSettings().setDefaultTextEncodingName("GBK");//开启中文编码,不过好像不写也没事 webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//设置网页的滚动条样式,这个样式是不占用屏幕空间webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { //监听页面加载进度 if (newProgress == 100) {//页面加载完之后的操作 } super.onProgressChanged(view, newProgress); } });webView.addJavascriptInterface(new AndroidAndJs(WebViewActivity.this),"android2js");//加入交互的接口,AndroidAndJs是自定义的一个类,"android2js"是自定义的类名(在js中使用) webView.loadUrl("file:///android_asset/test.html");//加载网页
以上代码注释很清晰,需要注意的是,如果加载http的网页,而里面引用了https的超链接文件,比如图片,那么在5.0以上的版本是无法显示图片的,因为5.0以上的版本默认关闭http与https的混合模式,所以,如果有这方面需求的,可以将它开启
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //如果当前版本大于5.0时 webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);//开启http与https的混合模式 }
如果无法识别Build.VERSION_CODES.LOLLIPOP
,那就将它改成它的常量值“21”。
AndroidAndJs类
新建一个专门用于与js交互的自定义类AndroidAndJs
public class AndroidAndJs { Context context; public AndroidAndJs(Context context) { this.context = context; } @JavascriptInterface public void showMsg(String str) { Toast.makeText(context,str,Toast.LENGTH_SHORT).show(); } ç public String getInfo(){ return "我是从手机原生过来滴~"; }}
有一点要注意的是,需要js调用的方法一定要在方法名上加注解@JavascriptInterface
,不然无法执行
HTML页
新建一个html 页,暂且命名为“test.html”,布局如下图
js代码
<script type="text/javascript" src="jquery-1.11.2.min.js" ></script><script type="text/javascript"> function set(){ var text=$("#text").val(); window.android2js.showMsg(text); } function get(){ $("#content").html(window.android2js.getInfo()); } function toAndroid(){ $("#content").html("调用了toAndroid()"); }</script>
里面包含三个函数体,set()是将html页文本框的内容传给android,get()是获取android的数据,toAndroid()是预留的android中的按钮调用的方法
android调用js方法为:
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { webView.loadUrl("javascript:toAndroid()"); } });
阅读全文
0 0
- 关于Android通过webview与js交互的方法
- Android通过WebView与JS交互的全面方式
- Android 通过WebView和js的交互
- android之通过webview实现与js方法相互调用,数据交互
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android 的webview与js交互
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android WebView与JS的交互
- Android中WebView与JS的交互
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android中webView与JS的交互
- android WebView与JS的交互
- Android WebView 与JS的数据交互
- [Android]WebView与Js交互的学习
- Android WebView与JS的数据交互
- dataguard异机安装从库时遇到的几个问题及解决方法
- python设计模式(享元模式)
- L
- iBatis中RowHandler处理大数据量的导出
- tf.name_scope and tf.variable_scope
- 关于Android通过webview与js交互的方法
- Spark性能优化:资源调优篇
- 文化价值观思考
- Java homework5
- MySQL分区和分表
- ceres库编译安装ubuntu16.04
- 数据结构--栈
- 【java学习】java锁
- HttpUrlConnection用get和post请求发送参数