No se puede detectar MetaMask en el navegador

Soy un poco novato en javascript y necesito ayuda.

Mi objetivo es crear un programa javascript del lado del cliente que use Metamask como proveedor web3 y muestre el resultado de algunas funciones web3 en la pantalla.

Encontré un fragmento de código que debería obtener el proveedor web3 de MetaMask aquí o escribir un mensaje de advertencia en la consola de desarrollo.

Intenté sin éxito que se ejecutara y abrí un archivo en mi navegador que tiene las siguientes líneas de código:

<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>

Esto escribe en la consola 'No web3'. Definitivamente estoy conectado a MetaMask, que muestra mi saldo en la red principal.

Pregunta: ¿Por qué esto no funciona y cómo puedo hacer que funcione?

¿Ha probado el uso de la ventana como ámbito para web3?typeof window.web3 !== 'undefined'

Respuestas (1)

Lo que hace metamask es inyectar javascript en el documento cuando accede a él. El navegador ejecutará este javascript, y es esa ejecución la que definirá la variable web3.

Pero cuando accede a un documento accediendo al archivo (su url comenzará con file://), metamask no inyectará el javascript, por lo que la variable web3 no estará definida.

Intente acceder a su archivo a través de un servidor web de algún tipo y funcionará.

Sí, no es cómodo para desarrollar scripts y páginas locales.