(Esta es una pregunta de seguimiento de aquí ).
En las preguntas frecuentes de los desarrolladores de Metamask se indica "agrupar la versión de web3 que se usa durante el desarrollo".
Así que descargué un web3.min.js versión 0.20.6 de GitHub y lo "empaquetado" como en el código a continuación. Luego registro "web3.version.api" en la consola.
Ahora, con o sin el paquete, la consola informa una versión 0.20.3 después de hacer clic en el botón.
Sospecho que esto se debe a la línea.
web3 = new Web3(web3.currentProvider);
que establece web3 en el código inyectado de mi complemento Metamask, en el que estoy conectado, y ejecuta ese código, no mi versión "empaquetada"...
Pregunta: ¿Cómo agrego mi propia versión de web3?
<html>
<body>
<script type="text/javascript" src="scripts/web3.min.js"></script>
<script type="text/javascript">
window.addEventListener("load", function() {
if (typeof web3 === "undefined") {
console.log("No web3 provider found");
} else {
web3 = new Web3(web3.currentProvider);
console.log("Using web wallet");
}
}) </script>
<button id="buttonBalance">Click to report version to console</button>
<script type="text/javascript">
button = document.getElementById("buttonBalance")
button.onclick = function tmp()
{
console.log("Version=" + web3.version.api);
};
</script>
</body>
</html>
PD. Creé el botón para asegurarme de que la llamada web3 a "web.version.api" se realice "fuera de agregar eventListener a la ventana" según la sugerencia de @Kai Kälberer
Actualización: según lo sugerido por @viz, descargué la versión web3j no minimizada de GitHub y eliminé la línea que evita anular la instancia web3 global. Mira esta captura de pantalla de mi depurador de herramientas de desarrollo:
Todavía veo que la consola imprime la versión 0.20.3 y no 0.20.6 como se define en el web3.js descargado ... ¿por qué?
Esto está sucediendo debido a esta línea . Actualmente, el código no anula el Web3
objeto si el global Web3
ya existe. Es por eso que está obteniendo la misma versión de Web3 API que MetaMask ya inyectó sin importar cómo lo intente.
Esto se puede resolver utilizando una herramienta de empaquetado como webpack y cargando el objeto Web3 como un módulo, o descargando manualmente el archivo web3.js y corrigiendo esa línea si desea incrustarlo como una etiqueta de secuencia de comandos.
Sin embargo , creo que web3.js debería anularse incluso si el objeto global existe. Si cree que el comportamiento actual es inapropiado, puede presentar un problema en el repositorio web3.js github.
&& typeof window.Web3 === 'undefined'
esta parte.
verbigracia
Web3
el objeto global.