跳到主要内容
版本:v2

PWA 元素组件

某些 Capacitor 插件(如 CameraToast)在非原生环境下运行时提供基于网页的 UI 界面。例如,在网页端调用 Camera.getPhoto() 时,会加载一个响应式的照片拍摄界面:

这些 UI 是通过 Web 组件实现的。由于这些元素被封装在 Shadow DOM 中,因此不会与您自己的 UI 产生冲突。

安装指南

要启用这些控件,您需要将 @ionic/pwa-elements 添加到您的应用中。

典型安装方式包括导入包并注册元素组件,或在应用的 index.html<head> 中添加脚本标签:

导入 PWA 元素组件

npm install @ionic/pwa-elements

根据您选择的框架,导入元素加载器并在适当的时机调用:

React

index.tsxindex.js

import { defineCustomElements } from '@ionic/pwa-elements/loader';

ReactDOM.render(<App />, document.getElementById('root'));

// 在应用首次渲染完成后调用元素加载器
defineCustomElements(window);
Vue

main.ts

import Vue from 'vue';
import App from './App.vue';
import router from './router';

import { defineCustomElements } from '@ionic/pwa-elements/loader';

Vue.config.productionTip = false;

new Vue({
el: '#app',
router,
template: '<App/>',
components: { App },
});

// 在平台初始化完成后调用元素加载器
defineCustomElements(window);
Angular

main.ts

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

import { defineCustomElements } from '@ionic/pwa-elements/loader';

if (environment.production) {
enableProdMode();
}

platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.log(err));

// 在平台初始化完成后调用元素加载器
defineCustomElements(window);

通过脚本标签引入

您也可以通过 index.html 中的脚本标签引入 PWA 元素组件,但请注意这种方式不适用于离线场景:

<script
type="module"
src="https://unpkg.com/@ionic/pwa-elements@2/dist/ionicpwaelements/ionicpwaelements.esm.js"
></script>
<script
nomodule
src="https://unpkg.com/@ionic/pwa-elements@2/dist/ionicpwaelements/ionicpwaelements.js"
></script>