网页点连接钱包没反应:多扩展抢一个入口与 EIP-6963 的排查顺序 图 1
网页点连接钱包没反应:多扩展抢一个入口与 EIP-6963 的排查顺序 · 图 1

同一个浏览器里装了两个钱包扩展,是很常见的状态:一个日常用、一个为了某条链装的,或者试用后没删干净。接下来就会遇到这类怪事:点”连接钱包”毫无反应,转圈几秒什么都不弹;或者弹出来的不是你以为的那家钱包;或者在别的浏览器上一切正常。这类问题的根子大多不在网页也不在链,而在浏览器里”钱包入口”是怎么注册的。

老机制为什么会打架

早期网页找钱包的方式很朴素:去看注入对象(通常挂在 window.ethereum 上)在不在。这个坑在于它是单一入口——多个扩展都想挂同一个名字,结果往往是最后加载的那个占了位置,其余的等于没被看见。用户在页面端看到的是”点了没反应”,实际是网页压根没找到自己想连的那家。有的站会去翻其他别名对象(比如某些钱包自己的专用变量名),但站方无法穷举所有扩展的别名,所以这条路天生不完整。

EIP-6963 改成了广播声明

新机制不再抢同一个对象:网页发出 eip6963:requestProvider 的请求,在场每个支持该规范的钱包各自广播 eip6963:announceProvider,各自带一份自己的说明,字段包含一个反向域名标识、一个用于区分实例的 uuid、显示名称和图标。网页因此能同时看到多家的存在,再由用户选。

规范同时留了一句重要的警告:那个反向域名标识是自报的,任何人都可以声称自己是某个名字,所以它可以被仿冒或填错。也就是说,这份声明解决了”存在几个钱包”的发现需求,但没有替你验证”这确实是官方那家”。真实来源的验证仍然要回到你自己安装时的路径:从官方站点进入官方商店链接,安装后核对扩展发布方与 ID。声明字段可以被抄,安装来源抄不走。

五步排查顺序

第一步,先把症状定位清楚。是所有网站都连不上,还是只有这一家?只有这一家,多半是网站侧还没实现新发现机制;哪家都连不上,问题在你的扩展或浏览器设置。

第二步,用二分法确认是不是扩展冲突。到浏览器扩展管理页把其他钱包扩展临时停用,只留你要用的那一个,刷新页面再试。能连上,就是注册顺序的问题,之后按需要决定保留哪几个常开。

第三步,刷新页面再看。钱包扩展更新或重载后,已打开页面的注入上下文可能失效,此时页面里的旧引用指向一个已经不存在的对象,必须刷新重建。这一步解决很多”昨天还好、今天不行”的情况。

第四步,检查扩展与站点两侧版本。扩展长时间未更新,可能只支持旧的单一注入;站点过旧的连接按钮也可能只认旧方式。两边都升级到当前版本,通常比改网络、换节点有效得多。顺带说一句,换 RPC 节点对这类问题完全无关——节点只管链上数据的读写,不参与”网页能不能弹出钱包”这一层,链标识、高度与编号三项一致性核验属于节点侧排查,见 钱包 RPC 出错要换节点?先做链标识、高度与编号三项一致性核验,与本文的连接故障不是一回事。

第五步,走换路方案:在电脑浏览器里直接打开该网站的官方域名再连接,或在钱包 App 内用它的连接功能。手机 App 内没有注入这一套机制,桌面网页上的连接按钮在应用内浏览器里也常常不起作用,那条路的成因和换路办法见 应用内浏览器点连接钱包没反应:内嵌网页缺的通道与换路方法

连不上不等于不安全,连上了也不等于给了钱

还有一层容易混:连接(把某个账户地址告诉这个站点)和授权(允许某个合约按额度动用你的资产)是两件完全不同的事。前者只是让它看见你的地址,后者才在链上留下可动资产的许可。清理已连接站点、以及”断开连接”和”撤销授权”的区别,在 钱包连接过的网站清单怎么清:断开连接和撤销授权是两件事 里逐项对照。排查连接问题时不要顺手去签任何”修复连接”的请求——修连接永远不需要你签交易,也不该出现任何要动资产的弹窗。