Metamask隐私模式的设置与兼容JS代码

标签: metamask

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

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

一、关闭隐私模式

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

menu 2

二、兼容隐私模式

在2018年11月,Metamask刚引入隐私模式时,该选项默认是关闭的。但是在
最新的版本中,已经默认开启了隐私模式。要求每个用户都手动关闭隐私模式
是不现实的,因此更好的方案是修改我们的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按钮,你的应用就可以像之前一样访问Metamask的账户了。

如果希望快速掌握以太坊智能合约与DApp开发,可以访问汇智网的在线互动课程:


原文链接:Metamask不能访问账户?隐私模式! — 汇智网

版权声明:本文为shebao3333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shebao3333/article/details/89475416

智能推荐

C语言按下列形式使用循环生成一个十阶的矩阵A(下三角)到二维数组中,再输出。

题目 按下列形式使用循环生成一个十阶的矩阵A(下三角)到二维数组中,再输出。 代码 运行结果...

脚本尝试mac电脑自动切换公司wifi

公司内部网络,每次需要登录。需要几步,选择WIFI 弹出登录页,输入用户密码才可登录成功。 因此,有一个想法利用脚本进行wifi自动登录。 提供一些思路,做出来体验不好,凑合能用,路过大神予以改进。 实现情况如下 1.需要获取登录url。就是弹出界面需要登录的url 利用抓包软件,可以做此事。mac中软件charles 主要是抓取登录时候的curl。如此可以通过curl命令直接进行登录。 2.自动...

反素数入门 zoj 2562 and codefore

学习资料来源传送们 反素数的定义:对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整             数,都有,那么称为反素数 定义理解:素数的约数只有两个 1  和  本身,而反素数的约数是尽可能多,比这个数小到正数的约数都要多 在ACM竞...

Scala语言基础(三)练习

(1)打印九九乘法表 简写 (二)worldCount实现 1.推演过程 2.综合起来 3.两个简化点 a. 其中,array.map(x => x.split(" “)).flatten效果和array.flatMap(x => x.split(” "))一致: b. 通过mapValues方法,直接作用于Map的value值,只改变val...

Python-深度学习-学习笔记(16):利用h5py对数据进行读写的方法

Python-深度学习-学习笔记(16):利用h5py对数据进行读写的方法 通常情况下,在神经网络训练的过程中有很多参数,有些参数需要我们后期进行处理,所以需要保存下来,这时我们就可以采用h5py库对数据集或者权重、偏差等一下参数进行保存为.h5文件。 1、数据的存储与读取 写入数据: 假设我这里有训练的到的准确率的数据,我需要将这些数据进行存储: 读取数据: 即可打印出结果。 2、训练模型的存储...

猜你喜欢

ISODATA算法

在kmean基础上分割,合并。多波段图像计算。 思想和网上ISODATA似乎有点不同,当聚类之间不满足条件需要合并或者分裂的时候直接减少增加分类个数,重新进行聚类计算。根据设置的阈值不同会有不同的计算结果。 运行截图: 原图 分类后图像: 分类结果k: 单波段分类截图: 分类数:7...

python进行网站访问数据可视化

网站访问分析 1.内容介绍 利用python对IIS日志文件进行基本的网站访问分析。 一条访问日志数据如下: 所利用的日志主要信息: 用户的IP:c-ip 访问日期:date 访问时间:time 分析目标: 按年度统计各个时间段的访问情况; 访问IP所在城市分布; 有没有异常访问记录(过高,频繁); 2.批量读取日志文件 该日志文件存放为txt格式,一天的数据存放于一个文件中,需要批量对txt文件...

【Java】异常与捕获

目录   异常体系 非受查异常 受查异常 异常处理格式 Throws Throw 面试题: 异常体系 当程序出现错误时,能够最大化的减少损失的一种保护手段   Error(栈溢出):Error类描述Java运行时内部错误与资源耗尽错误,应用程序不抛出此类异常,这种内部错误一旦出现,除了告知用户,并且使程序安全终止。 RuntimeException(运行时异常):由于程序错误导...

贪吃蛇控制台版本c++

这是一个贪吃蛇游戏的控制台版本。 游戏制作的思路是用二维数组表示地图,用链表表示蛇身,通过对链表的增添节点、删除节点模拟蛇的移动、进食。通过随机函数随机生成食物,蛇运动速度随得分增多而增加。 Snake类的定义。 蛇身节点 这里采用宏定义的方式简化表示各种方块。 通过变量direction_x,direction_y来表示蛇的当前运动方向,通过W A S D改变方向。以上为游戏的底层实现方法。 对...

C++核心准则Con.2:默认情况下,将成员函数定义为const类型

Con.2: By default, make member functions const Con.2:默认情况下,将成员函数定义为const类型   Reason(原因) A member function should be marked const unless it changes the object's observable state. Th...