开发插件前,请阅读了解 《小程序插件接入指南》 了解开通流程及开放范围,并开通插件功能。如果未开通插件功能,将无法上传插件。
请注意:在插件开发中,只有 部分接口 可以直接调用;另外还有部分能力(如 获取用户信息 和 发起支付 等)可以通过 插件功能页 的方式使用。
# 自定义组件
插件可以定义若干个自定义组件,这些自定义组件都可以在插件内相互引用。但提供给使用者小程序使用的自定义组件必须在配置文件的 publicComponents
段中列出(参考上文)。
除去接口限制以外,自定义组件的编写和组织方式与一般的自定义组件相同,每个自定义组件由 wxml
, wxss
, js
和 json
四个文件组成。具体可以参考 自定义组件的文档。
# 页面
插件从小程序基础库版本 2.1.0 开始支持页面。插件可以定义若干个插件页面,可以从本插件的自定义组件、其他页面中跳转,或从使用者小程序中跳转。所有页面必须在配置文件的 pages
段中列出(参考上文)。
除去接口限制以外,插件的页面编写和组织方式与一般的页面相同,每个页面由 wxml
, wxss
, js
和 json
四个文件组成。具体可以参考其他关于页面的文档。
插件执行页面跳转的时候,可以使用 navigator
组件。当插件跳转到自身页面时, url
应设置为这样的形式:plugin-private://PLUGIN_APPID/PATH/TO/PAGE
。需要跳转到其他插件时,也可以这样设置 url
。
代码示例:
<navigator url="plugin-private://wxidxxxxxxxxxxxxxx/pages/hello-page">
Go to pages/hello-page!
</navigator>
自基础库版本 2.2.2 开始,在插件自身的页面中,插件还可以调用 wx.navigateTo 来进行页面跳转, url
格式与使用 navigator
组件时相仿。
# 接口
插件可以在接口文件(在配置文件中指定,详情见上文)中 export 一些 js 接口,供插件的使用者调用,如:
代码示例:
module.exports = {
hello: function() {
console.log('Hello plugin!')
}
}
# 获取小程序导出
在开发者工具中预览效果,需要手动填写一下
miniprogram/app.json
中的插件 AppID
从基础库 2.11.1 起,在插件中有全局函数 requireMiniProgram
,可以获取由使用者小程序导出的内容。
例如,使用者小程序做了如下导出:
// 使用者小程序
module.exports = {
greeting() {
return 'Greetings from Weixin MiniProgram!';
}
}
那么在插件中,可以这样获得内容:
// 插件
const miniProgramExports = requireMiniProgram();
miniProgramExports.greeting(); // 'Greetings from Weixin MiniProgram!'
另外也可以 参考使用者小程序的相关文档
# 引用小程序的自定义组件
在开发者工具中预览效果,需要手动填写一下
miniprogram/app.json
中的插件 AppID
有时,插件可能需要在页面或者自定义组件中,将一部分区域交给使用的小程序来渲染,因此需要能够引用小程序的自定义组件。但由于插件中不能直接指定小程序的自定义组件路径,因此无法直接通过 usingComponents
的方式来引用。这里介绍通过 抽象节点(generics) 来实现引用的方式。
如果是插件自定义组件(例如 plugin-view
),那么我们可以通过声明一个 generic:
// plugin/components/plugin-view.json
{ "componentGenerics": { "mp-view": true } }
并在希望显示小程序组件的位置引用:
<!-- plugin/components/plugin-view.wxml -->
<view>小程序组件:</view>
<mp-view /><!-- 这里是一个小程序自定义组件 -->
在小程序中引用 plugin-view
时,就可以传递组件给插件进行渲染了:
<!-- miniprogram/page/index.wxml -->
<plugin-view generic:mp-view="comp-from-miniprogram" />
如果是插件页,插件页本身就是一个页面顶层组件,小程序不会引用它,无法通过 generic:xxx=""
的方式来指定抽象节点实现;因此,从基础库 2.12.2 起,小程序可以在插件的配置里为插件页指定抽象节点实现。例如插件页面名为 plugin-index
,则可以:
{
"myPlugin": {
"provider": "wxAPPID",
"version": "1.0.0",
"genericsImplementation": {
"plugin-index": {
"mp-view": "components/comp-from-miniprogram"
}
}
}
}
另外也可以 参考使用者小程序的相关文档