@ spectly/ core (帮助) @ action
Web vision, iframes, 和web应用之间的跨平台通信的核心桥架框架.
安装
# npm
npm install @aspectly/core
# pnpm
pnpm add @aspectly/core
# yarn
yarn add @aspectly/core
概览
@aspectly/core 提供基础桥式通信层,使双向消息能够在不同的执行上下文之间传递:
- Webview QQ 反应原生: 网络内容与React Industrial apps之间的通信
- iframe 父窗口: iframes与其主页之间的通信
- 浏览器上下文: 具有全局桥接实例的独立浏览器用法
@aspectly/core 这是 网页侧 桥。 同样的代码运行 每个本地主机不变 ——Web(iframe/popup),回放原生,.NET(CefSharp/WebView2),iOS/macOS,Android,Flutter,和Linux/WebKitGTK. 正确的主机运输是 运行时自动检测 通过 @aspectly/transports (优先事项: cefsharp 100 > (韩语) webkit 95 > (韩语) react-native 90 > (韩语) android 85个 > flutter 84 > (韩语) iframe 80 > (韩语) window 70 > (韩语) postmessage 10),因此你的嵌入式网络应用从不需要特定主机的分支.
快速启动
在网络视图或框架内
import { AspectlyBridge } from '@aspectly/core';
// Create a bridge instance
const bridge = new AspectlyBridge();
// Initialize with handlers for incoming requests
await bridge.init({
greet: async (params: { name: string }) => {
return { message: `Hello, ${params.name}!` };
},
getData: async () => {
return { timestamp: Date.now() };
},
});
// Send requests to the parent container
const result = await bridge.send('parentMethod', { data: 'value' });
console.log(result);
浏览器脚本标签使用法
<script src="https://unpkg.com/@aspectly/core/dist/browser.js"></script>
<script>
window.aspectlyBridge.init({
greet: async (params) => ({ message: `Hello, ${params.name}!` })
}).then(() => {
console.log('Bridge initialized');
});
</script>
API 参考
外观桥
通桥通信的主课.
构造器
const bridge = new AspectlyBridge(options?: BridgeOptions);
选项 :
timeout?: number- 处理器执行超时, 以毫秒计( 默认: 1 000)
方法
init(handlers?: BridgeHandlers): Promise<boolean>
启动桥接器处理收到的请求。 回来的诺言只有在两个都解决的时候 Init 财务报告和审定财务报表 InitResult 信件已经交换(通过 tryResolveInit),确保全面握手完成.
await bridge.init({
methodName: async (params) => {
// Handle request and return result
return { success: true };
},
});
send<T>(method: string, params?: object): Promise<T>
向彼所发请求.
const result = await bridge.send<{ data: string }>('getData', { id: 123 });
supports(method: string): boolean
检查某一方法是否得到另一方的支持 .
if (bridge.supports('getData')) {
const data = await bridge.send('getData');
}
isAvailable(): boolean
检查桥是否初始化并准备就绪.
if (bridge.isAvailable()) {
// Bridge is ready
}
subscribe(listener: BridgeListener): number
订阅用于监测/调试的所有结果事件 .
bridge.subscribe((result) => {
console.log('Event:', result.method, result.data);
});
registerHandler(method: string, handler: (params: object) => Promise<unknown>): void
初始化后对收到的请求进行登记.
bridge.registerHandler('newMethod', async (params) => {
return { result: 'value' };
});
unregisterHandler(method: string): void
删除先前注册的处理器 .
bridge.unregisterHandler('newMethod');
unsubscribe(listener: BridgeListener): void
删除结果事件倾听器 .
destroy(): void
清理桥订阅.
bridge.destroy();
处理错误
该桥为不同的故障情况提供打入错误:
import { BridgeErrorType } from '@aspectly/core';
try {
await bridge.send('unknownMethod');
} catch (error) {
switch (error.error_type) {
case BridgeErrorType.UNSUPPORTED_METHOD:
console.log('Method not registered');
break;
case BridgeErrorType.METHOD_EXECUTION_TIMEOUT:
console.log('Handler timed out');
break;
case BridgeErrorType.REJECTED:
console.log('Handler threw error:', error.error_message);
break;
case BridgeErrorType.BRIDGE_NOT_AVAILABLE:
console.log('Bridge not initialized');
break;
}
}
建筑
该套装由四层组成:
- 桥芯 - 低级平台检测和信息序列化
- 桥内 - 礼宾管理和请求/答复生命周期
- 桥基 - 清洁公共API接口
- 外观桥 - 组成各层的主要入口
本地主机
一样 @aspectly/core 网络代码在每一个支持的平台家族上与本地主机交谈, 并自动选择传输方式 @aspectly/transports数字 :
- 网页 (框架/人数), 原生反应,以及 反应本地网络/ Expo - npm 软件包
- . NET 网络 (CefSharp / WebView2, Windows) — NuGet (英语)
- iOS/macOS/ VisionOS 系统 — SwiftPM + CocoaPods (英语:
AspectlyBridge, (中文(简体) ),AspectlyBridgeWebKit(中文(简体) ) - 机器人 - 马文中心(
io.github.jeanisahakyan:aspectly-bridge-webview(中文(简体) ) - 小蝶头 (Dart)——酒吧.dev (中文(简体) )
aspectly_bridge(中文(简体) ) - Linux/ WebKitGTK 软件 (平通)——平通(平通)
aspectly-bridge,重复使用WebKit运输)
见 主读取器 用于完整主机矩阵,安装命令,以及本地主机API.
相关软件包
@aspectly/web- 网络/框架与反应钩的结合@aspectly/react-native- 反应原生网络视频集成@aspectly/react-native-web- 反应原生网络+iframe支持@aspectly/transports- 具有本地主机自动探测功能的运输层
许可证
麻省理工学院