Web3js

使用帶有 web3 和元遮罩的 vanilla javascript

  • February 22, 2021

我已經多次搜尋瞭如何在沒有 nodejs 的情況下使用帶有 metamask 的 web3,但沒有任何成功。我希望能夠通過 web3 和 vanilla javascript 獲取使用者元遮罩帳戶的實例,而無需通過 nodejs 及其所有依賴項。我在 head 標籤中包含了 web3.mim.js 並且這段程式碼執行良好。

window.addEventListener('load', function () {
   if (typeof web3 !== 'undefined') {
       console.log('Web3 Detected! ' + web3.currentProvider.constructor.name);
       window.web3 = new Web3(web3.currentProvider);
   } else {
       console.log('No Web3 Detected... using HTTP Provider')
       window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
   }
})

然而問題是,當我嘗試使用我獲取預設帳戶時,web3.eth.defaultAccount我得到一個空值返回給我。如何訪問 metamask 上的目前帳戶?我在 apache 伺服器中執行腳本。

預設情況下,Metamask 不再公開帳戶。您需要請求使用者允許您的應用訪問該帳戶。

您可以使用此程式碼(請參閱此處的原始文章:https ://medium.com/metamask/https-medium-com-metamask-break-change-injecting-web3-7722797916a8 )

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!');
   }
});

如果使用者啟用了隱私模式,當您載入應用程序時,它將打開一個元遮罩視窗,要求允許連接。如果您禁用隱私模式,它不會要求任何東西。

希望這有幫助。

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