跳到主要内容
版本:v2

Capacitor Web/PWA 插件开发指南

Capacitor 采用了一套 Web/原生兼容层,使得开发者能够轻松构建同时在原生环境和 Web PWA 中运行的插件。

快速开始

首先按照插件指南中的快速开始章节生成一个插件模板。

接着在你喜欢的编辑器中打开 your-plugin/src/web.ts 文件。

示例代码

以下是 Web 插件的基本结构,内联注释提供了详细说明:

import { WebPlugin } from '@capacitor/core';
import { MyPlugin } from './definitions';

export class MyPluginWeb extends WebPlugin implements MyPlugin {
constructor() {
// 调用父类构造函数,传入插件名称(需与原生端名称一致)
// 以及插件适用的平台列表。例如可以通过添加平台名(小写)
// 让同一个 Web 插件同时支持 Android 和 iOS
super({
name: 'MyPlugin',
platforms: ['web'],
});
}

async echo(options: { value: string }) {
console.log('ECHO', options);
return options;
}
}

// 实例化插件
const MyPlugin = new MyPluginWeb();

// 导出插件实例
export { MyPlugin };

// 注册为 Web 插件
import { registerWebPlugin } from '@capacitor/core';
registerWebPlugin(MyPlugin);

最后确保你的 src/index.ts 文件包含以下导出语句:

export * from './definitions';
export * from './web';

使用方式

自定义 Capacitor 插件会被合并到 Capacitor 核心库中,因此需要通过对象解构来访问。在 PWA 中使用插件功能时,除了从核心库导入外,还需要导入插件包本身。

如果不导入插件包,registerWebPlugin 将不会被调用,导致 Capacitor 无法找到 Web 实现。原生实现会被 Capacitor 自动检测。

// 从 Capacitor 核心库导入插件
import { Plugins } from '@capacitor/core';
// 同时导入自定义插件包以支持 Web 平台
import 'my-plugin';

// 从核心插件中解构出自定义插件
const { MyPlugin } = Plugins;
await MyPlugin.echo({
value: '来自 Web 的问候!',
});