被动接收TronLink插件的消息
TronLink 支持 TRON 主网及测试网(Shasta、Nile)。开发者可以在 DApp 中监听 TronLink 派发的事件消息,以判断当前选择的网络以及当前激活的账户。下面通过一个简单示例进行演示。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TronLink Events Demo</title>
</head>
<body>
<script>
// 1. 通过 TIP-6963 发现 TronLink provider,并在该 provider 上注册事件监听
let tron;
window.addEventListener("TIP6963:announceProvider", (e) => {
if (e.detail.info && e.detail.info.name === "TronLink") {
tron = e.detail.provider; // === window.tron
console.log("TronLink 检测成功!");
tron.on("accountsChanged", (accounts) => {
console.log("accountsChanged", accounts); // 钱包锁定时为 []
});
tron.on("chainChanged", ({ chainId }) => {
console.log("chainChanged", chainId);
});
tron.on("connect", ({ chainId }) => {
console.log("connect", chainId);
});
}
});
// 让已加载的钱包重新公告自己
window.dispatchEvent(new Event("TIP6963:requestProvider"));
// 2. 原始 window.postMessage 事件 — 涵盖旧版 3.x 事件与授权流程
window.addEventListener("message", function (e) {
if (!e.data || !e.data.message) return;
const { action, data } = e.data.message;
switch (action) {
// --- 历史授权事件(兼容 3.x,未来版本将废弃) ---
case "connectWeb":
console.log("connectWeb", data);
break;
case "acceptWeb":
console.log("acceptWeb", data);
break;
case "rejectWeb":
console.log("rejectWeb", data);
break;
case "disconnectWeb":
console.log("disconnectWeb", data);
break;
// --- 已废弃的 3.x 事件(主链 / 侧链检测) ---
case "tabReply":
if (data?.data?.node?.chain === "_") {
console.log("tronLink 当前选择主链");
} else {
console.log("tronLink 当前选择侧链");
}
break;
case "setAccount":
console.log("setAccount,当前地址:", data.address);
break;
case "setNode":
if (data?.node?.chain === "_") {
console.log("tronLink 当前选择主链");
} else {
console.log("tronLink 当前选择侧链");
}
break;
}
});
</script>
</body>
</html>
下面分别对每个监听器进行详细说明,含返回值与截图。
检测 TronLink(TIP-6963)
事件标识:TIP6963:announceProvider
简介
TronLink 通过 TIP-6963 协议对外公告自己的 provider 对象。监听 TIP6963:announceProvider 并派发 TIP6963:requestProvider,即可安全地发现钱包,无需污染全局命名空间或轮询 window.tron。announce 事件返回的 provider 即为 window.tron。
完整的 TIP-6963 规范请参考 主动请求 TronLink 插件功能。
技术规范
代码示例
let tron;
window.addEventListener('TIP6963:announceProvider', (e) => {
if (e.detail.info && e.detail.info.name === 'TronLink') {
tron = e.detail.provider; // === window.tron
console.log('TronLink 检测成功!');
}
});
// 让已加载的钱包重新公告自己
window.dispatchEvent(new Event('TIP6963:requestProvider'));
如果派发请求后 tron 仍为 undefined,则说明用户未安装 TronLink,可提示用户进行安装。
账户改变消息
消息标识: accountsChanged
简介
以下情况会产生此消息
-
用户登录
-
用户切换账号
-
用户锁定钱包
-
钱包超时自动锁定
技术规范
代码示例
window.tron.on('accountsChanged', (accountArray) => {
// handler logic
console.log('got accountsChanged event', accountArray)
})
返回值
['your_current_account_address']
返回值示例
-
用户登录时,消息体内容为
['TZ5XixnRyraxJJy996Q1sip85PHWuj4793'] // 当前的账号 -
用户切换账号时,消息体内容为
['TRKb2nAnCBfwxnLxgoKJro6VbyA6QmsuXq'] // 新选择的账号地址 -
用户锁定和钱包超时自动锁定时,消息体内容为
[]
旧版用法(不推荐): setAccount(3.x)
网络改变消息
消息标识: chainChanged
简介
开发者可以监听此消息来获取网络的改变 以下情况会产生此消息
- 用户改变网络的时候
技术规范
代码示例
window.tron.on('chainChanged', ({chainId}) => {
// handler logic
console.log('got chainChanged event', chainId)
})
返回值
{
chainId: string;
}
0x2b6653dc - shasta(shasta测试网): 0x94a9059e - nile(nile测试网): 0xcd8690dc - chainId的值大小写敏感。 旧版用法(不推荐): setNode(3.x) 或 tabReply(3.x)
TronLink可以提供服务的消息
消息标识: connect
简介
如果 TronLink 及 window.tron 对象可用,此事件会在 provider 初始化完成后被派发一次(包含 disconnect 之后重新连接的场景)。
时序注意:该事件在插件 init 完成后约 100ms 派发。如果 DApp 的监听器在插件 init 之后才注册(例如页面加载较慢、通过 TIP-6963 requestProvider 才拿到 provider),则可能错过 connect 事件。此时直接把"provider 存在"视作已连接,并结合 tron.tronWeb?.ready 判断当前状态即可。
技术规范
代码示例
window.tron.on('connect', ({chainId}) => {
// handler logic
console.log('got connect event', chainId)
})
旧版用法(不推荐): connectWeb(postMessage) 或 acceptWeb(postMessage)
断开连接网站消息
消息标识: disconnect
简介
TIP-1193 规范规定:当 provider 与所有链断开连接时,应派发 disconnect 事件并携带 ProviderRpcError 对象。
当前 TronLink 行为:TronLink 目前 不会 在 provider 上派发 disconnect。当用户断开网站(或钱包被锁定)时,会通过 accountsChanged 派发空数组 [] 来表示——在 TronLink 实现 disconnect 之前,请以此作为断连信号。
技术规范
代码示例
// 规范保留事件——注册监听器无害,但当前不会被触发。
window.tron.on('disconnect', (providerRpcError) => {
console.error(providerRpcError); // { code: 4900, message: 'Disconnected' }
})
旧版用法(不推荐): disconnectWeb(postMessage) 或 rejectWeb(postMessage)
历史遗留问题
以下消息通过 window.postMessage 派发,DApp 接收到的内容是一个 MessageEvent,事件结构可参考 MessageEvent 的 MDN 文档。
以下四个消息为了兼容 3.x 保留,并在未来版本将会被废弃:
-
用户拒绝连接消息
rejectWeb -
用户断连网站消息
disconnectWeb -
用户确定连接消息
acceptWeb -
用户主动连接网站消息
connectWeb
用户拒绝连接消息 rejectWeb
消息标识: rejectWeb
以下情况会产生此消息
- dapp请求连接,用户在弹窗中拒绝连接后

