コンテキスト:ブロックを使用してページ上にidenticonをレンダリングする場合、web3からdefaultAccountが取得されます。このため、ユーザーはmetamaskに選択された状態でログオンする必要があります彼の財布からの住所。metamaskを使用しているときにweb3のデフォルトアカウントを検出するパターンを改善する
問題:Webアプリケーションは、ページのロードイベントでweb3オブジェクトを検出していないようですが、wchihがそれを検出するための推奨される場所です。
コードは:時々web3は、私は、それはないですが、時には唯一のソリューションです、私は断続挙動を有する保つ
https://github.com/MetaMask/metamask-plugin/issues/1158
:以下の勧告からインスピレーションを得ていますタイマーを持っていることを考えることができますが、それは私に少し単純すぎるようです、私はよりエレガントなものを好むでしょう。
質問:ページが読み込まれたときに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"));
}