android与js交互

首先引用一篇文章,看过这篇文章基本上就明白android大致与js是如何交互的了

Android与HTML+JS交互入门

----------------------------分割线-----------------------------------

首先要知道js是啥,js就相当于在html内的函数方法,全称为javascript

那么要交互,必然二者要共存于一起,在android中如何打开一个页面,比较常用的方法就是使用一个WebView控件,用它来加载网页

交互也必然是双方的,有来有往,下面分两部分说明

PS:这里直接援引前面文章中的例子,稍作修改

1,android中调用js

那么首先得有js,不然怎么调用,所以html如下

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<script type="text/javascript">function javacalljs(){document.getElementById("content").innerHTML ="<br\>JAVA调用了JS的无参函数";
}function javacalljswith(arg){document.getElementById("content").innerHTML =("<br\>"+arg);
}
</script>
</head>
<body>
HTML 内容显示 <br/>
<h1><div id="content">内容显示</div></h1>
</body>
</html>

这里需注意的是,两个方法的名称需要与之后调用的名称相同:javacalljs,javacalljswith

那么将它放入工程内,或是部署在服务器上,随后在webView中加载这个url

这里只写出webView加载该url的代码

        contentWebView = (WebView) findViewById(R.id.webview);// 启用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);// 从assets目录下面的加载htmlcontentWebView.loadUrl("file:///android_asset/web.html"); 

这里因为作者使用的是放入工程的方法,故而loadUrl方法内传递的是一个本地的相对地址

到这里webView加载网页就完成了,那么如何使用webView调用其中的js呢

contentWebView.loadUrl("javascript:javacalljs()");

亦或者是

contentWebView.loadUrl("javascript:javacalljswith(" + "'http://blog.csdn.net/Leejizhou'" + ")");

两者都是之前在html内定义过的js函数名,一个有参一个无参(这里为尊重援引博文的作者,参数内的博客地址就不修改了)

到这为之,android中调用js就完成了

那么交互交互,反过来,如何在html代码内与android交互呢

修改一下html的代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body>
HTML 内容显示 <br/>
<h1><div id="content">内容显示</div></h1>
<br/>
<input type="button"  value="点击调用java代码" onclick="window.android.startFunction()" />
<br/>
<input type="button"  value="点击调用java代码并传递参数" onclick="window.android.startFunction('http://blog.csdn.net/Leejizhou')"  />
</body>
</html>

这里可以看到,正如学习android时,在xml页面内写onclick来绑定点击方法一样,html用的也是这种方法,只是不同的是这里面需要输入的不止是一个方法名,而是window.变量名.方法名

方法名自不用说,至于什么是变量名,先看下面的代码

首先webView的初始化要改成如下代码

     contentWebView = (WebView) findViewById(R.id.webview);// 启用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);// 从assets目录下面的加载htmlcontentWebView.loadUrl("file:///android_asset/web.html");contentWebView.addJavascriptInterface(MainActivity.this,"android");

最后一行添加js接口的时候,后面的“android”就是之前说的变量名

那么再往下,就需要定义这个方法了

   //由于安全原因 targetSdkVersion>=17需要加 @JavascriptInterface //JS调用Android JAVA方法名和HTML中的按钮 onclick后的别名后面的名字对应
    @JavascriptInterfacepublic void startFunction(){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"show",3000).show();}});}@JavascriptInterfacepublic void startFunction(final String text){runOnUiThread(new Runnable() {@Overridepublic void run() {new AlertDialog.Builder(MainActivity.this).setMessage(text).show();}});}

做到这,js就可以调用本地android中的方法了,这就实现了交互的过程

当然这里的交互非常简单,如果需求不一样,还需要修改,例如调用js时使用evaluateJavascript()会使得网页不刷新并且较为容易获得返回值等等

这方面在这篇文章中讲的很透彻,这里也直接引用

Android:你要的WebView与 JS 交互方式 都在这里了

 