开发者可以监听此消息来获取用户拒绝连接消息
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "rejectWeb") {
// handler logic
console.log('got rejectWeb event', e.data)
}
})
用户断连网站消息 disconnectWeb
消息标识: disconnectWeb
以下情况会产生此消息
- 用户主动断开连接

开发者可以监听此消息来获取用户主动断连消息
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "disconnectWeb") {
// handler logic
console.log('got disconnectWeb event', e.data)
}
})
用户确定连接消息 acceptWeb
消息标识: acceptWeb
以下情况会产生此消息
- 用户确定连接消息

开发者可以监听此消息来获取用户确定连接消息
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "acceptWeb") {
// handler logic
console.log('got acceptWeb event', e.data)
}
})
用户主动连接网站消息 connectWeb
消息标识: connectWeb
以下情况会产生此消息
- 用户主动连接网站时

开发者可以监听此消息来获取用户主动连接网站消息
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "connectWeb") {
// handler logic
console.log('got connectWeb event', e.data)
}
})
已废弃的 3.x 事件(主链 / 侧链)
以下事件是 TronLink 3.x 通过原始 window.postMessage 用于检测当前网络与账户的方式。它们已被 window.tron 上的 accountsChanged / chainChanged 取代,仅供存量代码参考 — 新接入请勿使用。
网络初始化(tabReply)
页面加载后 TronLink 完成初始化时触发一次。检查 e.data.message.data.data.node.chain:值为 '_' 表示主链,其他值表示对应侧链标识。
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "tabReply") {
if (e.data.message.data.data.node.chain == '_') {
console.log("tronLink 当前选择主链");
} else {
console.log("tronLink 当前选择侧链");
}
}
});
账户切换(setAccount)
用户切换当前账户时触发。
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "setAccount") {
console.log("当前地址:", e.data.message.data.address);
}
});
网络切换(setNode)
用户切换网络时触发。chain == '_' 的判断方式与 tabReply 相同。
window.addEventListener('message', function (e) {
if (e.data.message && e.data.message.action == "setNode") {
if (e.data.message.data.node.chain == '_') {
console.log("tronLink 当前选择主链");
} else {
console.log("tronLink 当前选择侧链");
}
}
});