资讯专栏INFORMATION COLUMN

Android 与 JavaScript 交互 支持的数据类型

Yuanf / 2692人阅读

摘要:若是自定义类型,则接收不到正确数据可以通过原生方法的返回值获取内置类型的参数,如若需要互传复杂类型的对象,双方须以对媒介,以各自语言的工具类进行相互转化参见

在Android混合开发中,WebView是中间件,承担着渲染网页的职责。

WebView的使用教程参见官网和Carson_Ho的这篇博客。

当需要Android原生与H5之间交互的时候,需要调用WebView的getSettings().setJavaScriptEnabled(true);以及webView.addJavascriptInterface(Js对象名,Java对象);

前者允许Android原生与H5之间的交互,后者将Java对象映射为JavaScript的对象。

假设被映射为JavaScript对象的Java对象长的像这样:

/*
* 作为addJavascriptInterface()方法的第二个参数,该类将被映射为JavaScript对象
*/
public class MyJavaScriptObject{
        
        public void toastShort(){
                Toast.maskText(context,"吐个司",Toast.LENGTH_SHORT).show();
        }
        
        @JavascriptInterface
        public void toastLong(){
                Toast.maskText(context,"吐个司",Toast.LENGTH_LONG).show();
        }
        
        @JavascriptInterface
        public void question1(ClassA param){
                //use param
        }
        
        @JavascriptInterface
        public ClassB question2(){
                //return object of ClassB
                return new ClassB();
        }
}

则:

toastShort()方法在JavaScript中不可用,因为该方法没有被@JavascriptInterface注解标记;

ClassA只能是Java的内置类型或String,否则param为null、或为undefined(当用String接收时);

ClassB只能是Java的内置类型或String,否则JavaScript接收的是{};

也就是说:

JS调用Android原生方法,参数须是Java的内置类型:int、String等,若是JavaScript对象,需字符串化,否则Android无法正确接收;

JS调用Android原生方法,返回值是内置类型:int、String等,JS能够正确接收。若是Java自定义类型,则JS接收不到正确数据;

JS可以通过Android原生方法的返回值获取内置类型的参数,如String

若需要互传复杂类型的对象,双方须以String对媒介,以各自语言的Json工具类进行相互转化;

参见:
https://stackoverflow.com/questions/2250917/passing-a-javascript-object-using-addjavascriptinterface-on-android

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14878.html

相关文章

  • Android JavaScript 交互 支持数据类型

    摘要:若是自定义类型,则接收不到正确数据可以通过原生方法的返回值获取内置类型的参数,如若需要互传复杂类型的对象,双方须以对媒介,以各自语言的工具类进行相互转化参见 showImg(https://segmentfault.com/img/remote/1460000018767532); 在Android混合开发中,WebView是中间件,承担着渲染网页的职责。 WebView的使用教程参见...

    aaron 评论0 收藏0
  • Android JavaScript 交互 支持数据类型

    摘要:若是自定义类型,则接收不到正确数据可以通过原生方法的返回值获取内置类型的参数,如若需要互传复杂类型的对象,双方须以对媒介,以各自语言的工具类进行相互转化参见 showImg(https://segmentfault.com/img/remote/1460000018767532); 在Android混合开发中,WebView是中间件,承担着渲染网页的职责。 WebView的使用教程参见...

    amc 评论0 收藏0
  • 大前端公共知识杂谈

    摘要:尽管面向对象编程也有着很多其他被人诟病的地方,但是在大型复杂业务逻辑的应用开发中我们还是会倾向使用面向对象编程的范式这就要求我们对于类与对象的基本语法有所掌握。 大前端公共知识杂谈首发于InfoQ-架构师特刊:大前端,是笔者对于泛前端知识图谱(Web/iOS/Android/RN) 的文字版介绍,夹杂了 GUI 应用程序架构的十年变迁:MVC、MVP、MVVM、Unidirection...

    CODING 评论0 收藏0
  • H5Native交互之JSBridge技术

    摘要:一原理篇下面分别介绍和与的底层交互原理在讲解原理之前,首先来了解下的组件,先来看一下苹果官方的介绍上面的意思是说是一个可加载网页的对象,它有浏览记录功能,且对加载的网页内容是可编程的。 做过混合开发的很多人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包了一层Native,然后通过Bridge技术使得js可以调用视频、位置、音频等功能。本文就是介绍这层Bridge...

    zacklee 评论0 收藏0
  • 国内值得关注官方API集合

    摘要:电影豆瓣电影豆瓣电影支持电影条目,影人条目,搜索和榜单等。音乐豆瓣音乐支持音乐信息,评论信息,标签信息,搜索音乐,某个音乐中标记最多的标签,发表修改删除评论,用户对音乐的所有标签等内容。 项目地址:https://github.com/marktony/A... 本页仅收集国内部分官方API,如需查看其他版本,请点击这里。 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网...

    gaomysion 评论0 收藏0

发表评论

0条评论

Yuanf

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<