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?
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á.
reyhaynes
typeof window.web3 !== 'undefined'