Native.JS 技术, 简称 NJS, 是一种将手机操作系统的原生对象转义, 映射为 JS 对象, 在 JS 里编写原生代码的技术.
如果说 Node.JS 把 JS 扩展到服务器世界, 那么 Native.JS 则把 JS 扩展到手机 App 的原生世界.
html/JS/CSS 全部语法只有 7 万多, 而原生语法有几十万, Native.JS 大幅提升了 HTML5 的能力.
NJS 突破了浏览器的功能限制, 也不再需要像 Hybrid 那样由原生语言开发插件才能补足浏览器欠缺的功能.
NJS 编写的代码, 最终需要在 HBuilder 里打包发行为 App 安装包, 或者在支持 Native.JS 技术的浏览器里运行
再次强调, Native.JS 不是一个 JS 库, 不需要下载引入到页面的 script 中, 也不像 Node.JS 那样有单独的运行环境, Native.JS 的运行环境是集成在 5+runtime 里的, 使用 HBuilder 打包的 App 或流应用都可以直接使用 Native.JS.
技术要求
由于 NJS 是直接调用 Native API, 需要对 Native API 有一定了解, 知道所需要的功能调用了哪些原生 API, 能看懂原生代码并参考原生代码修改为 JS 代码.
否则只能直接 copy 别人写好的 NJS 代码.
判断平台
Native API 具有平台依赖性, 所以需要通过以下方式判断当前的运行平台:
- function judgePlatform(){
- switch ( plus.os.name ) {
- case "Android":
- // Android 平台: plus.Android.*
- break;
- case "iOS":
- // iOS 平台: plus.iOS.*
- break;
- default:
- // 其它平台
- break;
- }
- }
其他转换
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")
来源: https://www.2cto.com/kf/201809/780392.html