分享好友 最新动态首页 最新动态分类 切换频道
native.js是什么且如何使用
2024-12-27 09:12

一句话总结:Native.js技术,简称NJS,是一种将手机的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。Native.js不是一个js库,不需要下载引入到页面的script中,也不像nodejs那样有单独的运行环境,Native.js的运行环境是集成在5+runtime里的,使用HBuilder打包的app或流应用都可以直接使用Native.js。

 

native.js是什么且如何使用

 

Native.js技术,简称NJS,是一种将手机的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。如果说把js扩展到服务器世界,那么Native.js则把js扩展到手机App的原生世界。HTML/JS/Css全部语法只有7万多,而原生语法有几十万,Native.js大幅提升了的能力。NJS突破了浏览器的功能限制,也不再需要像Hybrid那样由原生语言开发插件才能补足浏览器欠缺的功能。NJS编写的代码,最终需要在HBuilder里打包发行为App安装包,或者在支持Native.js技术的浏览器里运行。目前Native.js技术不能在普通手机浏览器里直接运行。

  • NJS大幅扩展了HTML5的能力范围,原本只有原生或Hybrid App的原生插件才能实现的功能如今可以使用JS实现。
  • NJS大幅提升了App开发效率,将iOS、Android、Web的3个工程师组队才能完成的App,变为1个web工程师就搞定。
  • NJS不再需要配置原生开发和编译环境,调试、打包均在HBuilder里进行。没有mac和xcode一样可以开发iOS应用。
  • 如果不熟悉原生API也没关系,我们汇总了很多NJS的代码示例,复制粘贴就可以用。http://ask.dcloud.net.cn/article/114

     再次强调,Native.js不是一个js库,不需要下载引入到页面的script中,也不像nodejs那样有单独的运行环境,Native.js的运行环境是集成在5+runtime里的,使用HBuilder打包的app或流应用都可以直接使用Native.js。

技术要求

   由于NJS是直接调用Native API,需要对Native API有一定了解,知道所需要的功能调用了哪些原生API,能看懂原生代码并参考原生代码修改为JS代码。否则只能直接copy别人写好的NJS代码。

2.1、判断平台

Native API具有平台依赖性,所以需要通过以下方式判断当前的运行平台

 

2.2、类型转换

在NJS中调用Native API或从Native API返回数据到NJS时会自动转换数据类型。

类型转换表

2.3、其他转换

 

  • Android原生应用的主Activity对象 转为plus.android.runtimeMainActivity()
    Android的主Activity对象是启动应用时自动创建的,不是代码创建,此时通过plus.android.runtimeMainActivity()方法获取该Activity对象
  • Objective-C方法冒号剔除
    [pos setPositionX:(int)x Y:(int)y;] 转为 pos.setPositionXY(x,y);
    OC语法中方法的定义格式为:
    “(返回值类型) 函数名: (参数1类型) 形参1 参数2名称: (参数2类型) 形参2”
    方法的完整名称为: “函数名:参数2名称:”。
    如:“(void)setPositionX:(int)x Y:(int)y;”,方法的完整名称为“setPositionX:Y:”,调用时语法为:“[pos setPositionX:x Y:y];”。
    在JS语法中函数名称不能包含“:”字符,所以OC对象的方法名映射成NJS对象方法名时将其中的“:”字符自动删除,上面方法名映射为“setPositionXY”,在NJS调用的语法为:“pos.setPositionXY(x,y);”。
  • 文件路径转换
    Web开发里使用的image/1.png是该web工程的相对路径,而原生API中经常需要使用绝对路径,比如/sdcard/apptest/image/1.png,此时使用这个扩展方法来完成转换:plus.io.convertLocalFileSystemURL("image/1.png")

 2.4、概念

 2.4.1、类对象

由于中本身没有类的概念,为了使用Native API层的类,在NJS中引入了类对象(ClassObject)的概念,用于对Native中的类进行操作,如创建类的实例对象、访问类的静态属性、调用类的静态方法等。其原型如下

 

2.4.2、获取类对象
      在平台我们可以通过plus.ios.importClass(name)方法导入类对象,参数name为类的名称;在平台我们可以通过plus.android.importClass(name)方法导入类对象,其参数name为类的名称,必须包含完整的命名空间。

示例

 

     获取类对象后,可以通过类对象“.”操作符获取类的静态常量属性、调用类的静态方法,类的静态非常量属性需通过plusGetAttribute、plusSetAttribute方法操作。

实例对象

在JavaScript中,所有对象都是Object,为了操作Native层类的实例对象,在NJS中引入了实例对象(InstanceObject)的概念,用于对Native中的对象进行操作,如操作对象的属性、调用对象的方法等。其原型如下

 

2.4.3、获取实例对象
有两种方式获取类的实例对象,一种是调用Native API返回值获取,另一种是通过new操作符来创建导入的类对象的实例,如下

 

获取实例对象后,可以通过实例对象“.”操作符获取对象的常量属性、调用对象的成员方法,实例对象的非常量属性则需通过plusGetAttribute、plusSetAttribute方法操作。

