iframe-bridge-sdk
Version:
Universal iframe communication SDK - unified package for host and guest applications
189 lines (136 loc) • 3.51 kB
Markdown
Universal iframe communication SDK - 用于宿主应用和访客应用之间通信的统一包。
- 🚀 **Host SDK**: 在宿主应用中运行,创建iframe并与Guest SDK通信
- 🎯 **Guest SDK**: 在iframe内部运行,与Host SDK进行双向通信
- 📡 **事件系统**: 支持自定义事件和请求-响应模式
- 🔒 **类型安全**: 完整的TypeScript类型支持
- ⚡ **轻量级**: 无外部依赖,体积小巧
```bash
npm install
npm run build
```
```bash
npm pack
```
这将生成一个 `.tgz` 文件,例如:`devo-iframe-bridge-1.0.0.tgz`
```bash
npm install /path/to/devo-iframe-bridge-1.0.0.tgz
```
```bash
cd /path/to/sdk
npm link
cd /path/to/your-project
npm link @devo/iframe-bridge
```
```typescript
import { HostSDK } from '@devo/iframe-bridge';
// 创建Host SDK实例
const hostSDK = new HostSDK({
src: 'http://localhost:3000/guest.html',
selector: '#iframe-container',
width: '100%',
height: '600px',
timeout: 10000,
allowedOrigins: ['http://localhost:3000'],
});
// 初始化
await hostSDK.init();
// 监听事件
hostSDK.on('custom-event', (data) => {
console.log('收到自定义事件:', data);
});
// 发送请求
const response = await hostSDK.request('get-data', { id: 123 });
console.log('响应:', response);
// 发送事件
hostSDK.emit('update-data', { value: 'new data' });
```
```typescript
import { GuestSDK } from '@devo/iframe-bridge';
// 创建Guest SDK实例
const guestSDK = new GuestSDK({
timeout: 10000,
});
// 初始化
await guestSDK.init();
// 监听来自Host的事件
guestSDK.on('update-data', (data) => {
console.log('收到更新:', data);
});
// 处理Host的请求
guestSDK.handleRequest('get-data', async (params) => {
return { data: 'some data', params };
});
// 发送事件到Host
guestSDK.emit('data-changed', { timestamp: Date.now() });
// 发送请求到Host
const result = await guestSDK.request('save-data', { content: 'new content' });
```
```typescript
interface HostConfig {
width?: string; // iframe宽度
height?: string; // iframe高度
src: string; // iframe源地址
selector: string; // 容器选择器
timeout?: number; // 超时时间(ms)
allowedOrigins?: string[]; // 允许的源域名
}
```
```typescript
interface GuestConfig {
timeout?: number; // 超时时间(ms)
}
```
```typescript
// 监听事件
sdk.on('event-name', (data) => {
// 处理事件
});
// 发送事件
sdk.emit('event-name', data);
// 移除监听器
sdk.off('event-name', callback);
```
```typescript
// 发送请求
const response = await sdk.request('method-name', params);
// 处理请求
sdk.handleRequest('method-name', async (params) => {
// 处理请求并返回响应
return { success: true, data: 'result' };
});
```
```bash
npm run dev
npm run clean
npm run build
```
MIT License
欢迎提交 Issue 和 Pull Request!