WebView和js的互调
(创建于2017/5/20)
一个网页中有如下代码
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <script language="javascript"> /* This function is invoked by the activity */ function wave() { alert("Android调用Js啦"); } </script> <body> <!-- Js调用Android代码 --> <a onClick="window.demo.onCallback()">点我!</a> </body> </html>
安卓代码如下
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); //在webView里面打开网页 webView.setWebViewClient(new WebViewClient()); //允许在webview里面弹出js的窗体 webView.setWebChromeClient(new WebChromeClient()); //允许js的执行 webView.getSettings().setJavaScriptEnabled(true); //加载assets目录下的网页 webView.loadUrl("file:///android_asset/demo.html"); //把java里面的对象传递给js webView.addJavascriptInterface(new JsCallJava() { @JavascriptInterface @Override public void onCallback() { Toast.makeText(getApplicationContext(),"JavaScript调用的java代码",Toast.LENGTH_SHORT).show(); } }, "demo"); }
1.js 调用Java
我们知道,调用Java中一个方法,只需要获取到这个Java对象,然后对象.方法名的方式调用,在网页文件中,有这样一行
<a onClick="window.demo.onCallback()">点我!</a>
打开网页后点击点我两个字执行的就是一个onclick方法,window.demo表示的就是Java中的对象,onCallback()就是Java中被调用的方法,也就是点击“点我”后执行Java中的一个onCallback()方法,那么安卓中如何操作?
关键代码如下:
//把java里面的对象传递给js webView.addJavascriptInterface(new JsCallJava() { @JavascriptInterface @Override public void onCallback() { Toast.makeText(getApplicationContext(),"JavaScript调用的java代码",Toast.LENGTH_SHORT).show(); } }, "demo"); public interface JsCallJava{ public void onCallback(); }
设置一个接口,接口中的回调方法为js重调用的方法,很关键的一行@JavascriptInterface必须加上,指明这是一个js接口,否则无法执行
2.Java调用js
假如我们现在想调用网页中的wave方法
function wave() { alert("Android调用Js啦"); }
只需要这样执行
webView.loadUrl("javascript:wave()");
关键一点必须设置,不然无法弹出alert
//允许在webview里面弹出js的窗体 webView.setWebChromeClient(new WebChromeClient());
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Mybatis基础:增删改查、模糊查询、多条件查询
Mybatis基础:增删改查、模糊查询、多条件查询http://www.bieryun.com/3132.html 1、新建测试数据库,根据实体类属性创建 2、实体类 [java] view plain copy packagecom.entity; /** *数据库实体类 *Createdbylvjunon2018-04-12. */ publicclassCategory{ privateintid; privateStringname; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } //显示中文 @Override publicStringtoString(){ return"Category{"+ "id="+id+ ",name='"+name+'\''+ '}'; } } 3、配置文件Category.xml [ht...
- 下一篇
区块链技术从入门到精通教程
2017最新区块链技术,从入门到精通视频教程(视频+源码+工具) 课程环境 Windows + Mist + eclipse 等 软件准备 Mist WebStorm 等 课程基础 对html css js等有一个基本的了解 涉及语言 Go Solidity JavaScript等 第1课 区块链介绍 第2课 客户端安装及运行 第3课 以太坊网络 第4课 智能合约编程入门 第5课 Solitidy复杂变量类型 第6课 Solitidy 方法 第7课 Solitidy 继承 和 事件 第8课 Solitidy 编程实战 第9课 Solitidy 编程实战 第10课 去中心化应用Dapp项目实战 该视频收集于网络 分享地址: 链接:https://pan.baidu.com/s/1htX3LgK 密码:qggo 原文发布时间为:2018年01月
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19