操作对象的属性方法
  • 常量属性
    获取对象后就可以通过“.”操作符获取对象的常量属性,如果是类对象则获取的是类的静态常量属性,如果是实例对象则获取的是对象的成员常量属性。

     
  • 非常量属性
    如果Native层对象的属性值在原生环境下被更改,此时使用“.”操作符获取到对应NJS对象的属性值就可能不是实时的属性值,而是该Native层对象被映射为NJS对象那一刻的属性值。
    为获取获取Native层对象的实时属性值,需调用NJS对象的plusGetAttribute(name)方法,参数name为属性的名称,返回值为属性的值。调用NJS对象的plusSetAttribute(name,value)方法设置Native层对象的非常量属性值,参数name为属性的名称,value为要设置新的属性值。

  • 方法
    获取对象后可以通过“.”操作符直接调用Native层方法,如果是类对象调用的是Native层类的静态方法,如果是实例对象调用的是Native层对象的成员方法。

  • 类的继承
    Objective-C和中类如果存在继承自基类,在NJS中对应的对象会根据继承关系递归将所有基类的公有方法一一换成NJS对象的方法,所有基类的公有属性也可以通过其plusGetAttribute、plusSetAttribute方法访问。

     

3、开始写NJS

使用NJS调用Native API非常简单,基本步骤如下
a. 导入要使用到的类
b. 创建类的实例对象(或者调用类的静态方法创建
c. 调用实例对象的方法

以下例子使用NJS调用iOS和Android的原生弹出提示框(类似但不同于js的alert)。

Android

以下代码在Android平台展示调用Native API显示系统提示框。
首先是Android原生 Java代码,用于比对参考

 

Native.js代码

 

 

iOS

以下代码在iOS平台展示调用Native API显示系统提示对话框。
iOS原生Objective-C代码,用于比对参考

 

Native.js代码

 

 

在HBuilder自带的Hello H5+模板应用中“Native.JS”(plus/njs.html)页面有完整的源代码,可真机运行查看效果。

------------------

转载 :http://blog.csdn.net/qq_27626333/article/details/51853039

 

Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成。
这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者。
众人拾柴火焰高,有能力的开发者多多提交NJS代码,大家都会给你点赞的,我们也会为每位共享NJS代码的朋友送上200积分。

调用Android本地分享

http://ask.dcloud.net.cn/article/134

直接拨打电话

http://ask.dcloud.net.cn/question/4035

将程序切换到后台

http://ask.dcloud.net.cn/question/2484

强制弹出软键盘

http://ask.dcloud.net.cn/question/2324

获取安卓设备device.uuid

http://ask.dcloud.net.cn/question/3510

获取内存及CPU信息

http://ask.dcloud.net.cn/question/2202

开启关闭蓝牙

http://ask.dcloud.net.cn/question/4720

监听蓝牙开关状态

http://ask.dcloud.net.cn/article/274

获取蓝牙设备列表

http://ask.dcloud.net.cn/question/8265

蓝牙连接票据打印机完整代码

http://ask.dcloud.net.cn/article/643

NFC数据读取

http://ask.dcloud.net.cn/question/6726

截屏

http://ask.dcloud.net.cn/question/5344

获取MAC地址

http://ask.dcloud.net.cn/question/1511

获取设备当前网速

http://ask.dcloud.net.cn/article/773

打开网络设置

http://ask.dcloud.net.cn/question/1475

打开各种系统设置界面

http://ask.dcloud.net.cn/question/14732

获取WIFI列表

http://ask.dcloud.net.cn/question/12113

调用系统控件播放视频

http://ask.dcloud.net.cn/question/614

调用os通讯录选择控件

http://ask.dcloud.net.cn/question/5783

原生日历提醒插入

http://ask.dcloud.net.cn/article/215

调用系统控件裁剪图片

http://ask.dcloud.net.cn/question/8314

复制内容到系统粘贴板

http://ask.dcloud.net.cn/question/2034

调用讯飞的文字转语音功能(TTS

http://ask.dcloud.net.cn/question/6473

调用其它Activity后通过startActivityForResult获取返回结果

http://ask.dcloud.net.cn/question/5783

接收系统广播消息,如监听安装卸载apk的事件

http://ask.dcloud.net.cn/article/222

判断app是否安装

http://ask.dcloud.net.cn/question/7604

以监听手机飞行模式开关为例说明如何使用Native.js进行BroadcastReceiver广播

http://ask.dcloud.net.cn/question/7661

常驻Android通知栏,不用个推实现本地消息推送(Local Notification)

http://ask.dcloud.net.cn/question/2464

调用原生的socket连接

http://ask.dcloud.net.cn/question/60

启动一个原生service

http://ask.dcloud.net.cn/question/433

基于native.js的文件系统管理功能实现

http://ask.dcloud.net.cn/article/809

打开闪光灯

http://ask.dcloud.net.cn/question/19379

停止、开启个推推送功能

 
 

感谢yeahcheung分享

利用native.js获取手机gps是否开启

http://ask.dcloud.net.cn/question/11890

通过native.js设置系统墙纸

http://ask.dcloud.net.cn/article/651

监听短信验证码

http://ask.dcloud.net.cn/article/676

限制手机录像时间

http://ask.dcloud.net.cn/question/45756

获取包名

 
 

获取设备名

http://ask.dcloud.net.cn/question/14691

测试是否安装某应用

http://ask.dcloud.net.cn/question/14430

调用iOS打印API

http://ask.dcloud.net.cn/question/4226

通过native.js登入game center

见Hello H5+里Native.js部分演示及源码。
或在这里搜索“game center”,http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88

设置获取内容到系统粘贴板

http://ask.dcloud.net.cn/question/3720

打开页面默认弹出键盘

http://ask.dcloud.net.cn/question/2324

播放提示音

http://ask.dcloud.net.cn/question/3962

调用ios的文字转语音(TTS

http://ask.dcloud.net.cn/question/4175

把base64数据保存为图片

http://ask.dcloud.net.cn/question/6190

设置webview滑动减速度

 
 

打开ios的Wifi设置页面

http://ask.dcloud.net.cn/question/7797

判断是否开启消息通知

http://ask.dcloud.net.cn/question/4497

检测iOS是否允许使用相机(感谢小闹分享)

http://ask.dcloud.net.cn/article/188

ios获取系统的时区id

状态栏显示网络请求雪花

 
 

获取GPS授权状态

 
 

获取手机存储空间

打开/关闭手机的闪光灯

显示应用内的ViewController

 

参考:Native.js示例汇总 - DCloud问答
http://ask.dcloud.net.cn/article/114

 

 

最新文章
SAP SDSAP SD扫二维码继续学习 二维码时效为半小时
91漫画免费登录入口“好了,就是它,神明的这块法旨上写有伐字,虽然不是杀,但也足够强大了,可以斩掉任何敌手。” 晚上点击这里直接去看o美日韩a哊哈晚上速度点这里直接进哈准备纸 
提升账户安全:一次性密码生成原理与实践
​ 此工具提供基于时间的一次性密码(Time-based One-time Password,简称TOTP) ,只需要在手机上安装密码生成应用程序,就可以生成一个随着时间变化的一次性密码,用于帐户验证,而且这个应用
“AI+重组”最强王者,踩上机器人+算力+无人机风口,有望涨10倍
重磅消息震撼来袭!AI领域即将掀起第二波汹涌行情,此番更有望与牛市形成强大共振,激发出令人瞩目的10倍,乃至百倍的主升浪!驱动逻辑:AI+重组板块近期利好频现,成为市场关注的焦点。首先,从技术融合角度看,AI技术与传统行业的深度融
访客接入短代码(pc端手机端通用): https://uu.uincloud.cn/kefu/62b518a517a06
云客服系统源码涵盖功能完全开源版3800 无限域名使用客服系统是企业的重要交流工具,尤其是移动互联网时代,微信公众号、移动电话或是FacebookMessenger、Skype等渠道分散了企业的服务渠道,企业需要响应来自任何地点任何时间的客户。同时
视频在线转链接-视频生成网址链接的详细指南
视频在线转链接,即将视频文件转换为可在线分享且链接长期有效的网址链接,是一个方便用户共享视频内容的过程。以下是一个详细的指南,帮助您完成视频生成网址链接的步骤:一、选择合适的方法视频转链接的方法多种多样,您可以根据自己的需
论坛cms网站AI文章站群工具
AI智能写作软件,批量生成自动发布到网站后台支持任意CMS批量导入关键词,自动生成、自动配图、自动发布、不限制网站、域名数量。支持生成中、英、越、日等所有语言文章。我们有专业的团队24小时维护,为您保驾护航。1.支持所有语言输出输入
手机清理优化大师
手机内存不足,总是卡顿怎么办?试试这款帮助你定时清理的手机清理大师吧~独特设计的定时清理功能,让你无需时常关注手机内存情况,自动定时清理,让你的手机随时保持*佳状态。这款智能清理手机管家应用,能够为你清理手机后台缓存垃圾和内
微信支付宝信用卡欠款怎么解决?
微信支付宝信用卡欠款小编导语随着现代社会的快速发展,电子支付逐渐成为人们日常生活中的重要组成部分。微信和支付宝作为中国最主要的两个移动支付平台,极大地方便了人们的消费。随之而来的信用卡欠款问也日益凸显。本站将从多个角度探讨
天猫综合排名规则(天猫综合评分多少分为标准)
本篇文章给大家谈谈天猫综合排名规则,以及天猫综合评分多少分为标准对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。今天给各位分享天猫综合排名规则的知识,其中也会对天猫综合评分多少分为标准进行解释,如果能碰巧解决你现在面
爱用商城 安卓版 v4.7.1
JPUSH_MESSAGEINSTALL_SHORTCUTUNINSTALL_SHORTCUTRECEIVE_USER_PRESENTMANAGE_ACCOUNTSGET_ACCOUNTSRECEIVE_BOOT_COMPLETEDREAD_CONTACTSMODIFY_AUDIO_SETTINGSUSE_CREDENTIALSAUTHENTICATE_ACCOUNTSREAD_SETTINGSBROADCAST_STICKYCAMERAF
相关文章
推荐文章
发表评论
0评