Kann MetaMask im Browser nicht erkennen

Ich bin ein bisschen ein Noob in Javascript und ich brauche etwas Hilfe.

Mein Ziel ist es, ein clientseitiges Javascript-Programm zu erstellen, das Metamask als Web3-Provider verwendet und die Ausgabe einiger Web3-Funktionen auf dem Bildschirm anzeigt.

Ich habe ein Code-Snippet gefunden, das den web3-Anbieter von MetaMask hier abrufen oder eine Warnmeldung an die Entwicklungskonsole schreiben sollte.

Ich habe erfolglos versucht, es zum Laufen zu bringen, indem ich eine Datei in meinem Browser geöffnet habe, die die folgenden Codezeilen enthält:

<html>
  <body>
    <script type="text/javascript">
      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);
      console.log('Got a web3 provider');
      } else {
      console.log('No web3')
      }

      })
      </script>
  </body>
</html>

Dieser schreibt auf die Konsole 'No web3'. Ich bin definitiv bei MetaMask angemeldet, die mein Guthaben im Hauptnetz anzeigt.

Frage: Warum funktioniert das nicht und wie bekomme ich es zum Laufen?

Haben Sie die Verwendung von Windows als Bereich für web3 getestet?typeof window.web3 !== 'undefined'

Antworten (1)

Was Metamask tut, ist Javascript in das Dokument einzufügen, wenn Sie darauf zugreifen. Der Browser führt dieses Javascript aus, und diese Ausführung definiert die Variable web3.

Aber wenn Sie auf ein Dokument zugreifen, indem Sie auf die Datei zugreifen (Ihre URL beginnt mit file://), fügt Metamask das Javascript nicht ein, sodass die Variable web3 undefiniert ist.

Versuchen Sie, über eine Art Webserver auf Ihre Datei zuzugreifen, und es wird funktionieren.

Ja, es ist nicht bequem, lokale Skripte und Seiten zu entwickeln.