Solidity

需要幫助理解“Metamask 提供的模板程式碼,用於我們如何檢測使用者是否安裝了 Metamask”?

  • April 12, 2022

我正在學習第 6 課。2 Cryptozombies(標題:Web3 Providers),它向我展示了這一點:

“這是 Metamask 提供的一些模板程式碼,用於我們如何檢測使用者是否安裝了 Metamask,如果沒有,告訴他們他們需要安裝它才能使用我們的應用程序:”

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

 // Checking if Web3 has been injected by the browser (Mist/MetaMask)
 if (typeof web3 !== 'undefined') {
   // Use Mist/MetaMask's provider
   web3js = new Web3(web3.currentProvider);

 } else {
   // Handle the case where the user doesn't have web3. Probably
   // show them a message telling them to install Metamask in
   // order to use our app.
 }

 // Now you can start your app & access web3js freely:
 startApp()

})

我不明白語句“if”和“else”之間發生了什麼。

 if (typeof web3 !== 'undefined')

如果我是正確的,我認為上面的這部分檢查對象“web3”是否不是“未定義”。

web3js = new Web3(web3.currentProvider);

上面這個我真的很不確定。

我的理解:

→ 正在使用對象建構子“Web3()”創建一個新對象。

→ 然後將其分配給變數“web3js”。

→ ‘web3’ 是 Metamask 將其 web3 提供程序注入的全域 Javascript 對象(它是 infura 的提供程序/伺服器之一)。

我需要幫助:

→ 我需要解釋一下建構子“Web3()”究竟做了什麼,或者我可以在哪裡找到有關它的更多詳細資訊。我好像找不到!

→ 我不完全理解在建構子中輸入的參數“web3.currentProvider”。我知道它指的是 Metamask 使用的 web3 提供程序,但我只知道這一點,因為它在課程中說過。我在哪裡可以驗證這一點?

Web3()建構子通過完整節點或公共節點提供程序(infura)建立與特定網路(主網,ropsten,…)的連接,或者像這裡一樣通過元遮罩注入到您的全域window對象的提供程序建立連接

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