aile-capacitor-aiff
Version:
AIFF WebView plugin for Capacitor with iframe-based web implementation
234 lines (233 loc) • 5.8 kB
TypeScript
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;
}