开发

extension 包

extension 包的目录结构如下:

1
2
3
extension.zip
├── extension.js # 包含宿主扩展的 API 、组件、分享、统计逻辑和 canIUseMap
└── extension.css # 运行在 slave 的视图层,是为宿主提供的扩展样式表

extension.css

extension.css 是给宿主提供的扩展样式表,可以增加全局样式,也可为宿主定义的组件编写样式。
为宿主上运行的小程序添加全局样式,举例如下:

1
2
3
body {
backgroud-color: #ff0;
}

为宿主定义的组件编写样式,假设此时的组件的类名为 ‘xxx-view’,举例如下:
1
2
3
.xxx-view {
backgroud-color: #ff0;
}

extension.js

在 extension.js 中,使用 AMD(异步模块定义)的 define 函数,定义一个 extension 模块,具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
define('swan-extension', ['swan', 'boxjs'], function (require, module, exports, define, swan, boxjs) {
module.exports = {
// 此时假设宿主的名字为 hostA
name: 'hostA',
hostMethodDescriptions: [],
methods: {},
components: {},
getShareURL() {},
customLog(swanEventFlow) {},
getCanIUseMap
};
});

第一个参数 swan-extension 是指模块的名字,在智能小程序运行时将使用 require 方法来加载此模块。

第二个参数 [‘swan’, ‘boxjs’] 是指所要依赖的模块列表:

模块 含义
swan 为小程序开发者提供的全局的 swan 对象,对应的 API 列表可参考官网
boxjs 小程序开发者无法访问的私有能力的接口集合

第三个参数是模块的具体实现,使用 module.exports 导出模块,模块中主要有:

参数 含义
name 宿主的名字
methods 挂载扩展的 API 方法时使用的配置集合
hostMethodDescriptions 扩展的 API 对应端能力的描述表集合
getCanIUseMap 获取宿主 canIUseMap 的方法
components 扩展的组件的集合
customLog 扩展的统计逻辑
getShareURL 自定义分享页面的配置