gpt4 book ai didi

javascript - 使用元掩码时检测 web3 默认帐户的更好模式

转载 作者:行者123 更新时间:2023-11-29 17:50:20 25 4
gpt4 key购买 nike

上下文:我想使用 blockies 在页面上呈现一个 identicon,我从 web3 获取 defaultAccount,为此,用户必须使用从他的钱包中选择的地址登录到 metamask。

问题:网络应用程序似乎没有在页面的加载事件中检测到 web3 对象,这是检测它的推荐位置。

以下代码的灵感来自于:

https://github.com/MetaMask/metamask-plugin/issues/1158

https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#partly_sunny-web3---ethereum-browser-environment-check

我一直有间歇性行为,有时有 web3 有时没有,我能想到的唯一解决方案是有一个计时器,但在我看来这有点太简单了,我会喜欢更优雅的东西。

问题:是否有更好的解决方案来在页面加载时从 web3 检测 defaultAccount?

 function startApp() { 
GenerateIdenticon();
}


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

// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {

// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider);
if (web3.currentProvider.isMetaMask === true) {
if (typeof web3.eth.defaultAccount === 'undefined') {
document.body.innerHTML = '<body><h1>Oops! Your browser does not support Ethereum Ðapps.</h1></body>';
}
else {
startApp();
}
}
else {
alert('No web3? Please use google chrome and metamask plugin to enter this Dapp!', null, null);
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}

最佳答案

function _Connect(callback){
if(typeof web3 !== 'undefined') {
web3 = new Web3(window.web3.currentProvider);
web3.version.getNetwork((err, netId) => {
switch (netId) {
case "1":
callback('Switch Network', null);
break
case "2":
console.log('This is the deprecated Morden test network.');
callback('Switch Network', null);
break
case "3":
console.log('Connected to the ropsten test network.');
web3.eth.defaultAccount = web3.eth.accounts[0];
if(!web3.eth.defaultAccount){
console.log('Log into metamask');
_Connect(callback);
}else{
// Success
console.log(`Web3 ETH Account: ${web3.eth.defaultAccount}`);
callback(false, web3.eth.defaultAccount);
}
break
default:
console.log('This is an unknown network.');
callback('Switch Network', null);
}
});
} else {
console.log(`Failed: Web3 instance required, try using MetaMask.`);
callback('Install Metamask', null);
}
}

关于javascript - 使用元掩码时检测 web3 默认帐户的更好模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44436179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com