Web3js

無法在 JavaScript 中聲明 web3 對象

  • June 27, 2019

當我嘗試聲明一個 web3 對象時,它總是undefined.

我正在使用 JavaScript 編寫程式碼,並使用 Infura 作為 ETH 主網的提供者。我也嘗試使用本地區塊鏈而不是 Infura,但它也沒有奏效。我是區塊鏈開發的新手,我有點堅持這一點。我知道它一定是我錯過的非常小的東西,也許我忘了安裝一些東西。我也花了很多時間研究我的問題,但我似乎無法讓它發揮作用。

<!DOCTYPE html>

<html lang="en">
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

       <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
       <script type="text/javascript" src="https://raw.githubusercontent.com/ethereum/web3.js/master/dist/web3.min.js"></script>
   </head>
   <script>
       const rpcURL = "https://rinkeby.infura.io/INFURA_PROJECT_ID";
       const address = 'MY_WALLET_ADDRESS';

       const web3 = new Web3(new Web3.providers.HttpProvider(rpcURL));

       web3.eth.getBalance(address, (err, wei) => {
           myBalance = web3.utils.fromWei(wei, 'ether')
           console.log(myBalance)
       })
   </script>
</html>

我可以在這裡看到兩個問題。首先,由於它們的 CORB 策略,您不能直接包含託管在 GitHub 上的原始文件,但是有一個解決方法,只需按照以下步驟操作即可。最後你會得到這個 URL: https ://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js

然後,最好等待文件完全載入,因為該腳本可能會在實際包含 Web3 之前執行。

您可以使用window.onload純 Javascript$(document).ready()和 jQuery。

所以最終的腳本最終是:

<!DOCTYPE html>

<html lang="en">
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <meta name="description" content="">

       <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
       <script type="text/javascript" src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
   </head>
   <script>
       $(document).ready(function() {
           const rpcURL = "https://rinkeby.infura.io/INFURA_PROJECT_ID";
           const address = 'MY_WALLET_ADDRESS';

           const web3 = new Web3(new Web3.providers.HttpProvider(rpcURL));

           web3.eth.getBalance(address, (err, wei) => {
               myBalance = web3.utils.fromWei(wei, 'ether')
               console.log(myBalance)
           })
       });
   </script>
</html>

工作正常。

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