热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android与JaveScript数据交互使用原理

Android网页开发中经常涉及到WebView和网页端Javascript的交互,比如网页端调用Android设备实现业务功能(拍照,选择照片等等),Android也可以调用网页端的

Android网页开发中经常涉及到WebView和网页端Javascript的交互,比如网页端调用Android设备实现业务功能(拍照,选择照片等等),Android也可以调用网页端的Javascript接口传递数据等等。
显然,WebView和Javascript的交互分为两种:网页调用Android和Android调用Javascript。
1.网页调用Android。
这个实现是通过Javascript调用Android提供的交互接口来实现的,其实现是比较复杂的。只有Android先提供接口然后注册给网页端,网页端才可以调用Android来实现功能,这需要用到WebView的一个很重要的方法addJavascriptInterface,这个方法的使用可以参照官方文档的解释(http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String))。
方法详细介绍如下:

  • 签名: public void addJavascriptInterface (Object object, String name)
  • 作用: 向WebView中注入指定别名的Java对象,这个对象位于Javascript的上下文环境中。
  • 参数:
    object: 要注入WebView的Java对象
    name: 注入对象的别名。

以下是官方文档中提供的一个示例:
官方实例截图
以上示例实现效果是:
网页上弹出一个对话框,显示内容是injectedObject。它首先定义了一个JsObject类,类中有一个toString(继承自Object)方法,这个方法返回了一个字符串“injectedObject”,值得注意的是它有一个注解@JavascriptInterface;然后调用了WebView的addJavascriptInterface方法注入了一个别名为“injectedObject”(注意这里与toString的返回值没有任何关系,只是这里凑巧相同而已)的一个JsObject匿名对象,接着让WebView加载了text/html类型的数据,也就是加载一个网页,最后调用了loadUrl方法调用了Javascript的alert方法弹出一个对话框,对话框内容指定为injectedObject.toString(),注意这个参数的含义:调用别名为injectedObject对象的toString方法,也就会返回字符串“injectedObject”,本质上,这里Javascript的alert方法中调用了注入的JsObject对象的toString方法。
因此,最重要的是定义好用于交互的接口方法,按照传统,遵循Java的对象思想,我们会把所有的接口方法定义在一个类中,这样既方便管理,也方便注入。接口方法的定义与普通方法的定义没有任何区别,只是加了2个限制条件:a.必须是public方法,b.必须有@JavasInterface注解。接口方法同样可以有返回值和参数,但需要注意的是它的参数只有定义为String类型才有意义,若网页段调用这个方法传递了数值类型的参数,最终也是以String类型传入,若直接使用对应的数值类型接受,会出现无法接受参数的情况,虽然方法被调用了。
此外,还需要注意,这个方法调用其实是运用了远程方法调用机制,运行在另一个非UI线程,所以所有UI的操作都需要同步到UI线程,否则会出现异常退出,程序崩掉。最后考虑一下安全问题,尽量保证这个方法运行在4.2或以上的设备上,否则会存在潜在的安全问题,因为在老版本中,注入的Java对象可能会被透明化,Javascript甚至可以通过反射访问注入对象的属性;而且要保证这个方法运行可信,不要用这个方法加载一下无法可信的内容以防止漏洞。
2.Android调用Javascript
这个是比较简单的,直接使用WebView的loadUrl方法传入调用网页端的Javascript方法,例如下例的调用方法:
webView.loadUrl(“Javascript:alert(hello Android)”);
这里就是Android直接调用了Javascript的alert方法,弹出一个对话框,其他方法的调用也是类似的,可以在加载的网页界面直接调用。


推荐阅读
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 安卓开发入门!BAT大厂面试基础题集合,顺利通过阿里Android岗面试
    其实不是Android不行了,而是你跟不上了我的很多读者都在反馈说,现在一个岗位可以收到的简历数,是前几年的几倍。我们必须承认ÿ ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • 来自微信官方:微信支付跨平台软件架构首次曝光
    大纲背景线上效果指标什么是软件架构为什么需要软件架构从零到一构建支付跨平台软件架构1.抽象业务流程2.加入路由机制3.管理网络请求4.规范数据传递总结背景作为一个重要业务ÿ ... [详细]
author-avatar
BeckyWang25_966
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有