UNPKG

aile-capacitor-aiff

Version:

AIFF WebView plugin for Capacitor with iframe-based web implementation

234 lines (233 loc) 5.8 kB
import type { PluginListenerHandle } from '@capacitor/core'; export interface AiffWebViewPlugin { /** * 在新的 WebView 对话框中打开 URL * @param options 配置选项 * @returns Promise<void> */ openWebView(options: OpenWebViewOptions): Promise<void>; /** * 向 WebView 注入并执行 JavaScript 代码 * @param options 包含要执行的代码 * @returns Promise<void> */ executeScript(options: { code: string; }): Promise<void>; /** * 向 WebView 发送消息 * @param options 消息数据 * @returns Promise<void> */ postMessage(options: { detail: Record<string, any>; }): Promise<void>; /** * 设置 WebView 的 URL * @param options URL 配置 * @returns Promise<void> */ setUrl(options: { url: string; }): Promise<void>; /** * 重新加载当前页面 * @returns Promise<void> */ reload(): Promise<void>; /** * 监听 URL 变化事件 */ addListener(eventName: 'urlChangeEvent', listenerFunc: UrlChangeListener): Promise<PluginListenerHandle>; /** * 监听 WebView 关闭事件 */ addListener(eventName: 'closeEvent', listenerFunc: CloseListener): Promise<PluginListenerHandle>; /** * 监听来自 WebView 的消息 */ addListener(eventName: 'messageFromWebview', listenerFunc: MessageFromWebviewListener): Promise<PluginListenerHandle>; /** * 监听页面加载完成事件 */ addListener(eventName: 'browserPageLoaded', listenerFunc: () => void): Promise<PluginListenerHandle>; /** * 监听页面加载错误事件 */ addListener(eventName: 'pageLoadError', listenerFunc: () => void): Promise<PluginListenerHandle>; } export interface OpenWebViewOptions { /** * 要加载的目标 URL 地址 (必需) */ url: string; /** * 自定义 HTTP 请求头 */ headers?: Record<string, string>; /** * HTTP Basic 认证凭据 */ credentials?: Credentials; /** * 工具栏类型 * @default '' */ toolbarType?: ToolBarType; /** * WebView 对话框标题 * @default '新窗口' */ title?: string; /** * 是否显示重新加载按钮 * @default false */ showReloadButton?: boolean; /** * 关闭时是否显示确认对话框 * @default false */ closeModal?: boolean; /** * 关闭确认框标题 (iOS) * @default '关闭' */ closeModalTitle?: string; /** * 关闭确认框描述文本 (iOS) * @default '您确定要关闭此窗口吗?' */ closeModalDescription?: string; /** * 关闭确认框确定按钮文本 (iOS) * @default '关闭' */ closeModalOk?: string; /** * 关闭确认框取消按钮文本 (iOS) * @default '取消' */ closeModalCancel?: string; /** * 工具栏背景颜色 (十六进制) * @default '#ffffff' */ toolbarColor?: string; /** * 是否显示网站标题 * @default true */ visibleTitle?: boolean; /** * 是否显示箭头作为关闭图标 * @default false */ showArrow?: boolean; /** * 在页面显示前执行的 JavaScript 脚本 */ preShowScript?: string; /** * 是否在页面加载完成后再显示 WebView * @default false */ isPresentAfterPageLoad?: boolean; /** * 是否忽略不受信任的 SSL 证书错误 * @default false */ ignoreUntrustedSSLError?: boolean; /** * 是否允许 Safari 开发者工具调试 (仅 iOS) * @default false */ isInspectable?: boolean; /** * 是否带动画效果打开 WebView (仅 iOS) * @default true */ isAnimated?: boolean; /** * 是否激活原生导航功能 (仅 Android) * @default false */ activeNativeNavigationForWebview?: boolean; /** * 是否禁用返回原生应用 (仅 Android) * @default false */ disableGoBackOnNativeApplication?: boolean; /** * 自定义近关闭按钮配置 */ buttonNearDone?: ButtonNearDoneOptions; /** * iframe sandbox 属性配置 (仅 Web) */ iframeSandbox?: string[]; /** * 是否允许弹窗 (仅 Web) * @default false */ allowPopups?: boolean; /** * 内容安全策略 (仅 Web) */ cspPolicy?: string; /** * 主题配置 (仅 Web) * @default 'auto' */ theme?: 'light' | 'dark' | 'auto'; } export interface Credentials { username: string; password: string; } export interface ButtonNearDoneOptions { /** * 按钮图标 (base64 编码或系统图标名称) */ icon?: string; /** * 按钮标题文本 */ title?: string; /** * 按钮是否可见 * @default false */ visible?: boolean; } export declare enum ToolBarType { ACTIVITY = "activity", NAVIGATION = "navigation", BLANK = "blank", DEFAULT = "" } export type UrlChangeListener = (event: { url: string; }) => void; export type CloseListener = (event: { url: string; }) => void; export type MessageFromWebviewListener = (event: { detail: Record<string, any>; rawMessage?: string; }) => void; export type AiffWebViewEvents = 'urlChangeEvent' | 'closeEvent' | 'messageFromWebview' | 'browserPageLoaded' | 'pageLoadError'; export interface AiffWebViewEventMap { urlChangeEvent: { url: string; }; closeEvent: { url: string; }; messageFromWebview: { detail: Record<string, any>; rawMessage?: string; }; browserPageLoaded: void; pageLoadError: void; }