2

在我的反应应用程序中,我正在检查 web3,如下所示,但在 chrome 上安装 metamask 后,我需要至少刷新一次页面。

detectAndReadMetaMaskAccount() {
        return new Promise((resolve, reject) => {
    if (typeof web3 === 'undefined' || typeof web3.currentProvider === 'undefined' || web3.currentProvider.isMetaMask !== true) {
                    reject({
                        code: "error.metamask.missing"
                    });
                }
}

以下是我正在执行的步骤:
1. 加载我的页面。
2. 在 chrome 上安装 metamask。
3. 单击调用上述函数但 web3 未定义的提交按钮。
4.但页面刷新后得到web3。

所以我的查询是,metamask 何时以及如何准确地注入 web3?有什么方法可以让 metamask 在不刷新页面的情况下注入 web3?

4

1 回答 1

1

不幸的是,在安装 MetaMask 后没有重新加载页面的情况下,我找不到任何强制 web3 更新的方法。

作为一种解决方法,我在窗口焦点更改时强制重新加载页面:

window.onfocus = () => {
    window.location.reload();
}

这背后的基本原理是我打开页面以在新选项卡中安装 MetaMask 扩展,并且用户需要返回到我的选项卡,然后才能继续启动过程。

于 2018-07-27T05:40:18.957 回答