CrossBridge 使用示例
本指南提供了 CrossBridge 插件在各种场景下的详细使用示例。
1. 基础安装与配置
首先引入 CrossBridge:
typescript
import { CrossBridge } from '@pt/cross-bridge';2. 同域通信场景
2.1 独立标签页通信 (Standalone Tabs)
页面 A (发送方):
typescript
const bridgeA = new CrossBridge({
pageId: 'tab-a',
role: 'standalone',
adapters: ['shared-worker', 'broadcast-channel'], // 优先使用 SharedWorker,降级使用 QC
debug: true
});
await bridgeA.connect();
// 发送消息给 tab-b
bridgeA.sendTo('tab-b', 'greeting', { text: 'Hello from Tab A' });页面 B (接收方):
typescript
const bridgeB = new CrossBridge({
pageId: 'tab-b',
role: 'standalone',
adapters: ['shared-worker', 'broadcast-channel']
});
await bridgeB.connect();
bridgeB.on('greeting', (data, from) => {
console.log(`Received from ${from}:`, data.text);
});2.2 iframe 通信
父页面 (Parent):
typescript
const parentBridge = new CrossBridge({
pageId: 'parent-page',
role: 'parent',
adapters: ['post-message']
});
await parentBridge.connect();
// 广播给所有子 iframe
parentBridge.broadcast('update-theme', { theme: 'dark' });子 iframe (Child):
typescript
const childBridge = new CrossBridge({
pageId: 'child-1',
role: 'child',
adapters: ['post-message']
});
await childBridge.connect();
childBridge.on('update-theme', (data) => {
document.body.className = data.theme;
});3. 完全跨域通信场景
3.1 使用 WebSocket 中继 (高性能)
适用于需要实时通讯的场景。需要部署 server/relay-server.ts。
客户端配置:
typescript
const bridge = new CrossBridge({
pageId: 'cross-domain-app',
role: 'standalone',
adapters: [
{
type: 'websocket-relay',
config: {
relayServer: 'ws://localhost:8080', // 你的 WebSocket 服务地址
authentication: {
token: 'your-auth-token',
domain: 'your-domain.com'
}
}
}
]
});
await bridge.connect();3.2 使用 Iframe 桥接 (无后端)
适用于无法部署 WebSocket 服务端的场景。需要部署 server/bridge.html。
客户端配置:
typescript
const bridge = new CrossBridge({
pageId: 'static-site-app',
role: 'standalone',
adapters: [
{
type: 'iframe-bridge',
config: {
bridgeUrl: 'https://cdn.example.com/bridge.html' // 你的静态桥接页地址
}
}
]
});
await bridge.connect();4. 消息队列与持久化
CrossBridge 默认启用了消息队列,但你可以根据需求进行深度配置,尤其是持久化策略。
高级配置示例:
typescript
const bridge = new CrossBridge({
pageId: 'app-main',
role: 'standalone',
adapters: ['shared-worker'],
// 队列配置
queue: {
maxQueueSize: 2000,
cleanupInterval: 60000, // 每分钟清理一次
// 针对不同消息类型的特定配置
messageTypes: {
// 普通用户操作,短期缓存
'user-action': {
priority: 5,
ttl: 30000, // 30秒过期
storage: 'memory',
persistent: false
},
// 关键系统通知,必须送达,持久化到本地存储
'system-alert': {
priority: 1, // 最高优先级
ttl: 7 * 24 * 60 * 60 * 1000, // 7天有效
storage: 'local', // 使用 LocalStorage
persistent: true
},
// 大数据量同步,使用 IndexedDB
'data-sync': {
priority: 10,
ttl: 24 * 60 * 60 * 1000,
storage: 'indexeddb',
persistent: true
}
}
}
});5. 生命周期管理与错误处理
typescript
const bridge = new CrossBridge({ /* config */ });
try {
await bridge.connect();
console.log('Connected!');
// 检查连接状态
if (bridge.isConnected()) {
const pages = bridge.getConnectedPages();
console.log('Online pages:', pages);
}
} catch (error) {
console.error('Failed to connect:', error);
}
// 优雅断开
window.addEventListener('beforeunload', () => {
bridge.disconnect();
});