Parece que en mi computadora/navegador web Google Chrome es lento para inyectar meta-máscara. Por lo tanto, tengo que escribir algo como esto para que mi aplicación obtenga la instancia web3 en lugar de fallar:
setTimeout(function(){
if (typeof web3 !== 'undefined'){
console.log('getting web3');
App.web3Provider = web3.currentProvider;
}
else {
console.log('No Web3 instance given!');
// flash modal saying "please download Metamask"
}
web3 = new Web3(App.web3Provider);
return App.initContract(web3);
}, 500);
Sin embargo, esto no funciona bien con la biblioteca Truffle-Contract js, que necesita la instancia web3 de inmediato. ¿Alguien tiene una solución o una solución para esto? Gracias.
La truffle-contract
biblioteca no necesita la instancia web3 de inmediato. Solo necesita que esté allí cuando comience a intentar usarlo.
var contract = require("truffle-contract");
var my_contract_json = require('../../../truffle/build/contracts/MyContract.json');
var MyContract;
var my_contract_deployed;
window.onload = function() {
if (typeof web3 !== 'undefined') {
window.web3 = new Web3(web3.currentProvider);
MyContract = contract(my_contract_json);
MyContract.setProvider(web3.currentProvider);
MyContract.deployed().then(function(instance) {
my_contract_deployed = instance;
// doWhateverUIStuff();
});
}
}
Vea un ejemplo práctico aquí: https://github.com/realitykeys/realitycheck/blob/8674f7b07cef2c4c96762c30befd549138bdb8e4/assets/js/scripts/main.js#L3398
Alex