仅在页面刷新后,Metamask才会注入web3

时间:2018-07-06 11:05:50

标签: javascript reactjs metamask

在我的react应用程序中,我正在像下面检查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?

1 个答案:

答案 0 :(得分:1)

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

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

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

其背后的原因是,我打开页面以在新选项卡中安装MetaMask扩展,并且用户需要返回到我的选项卡,然后才能继续进行入职流程。