转载于:https://www.cnblogs.com/Qunter/p/7105683.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php调用md5.js,js中怎么使用md5加密

首先引入用法&#xff1a;hex_md5("123456");md5.js 文件下载&#xff1a;/** A JavaScript implementation of the RSA Data Security, Inc. MD5 Message* Digest Algorithm, as defined in RFC 1321.* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.* Othe…

Linux 进程管理数据结构

文末集赞留言抽奖&#xff0c;我会选出留言点赞数前 3 名送出小米耳机。别刷赞啊&#xff0c;刷赞被举报无效&#xff0c;相信真的是公众号粉丝的读者&#xff0c;不会做这样的行为&#xff0c;刷赞指的是购买外挂刷&#xff0c;如果是转发到朋友圈和微信群的&#xff0c;不算刷…

USB设备驱动之设备初始化(设备枚举)

USB设备从接入HUB到正常工作之前。都属于设备枚举阶段。所谓设备枚举。就是让host控制器认识USB设备&#xff0c;并为其准备资源。建立好主机与设备间的数据传递机制。 该阶段的工作&#xff0c;是USB通信协议规定的&#xff0c;所以属于ISO标准流程。设备枚举阶段也相应了USB设…

如何安装python3.8_python3.8下载及安装步骤详解

1.操作系统&#xff1a;Windows7 64bit executable installer 2.安装步骤&#xff1a; 双击安装文件python-3.8.0-amd64.exe 勾选下方“Add Python 3.8 to PATH”&#xff0c;并选择“Customize installation”3.把Optional Features全部勾选上&#xff0c;点击“Next"4.A…

两台linux之间互传php脚本,linux下两台服务器实现同步的方法

本文主要和大家分享linux下实现两台服务器实时同步方法介绍&#xff0c;假设两个服务器&#xff1a;192.168.0.1 源服务器 有目录 /opt/test/和192.168.0.2 目标服务器 有目录 /opt/bak/test/&#xff0c;实现的目的就是保持这两个服务器某个文件目录保持实时同步。实现方式&am…

队列,C语言实现

什么是队列&#xff1f;上一篇文章写了什么是栈&#xff0c;用C语言实现了栈&#xff0c;既然说了栈&#xff0c;不说队列&#xff0c;感觉总是少了点什么&#xff0c;所以就顺手写一个队列&#xff0c;而且最近做项目也用到这个队列的代码。栈的特点是先进后出&#xff0c;队列…

ResultMap和ResultType在使用中的区别

在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式&#xff0c;一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType&#xff1a;当使用resultType做SQL语句返回结果类型处理时&#xff0c;对于SQL语句查询出的字段在相…

python游戏开发工程师_Python开发工程师-入门与实战视频课程

1 1、Python简介学习前提&#xff1a;C语言 Python的优势&#xff1a;C/C/Java库&#xff0c;编译运行周期太慢&#xff0c;Python快Python更简单易用&#xff0c;容易出成果Python还提供比C更多的错误检查Python可以方便的实现其它Python程序中重复使用的模块Python是一门解释…

matlab如何进行数字信号处理,数字信号处理基础及MATLAB实现(第2版)

【内容简介】本书系统地介绍了数字信号处理基本理论、设计方法和实现等方面的内容。全书共分9章&#xff0c;第1章介绍数字信号处理的研究对象、学科概貌、系统基本组成、特点、发展及应用等内容&#xff1b;第2章介绍离散时间信号与系统的基本概念、卷积的性质和计算、信号的频…

华为hr,我尽力了

最近&#xff0c;一则新闻很火但是突然&#xff0c;又不火了&#xff0c;火于不火之间&#xff0c;时间有点短&#xff0c;其中猜测很大部分是gongguan原因以下为正文截图~以上为事件原文&#xff0c;这个是一个热点新闻&#xff0c;之前发了一个热点新闻&#xff0c;瞬间就火爆…

idea,eclipse创建多模块项目

