前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么取不到metamask的账号? 原

为什么取不到metamask的账号? 原

作者头像
用户1408045
发布2019-05-08 10:43:33
1.3K0
发布2019-05-08 10:43:33
举报
文章被收录于专栏:汇智网教程汇智网教程

当你使用Metamask测试以太坊DApp时,如果出现莫名其妙的问题,检查一下web3.eth.accounts是否可以获取到账户,如果不能获取的话,那么最大的可能是你使用了新版的Metamask,并且默认启用了隐私模式。

有两种办法来让你的DApp可以正常访问Metamask管理的账户:关闭隐私模式,或者修改JavaScript代码使其兼容Metamask的隐私模式。

一、关闭隐私模式

在metamask中首先进入设置,然后点击security & privacy, 在隐私模式菜单,选择关闭隐私模式即可:

menu 2
menu 2

二、兼容隐私模式

在2018年11月,Metamask刚引入隐私模式时,该选项默认是关闭的。但是在 最新的版本中,已经默认开启了隐私模式。要求每个用户都手动关闭隐私模式 是不现实的,因此更好的方案是修改我们的JavaScript代码来兼容隐私模式:

代码语言:javascript
复制
window.addEventListener('load', async () => {
    // Modern dapp browsers...
    if (window.ethereum) {
        window.web3 = new Web3(ethereum);
        try {
            // Request account access if needed
            await ethereum.enable();
            // Acccounts now exposed
            web3.eth.sendTransaction({/* ... */});
        } catch (error) {
            // User denied account access...
        }
    }
    // Legacy dapp browsers...
    else if (window.web3) {
        window.web3 = new Web3(web3.currentProvider);
        // Acccounts always exposed
        web3.eth.sendTransaction({/* ... */});
    }
    // Non-dapp browsers...
    else {
        console.log('Non-Ethereum browser detected. You should consider trying MetaMask!');
    }
});

使用window.ethereum来判断是否新版metamask,如果是的话,就调用ethereum.enable() 方法来请求用户授权,这将在用户网页中弹出一个授权对话框,类似如下:

connect request
connect request

一旦用户点击了connect按钮,你的应用就可以像之前一样访问Metamask的账户了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、关闭隐私模式
  • 二、兼容隐私模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档