如果你正计划让自己的去中心化应用(DApp)无缝连接 Solana 网络并与用户的钱包交互,这篇指南会帮你 一针见血、一步到位 搞懂浏览器插件钱包的 Injected Provider API。
什么是浏览器插件钱包的 Injected Provider API?
浏览器插件钱包通过 window.okxwallet.solana 对象把 Solana 兼容链 的 JavaScript API 注入到网页。开发者可凭此完成以下三件事:
- 请求连接用户账户
- 读取链上数据
- 协助签名消息与交易
换句话说,Injected Provider API 就是连接浏览器插件钱包与 DApp 的“隐形桥梁”。
连接账户:一行代码搞定权限申请
window.okxwallet.solana.connect()使用方法
- 异步调用
connect()会返回一个Promise。 - 用户确认 →
Promiseresolve,可立即拿到其公钥。 - 用户拒绝 →
Promisereject,并在控制台抛出错误码。
返回对象中会附带 isConnected 布尔值,帮助你随时判断连接状态。
try {
const resp = await window.okxwallet.solana.connect()
console.log('已连接到:', resp.publicKey.toString())
} catch (err) {
console.error('连接失败:', err)
}签名交易:签、发两步走
签名并直接发送
signAndSendTransaction(transaction) 适合一键提交:
const tx = new Transaction().add(transfer)
const { signature } = await window.okxwallet.solana.signAndSendTransaction(tx)只签名不发送
有时你需要自己控制节点 RPC,这时选 signTransaction(transaction):
const signedTx = await window.okxwallet.solana.signTransaction(tx)
// 自己发 Raw tx
await connection.sendRawTransaction(signedTx.serialize())批量签名
一次搞定多笔交易:
const signedTxArr = await window.okxwallet.solana.signAllTransactions([tx1, tx2, tx3])签名消息:零手续费验证地址所有权
若要为登录、权益证明或其他链外场景背书,只需:
- 准备一个 UTF-8 或十六进制编码的
Uint8Array。 - 调用
signMessage(args):
const message = new TextEncoder().encode('Welcome to DEX!')
const signed = await window.okxwallet.solana.signMessage({ message })返回的 signed.signature 即为链下无 gas 的签名结果,验证快捷方便。
生命周期事件:动态响应用户操作
| 事件名称 | 触发场景 | 典型用途 |
|---|---|---|
connect | 用户同意 DApp 的钱包连接请求时 | 刷新 UI,显示余额 |
disconnect | 用户主动断开、插件上线/下线时 | 清理状态,回到未登录页 |
accountChanged | 用户在插件内部切换子账户且已授权当前域名 | 自动读到新账户公钥,重绘 |
示例监听:
window.okxwallet.solana.on('accountChanged', (newPubKey) => {
if (newPubKey) updateUI(newPubKey)
else redirectToConnect()
})FAQ:开发者最关心的 5 个问题
- 问:用户关掉弹窗后怎么办?
答:connect()会reject,捕获异常后在 UI 上主动提示重试即可。 - 问:如何在移动端浏览器也能保持一致体验?
答:浏览器插件钱包针对内部 WKWebView/Chrome Custom Tab 实现了 shim,API 名称保持一致,无需额外判断。 - 问:调试时为何获取不到
window.okxwallet.solana?
答:请确认已安装插件且明文协议为https://,普通 http 站点出于安全策略会被屏蔽。 - 问:
signTransaction被标记已弃用怎么办?
答:官方推荐新目录signAndSendTransaction,老接口仍然可用,短期内无移除计划。 - 问:批量签名是否有限制?
答:一次上限 10 笔交易,超过会自动分批处理,请合理分片请求降低失败概率。
最佳实践:提交流程与异常兜底
- 引导文案:在“连接钱包”按钮旁说明“仅需确认一次,即可永续免登录”。
- 异常日志:统一码
try/catch,将错误码发回后端分析,便于运营改进。 - 链上重试:
sendRawTransaction后监听区块,超时则二次广播 Max 方案提高成功概率。
通过以上代码、范式与事件管理组合,你将轻松获得与 Solana 生态 DEX API、浏览器插件钱包、Solana 兼容链 完美匹配的 Web3 体验。祝开发顺利!