@lifi/widget-light 所有导出项的完整 API 参考。
<LiFiWidgetLight>
在 iframe 内渲染 widget 并管理 postMessage 桥接的主组件。
Props
示例
每个页面仅支持一个
<LiFiWidgetLight> 实例。事件总线和 guest bridge 是模块级单例。useWidgetLightHost(options)
管理 postMessage 桥接主机端的底层钩子。如果你需要渲染自己的 <iframe> 元素而非使用 <LiFiWidgetLight> 组件,请使用它。
Options
返回值
示例
useWidgetLightEvents()
返回一个类型化的事件发射器,用于订阅 widget 事件。可以从任何组件调用 — 无需 provider 包裹。
返回值
示例
类型
WidgetLightChainType 与 WidgetChainType: 这两个联合类型都描述生态系统的判别标识,并包含用于 Tron 的 TVM。在 iframe 的 postMessage 协议中使用 WidgetLightChainType(例如 IframeEcosystemHandler.chainType)。在面向主机的配置类型(例如 ConnectWalletArgs.chainType,即托管的 widget 告知你的应用要连接哪个生态系统)中使用 WidgetChainType。这两个名称之所以不同,是因为协议层级的类型和配置层级的类型在包中是分开定义的。
WidgetLightConfig
主配置类型。必须可 JSON 序列化。完整参考请见 配置 Widget Light。
integrator: string
ConnectWalletArgs
当 widget 请求连接钱包时传递给 onConnect 回调的参数:
IframeEcosystemHandler
由所有生态系统处理器实现的接口:
WidgetLightEvent
所有事件名称的枚举。其取值和 payload 类型请见 Widget Light 事件。
WidgetLightChainType
用于 postMessage 协议的链类型判别标识:
WidgetChainType
用于配置的扩展链类型(包含 TVM):
FAQ
我可以在同一页面上运行多个 widget 吗?
不可以。@lifi/widget-light 对事件总线和 guest bridge 使用模块级单例。每个页面仅支持一个 <LiFiWidgetLight> 实例。
src 应该使用什么 URL?
默认值(https://widget.li.fi)是生产环境托管的 widget。在大多数用例中,你完全不需要设置 src。若要针对特定版本或自托管的部署进行测试,请将你的自定义 URL 作为 src 传入。
为什么 config 必须可 JSON 序列化?
配置通过postMessage 发送到 iframe,而 postMessage 使用结构化克隆算法。React 节点、函数、类实例和 MUI 主题对象无法被克隆。WidgetLightConfig 类型只暴露可序列化的字段(不含 React 节点、回调或 MUI 主题对象),因此类型系统会在编译时拒绝大多数不可序列化的值。这是通过省略字段来实现约束,而非一种通用的可序列化性检查,因此仍要确保你传入的任何值在运行时都是可 JSON 序列化的。
自动调整大小是如何工作的?
当autoResize 为 true 时,iframe 内容使用 ResizeObserver 检测高度变化并将其发布到主机。主机直接设置 iframe.style.height 以实现零闪烁的更新。如果你想自行通过 CSS 控制 iframe 尺寸,请设置 autoResize={false}。
页面刷新后我需要处理重新连接吗?
在每次挂载时,钱包状态会通过INIT 握手从你的应用发送到 iframe。如果你的 wagmi/wallet-adapter 处理重新连接(大多数默认情况下都会),widget 将自动接收到重新连接后的状态。
安全性是如何处理的?
iframeOrigin 会自动从 src 派生(默认为 https://widget.li.fi),因此 postMessage 通信被限制到正确的来源。来自其他来源的消息会被静默丢弃。只有当你想覆盖派生出的值时,才需要显式设置 iframeOrigin。
我在哪里可以找到可运行的示例?
widget 仓库包含两个示例:- vite-iframe-wagmi — 最小化的仅 EVM 集成
- vite-iframe — 完整的多生态系统设置,包含事件、配置响应式和外部钱包管理

