MetaMASK不注入窗口。以太:未捕获(承诺中)类型错误:无法读取未定义的属性'请求'

2022-04-01 00:00:00 ethereum browser javascript web3js metamask

首先,让我指出这是一个浏览器内项目,因此我只能使用

<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
因此,几个月前,我制作了一个DAPP,尽管我从未设置过提供者,但它工作得很好,所以我猜它使用了MetaMask提供的那些。 但是,我使用的指南here唯一的问题是以下代码

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var account_global, connected = false;

async function connect() {
    if (!connected) {
        var wei;
        const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' }); // Waits for connection to MetaMask.
        account_global = accounts[0];
        web3.eth.defaultAccount = account_global;
        console.log(account_global.toString() + " connected!");
        connected = true;
        console.log(account_global);
    }
}

connect();

此代码用于在元掩码用户批准我的DAPP上的元掩码后输出元掩码用户的地址,但我收到错误

Uncaught (in promise) TypeError: Cannot read property 'request' of undefined

错误只是说,如果我必须添加提供程序,并且所有的目标都是使用来自元掩码的提供程序,并允许连接到元掩码,其余的函数,如Transfer或其他我知道如何处理它们的函数,我的问题似乎只是在我尝试加载页面时出现。

我没有可以使用的以太网节点,也不打算使用NodeJS,只有一个html文件显示MetamASK地址,因此使用浏览器中的Web3js。

我希望只是我没有意识到一些简单的事情,因为我似乎找不到我现在不能使用web3js的原因。


解决方案

解开谜团,看起来就像显示的错误代码

Uncaught (in promise) TypeError: Cannot read property 'request' of undefined

真正的意思是window.ethereum没有定义,所以没有确切的原因MetaMask不会注入以太,注意到在阅读了Metamask和Web3js文档后,我的问题与他们的代码无关,实际上我最终将使用此答案中所示的代码。

https://ethereum.stackexchange.com/a/78987

这个问题看起来不管浏览器MetamASK都不会注入,所以我在多个通常需要MetamASK连接的网站和其他正常的网站(如google.com)上进行了测试,令我惊讶的是,除了我自己的测试网站外,每个网站都会有MetamAsk注入Etherum,所以这意味着我的网站被诅咒了什么的,或者只是因为Metamask不会注入到非托管网站上(只是在我的Destop上测试文件),而是在它确实注入的实际主机上进行了测试,我的测试在这些网站上运行。

结论

MetamASK需要普通主机才能注入,它不会注入您自己的工作站上打开的随机文件。

相关文章