coverage
jsNative 是一个 JavaScript 与 Native 通信管理的库。其基于 通信接口描述,生成可调用 API。
NPM:
$ npm i js-native --save
保存:
请点击右键另存为
<!-- 引用通过 NPM 下载的本地文件 --> <script src="node_modules/js-native/index.js"></script> <!-- 通过 CDN 引用 --> <script src="https://unpkg.com/js-native@latest"></script>
通过接口描述可以直接调用。
let apiList = jsNative.invokeAPI({ "invoke": "method.json", "name": "na.getAPIs", "method": "_na.getAPIs" });
jsNative 是一个默认的 api 容器对象,通过 add 方法可以添加接口描述。
add
jsNative.add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] });
api 容器对象上,可以使用 invoke 方法调用 api。
invoke
jsNative.invoke('net.request', ['my-url', 'GET', data => {}]);
api 容器对象上,通过 map 方法可以生成一个对象,对象上包含接口直接调用的方法。
map
let mod = jsNative .add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] }) .map({ 'net.request': 'fetch' }); mod.fetch('my-url', 'GET', data => {});
api 容器对象上,可以使用 fromNative 方法直接从一个 返回所有接口描述信息的接口 获取接口并添加。
fromNative
let mod = jsNative .fromNative({ "invoke": "method", "name": "na.getAPIs", "method": "_na.getAPIs" }) .map(name => name.slice(name.indexOf('.') + 1));
当你不想使用默认的 api 容器对象,或者需要多个 api 容器对象时,可以使用 createContainer 方法创建新的 api 容器对象。
createContainer
let apiContainer = jsNative.createContainer();
新的 api 容器对象上拥有 add 、fromNative、invoke、map 方法,你可以正常使用它。
let mod = jsNative .createContainer() .add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] }) .map({ 'net.request': 'fetch' }); mod.fetch('my-url', 'GET', data => {});
通常,对于一个应用场景,我们倾向于在一个地方管理所有的 Native 通信接口 。所以 jsNative 是 APIContainer 的一个实例,在这个实例上额外提供了:
jsNative 上的其他属性和方法请参考 APIContainer 的文档。
说明
创建 APIContainer 实例。
参数
{Object}
{string=}
详细请参考 config 方法
返回
APIContainer 实例。
示例
通过通信接口描述,直接调用。
{Object} description
{Array=} args
{*} 调用结果
{*}
let apiList = jsNative.invokeAPI( { "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] }, [ 'https://yourdomain.com/path', 'get', content => { console.log(content); } ] );
通信接口容器类。用于通信接口的管理功能,包括多种注册方式、调用、编译出可被直接调用函数组成的对象等。
添加 Native 通信接口描述
{Object|Array}
{APIContainer} this
{APIContainer}
apiContainer.add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] });
新增 processorCreator ,新增的 processorCreator 可以在描述的 invoke 中进行调用(但不可以冲掉内置的 processorCreator )
{string}
{Function}
其中 processorCreator 接受三个参数:
processorCreator 的返回值接受调用能力时真正传入的参数
apis.addProcessorCreator( 'ArgAddToken', function (description, option, apiContainer) { return function (args) { return true; } } );
配置参数,设置的参数将被合并到现有参数中
namingConflict 的取值可以是:
apiContainer.config({ namingConflict: 'ignore' });
从 返回所有接口描述信息的接口 调用的结果,添加调用API。该接口 Native 上的实现必须遵循如下约束。
返回所有接口描述信息的接口
apiContainer.fromNative({ "invoke": "method", "name": "na.getAPIs", "method": "_na.getAPIs" });
通过描述对象的 name 属性进行调用。
{string} name
apiContainer .add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] }) .invoke( "net.request", [ 'https://yourdomain.com/path', 'get', content => { console.log(content); } ] );
生成一个对象,其上的方法是 API 容器对象中调用描述对象编译成的,可被直接调用的函数
{Object|Function}
{Object} 生成的对象
apiContainer.add({ "invoke": "method.json", "name": "net.request", "method": "_naNet.request", "args": [ {"name": "url", "value": "string"}, {"name": "method", "value": "string"}, {"name": "onsuccess", "value": "function"} ] }); // 通过 Object map。mod 对象上包含 fetch 方法,可直接调用 let mod = apiContainer.map({ 'net.request': 'fetch' }); mod.fetch('https://yourdomain.com/path', 'GET', data => {}); // 通过 function map。mod2 对象上包含 request 方法,可直接调用 let mod2 = apiContainer.map(name => name.slice(name.indexOf('.') + 1)); mod2.request('https://yourdomain.com/path', 'GET', data => {});
设置额外的 description 属性列表。
若设置了额外的 description 属性列表,不在列表中的属性将被忽略。该接口应仅用于性能优化,不应改变默认行为。
{Array}
无
apis.setExternalDescriptionProps(['myProp']); apis.addProcessorCreator( 'ReadMyProp', function (description) { return function () { return description.myProp; } } );
jsNative is MIT licensed.
jsNative
jsNative 是一个 JavaScript 与 Native 通信管理的库。其基于 通信接口描述,生成可调用 API。
引入
下载
NPM:保存:请点击右键另存为
引用
使用
通过接口描述可以直接调用。
jsNative 是一个默认的 api 容器对象,通过
add方法可以添加接口描述。api 容器对象上,可以使用
invoke方法调用 api。api 容器对象上,通过
map方法可以生成一个对象,对象上包含接口直接调用的方法。api 容器对象上,可以使用
fromNative方法直接从一个 返回所有接口描述信息的接口 获取接口并添加。当你不想使用默认的 api 容器对象,或者需要多个 api 容器对象时,可以使用
createContainer方法创建新的 api 容器对象。新的 api 容器对象上拥有
add、fromNative、invoke、map方法,你可以正常使用它。API
jsNative
通常,对于一个应用场景,我们倾向于在一个地方管理所有的 Native 通信接口 。所以 jsNative 是 APIContainer 的一个实例,在这个实例上额外提供了:
jsNative 上的其他属性和方法请参考 APIContainer 的文档。
jsNative.createContainer
说明创建 APIContainer 实例。
参数{Object}options 参数对象{string=}options.errorTitle 显示报错信息的标题{string=}options.namingConflict 名字冲突时的处理策略详细请参考 config 方法
返回APIContainer 实例。
示例jsNative.invokeAPI
说明通过通信接口描述,直接调用。
参数{Object} description通信接口描述对象{Array=} args调用参数返回{*}调用结果示例APIContainer
通信接口容器类。用于通信接口的管理功能,包括多种注册方式、调用、编译出可被直接调用函数组成的对象等。
add
说明添加 Native 通信接口描述
参数{Object|Array}description 通信接口描述对象,或多个对象组成的数组返回{APIContainer}this示例addProcessorCreator
说明新增 processorCreator ,新增的 processorCreator 可以在描述的 invoke 中进行调用(但不可以冲掉内置的 processorCreator )
参数{string}name 注册的 processorCreator 名称{Function}processorCreator 的创建函数,需要返回真正的processor其中 processorCreator 接受三个参数:
processorCreator 的返回值接受调用能力时真正传入的参数
返回{APIContainer}this示例config
说明配置参数,设置的参数将被合并到现有参数中
参数{Object}options 参数对象{string=}options.errorTitle 显示报错信息的标题{string=}options.namingConflict 名字冲突时的处理策略namingConflict 的取值可以是:
返回{APIContainer}this示例fromNative
说明从
返回所有接口描述信息的接口调用的结果,添加调用API。该接口 Native 上的实现必须遵循如下约束。参数{Object}description 要调用的通信接口描述对象返回{APIContainer}this示例invoke
说明通过描述对象的 name 属性进行调用。
参数{string} name调用描述对象的 name{Array=} args调用参数返回{*}调用结果示例map
说明生成一个对象,其上的方法是 API 容器对象中调用描述对象编译成的,可被直接调用的函数
参数{Object|Function}mapAPI 调用描述对象名称的映射表或映射函数返回{Object}生成的对象示例setExternalDescriptionProps
说明设置额外的 description 属性列表。
若设置了额外的 description 属性列表,不在列表中的属性将被忽略。该接口应仅用于性能优化,不应改变默认行为。
参数{Array}props 额外的description属性列表返回无
示例License
jsNative is MIT licensed.