新建一个maven项目 iead,新建是不选择archetype,新建好之后,pom中的 <packaging>pom</packaging>节点是默认的,如果不是要改成这这样子 然后选中这个项目,新建一个module,之后就和建立普通项目一样了. eclipse 是这样的 建一个普通的maven项目就可以了 这个是建好之…

python画图程序代码_少儿python编程(7)海龟画图(拓展1)

我们继续用Python的海龟库来画图吧&#xff01;上图是画一朵花的程序&#xff0c;重点是6-12行&#xff0c;使用了函数来定义drawleaf:每一掰叶子由两条弧线组成&#xff0c;每一条弧线重复画15次&#xff0c;每次前进5步&#xff0c;右转6度。看图形化代码就很清楚了&#xff…

opencv matlab三维点云,点云采样的三种方法 - 小白学视觉的个人空间 - OSCHINA - 中文开源技术交流社区...

点击上方“小白学视觉”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达编辑&#xff1a;3D视觉工坊本文由知乎作者GeometryHub授权转载&#xff0c;不得擅自二次转载。原文链接&#xff1a;https://zhuanlan.zhihu.com/p/86044055点云采样分类点云采样的方法…

C语言数组越界导致无限循环

大奖也是你们的&#xff0c;感谢支持&#xff0c;不喜欢的请轻拍。过年抽奖我还是很期待的&#xff0c;每年公司的年会抽奖的时候&#xff0c;我总是能小中一把&#xff0c;有一年我还中了个一等奖&#xff0c;不知道大家对一等奖什么概念&#xff0c;中一等奖的概率非常低&…

七月流水账

7.1-7.3 >< 7.4 看了一会儿李老大给的Caffe的教程 重配python qt vtk&#xff0c;大概是原来装了一个xxx&#xff08;忘记名字&#xff09;&#xff0c;然后位数有些不对&#xff0c;搞了好一阵 果然还是卸载重装好>< 然后又看了会儿Matlab神经网络工具箱怎么用 …

python绘制拟合回归散点图_机器学习之利用Python进行简单线性回归分析

前言&#xff1a;在利用机器学习方法进行数据分析时经常要了解变量的相关性&#xff0c;有时还需要对变量进行回归分析。本文首先对人工智能/机器学习/深度学习、相关分析/因果分析/回归分析等易混淆的概念进行区分&#xff0c;最后结合案例介绍如何利用Python进行简单线性回归…

十年经验教你如何学习嵌入式系统

一、如何学习嵌入式系统- - 嵌入式系统的概念着重理解“嵌入”的概念 &#xff0c;主要从三个方面上来理解。1、从硬件上&#xff0c;“嵌入”将基于CPU的处围器件&#xff0c;整合到CPU芯片内部&#xff0c;比如早期基于X86体系结构下的计算机&#xff0c;CPU只是有运算器和累…

php博客文章修改,wordpress博客如何快速修改文章阅读数

WordPress修改文章阅读次数可以通过插件来完成&#xff0c;下面我们以WP-PostViews插件演示如何修改文章阅读次数。WP-PostViews是一个非常常用的wordpress插件&#xff0c;主要用于文章阅读数访问量的统计&#xff0c;插件使用简单&#xff0c;直接安装启用即可&#xff0c;并…

ionic拍照,从相册选择功能

在介绍插件的使用之前&#xff0c;我们有必要先大致了解下插件的原理 一、插件工作原理分析 一个插件是如何正确地在IONIC框架下运行的呢? 前台的HTML/js代码又是如何与后面具体平台做数据交互的呢? 这个就需要对插件的工作原理及各个模块之间的流程关系有一个基本的了解。 为…

python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

前言 本文主要介绍的是利用python爬取京东商城的方法&#xff0c;文中介绍的非常详细&#xff0c;下面话不多说了&#xff0c;来看看详细的介绍吧。 主要工具 scrapy BeautifulSoup requests 分析步骤 1、打开京东首页&#xff0c;输入裤子将会看到页面跳转到了这里&#xff0c…