Web3js

如何將 Web3 與 MetaMask 連接?

  • October 25, 2021

沒有教程可以幫助我,我幾乎看過 Youtube 上的所有主要教程,並閱讀了大量來自Google的結果……

我在我的 HTML 文件中導入了 web3.min.js(從 Truffle pet-shop 複製,因為 web3 不再附帶這個!)

然後在它下面的一個腳本標籤上,為了測試,我設法將它與 Metamask 連接起來,我瘦了,用

   window.addEventListener('load', () => {
 if (typeof Web3 !== 'undefined') {
   web3js = new Web3(Web3.currentProvider);
 } else {
   console.log('No web3? You should consider trying MetaMask!');
   web3js = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
 }
});

但仍然Web3.eth是未定義的,所以我無法連接到契約或撥打電話。

誰能幫我完成從前端與契約互動的基本步驟?…

Metamask 界面已更改以啟用隱私和使用者同意,然後才允許訪問 Metamask 中包含的帳戶資訊。這是通過將“乙太坊”對象注入瀏覽器視窗來完成的。您現在必須等待 ethereum.enable() 函式在提示使用者後返回 true。更多詳細資訊:https ://medium.com/metamask/https-medium-com-metamask-break-change-injecting-web3-7722797916a8

window.addEventListener('load', () => {
// Wait for loading completion to avoid race conditions with web3 injection timing.
 if (window.ethereum) {
   const web3 = new Web3(window.ethereum);
   try {
     // Request account access if needed
     await window.ethereum.enable();
     // Acccounts now exposed
     return web3;
   } catch (error) {
     console.error(error);
   }
 }
 // Legacy dapp browsers...
 else if (window.web3) {
   // Use Mist/MetaMask's provider.
   const web3 = window.web3;
   console.log('Injected web3 detected.');
   return web3;
 }
 // Fallback to localhost; use dev console port by default...
 else {
   const provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545');
   const web3 = new Web3(provider);
   console.log('No web3 instance injected, using Local web3.');
   return web3;
 }
});

您正在混合大寫Web3和小寫web3Web3.eth不退出。

嘗試以下操作:

window.addEventListener('load', () => {
   if (typeof web3 !== 'undefined') {
       web3 = new Web3(web3.currentProvider);
   } else {
       console.log('No web3? You should consider trying MetaMask!');
       web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
   }
});

現在你可以寫類似web3.eth

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