Metamask

Metamask web3.eth.account000未定義

  • January 17, 2022

我在使用 metamask 時遇到了一些問題。我已經從 metamask 文件中複製了下面的程式碼來載入 web3,但是web3.eth.accounts[0] returns undefined當我嘗試獲取帳戶的地址時,即使 metamask 連接到 ropsten,我總是會得到。相同的程式碼完美地適用於 Mist。

window.addEventListener('load', function() {

if (typeof web3 !== 'undefined') {
// 使用 Mist/MetaMask 的提供者
window.web3 = new Web3(web3.currentProvider);
console.log("使用的元遮罩");
} 別的 {
console.log('沒有 web3?你應該考慮試試 MetaMask!')
// 回退 - 使用您的回退策略(本地節點/託管節點 + in-dapp id mgmt / 失敗)
window.web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/token"));
}

console.log('test1'+web3.eth.accounts[0]);

});
console.log('test'+web3.eth.accounts[0]);

我得到第一個日誌的輸出。

Metamask 不允許您使用同步函式。改用:

web3.eth.getAccounts(函式(錯誤,帳戶){
...
});

並刪除您的第二個日誌。您只想在正確初始化後執行操作。

您還可以使用 await 進行同步。

const getAccount = async () => {
 ...
 const accounts = await web3.eth.getAccounts();
 const account = accounts[0];
 return account;
}

引用自:https://ethereum.stackexchange.com/questions/16962