Estoy trabajando en una extensión de Google Chrome que funciona cuando un usuario abre una nueva pestaña. Al abrir una nueva pestaña, mi dapp debería conectarse al proveedor web3 del usuario. Sin embargo, no se detecta web3.
Todo funciona bien si se implementa como una página web simple.
Me encuentro con dicho problema cuando trato de operar mi dapp como una extensión de Chrome, y comienza a ejecutarse al abrir una nueva pestaña.
Aquí está truffle-react
la configuración que no edité para recuperar web3:
let getWeb3 = new Promise(function(resolve, reject) {
// Wait for loading completion to avoid race conditions with web3
injection timing.
window.addEventListener('load', function() {
var results
var web3 = window.web3
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider.
web3 = new Web3(web3.currentProvider)
results = {
web3: web3
}
console.log('Injected web3 detected.');
resolve(results)
} else {
// Fallback to localhost if no web3 injection. We've configured this to
// use the development console's port by default.
var provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545')
web3 = new Web3(provider)
results = {
web3: web3
}
console.log('No web3 instance injected, using Local web3.');
resolve(results)
}
})
})
Este código verifica la verificación, por ejemplo, que ya está disponible en la ventana
var web3 = window.web3
Si lo encuentra, busque Mist/Metamask o cualquier otro proveedor, y devuelva web3 y las salidas de la consola a 'Web3 inyectado detectado'.
// Use Mist/MetaMask's provider.
web3 = new Web3(web3.currentProvider)
results = {
web3: web3
}
console.log('Injected web3 detected.');
de lo contrario, si no se encuentra la instancia web3, este código recurre al proveedor de web3 del nodo localhost, por lo que la salida de la consola es 'No se inyectó ninguna instancia web3, usando Web3 local'.
// Fallback to localhost if no web3 injection. We've configured this to
// use the development console's port by default.
var provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545')
web3 = new Web3(provider)
results = {
web3: web3
}
console.log('No web3 instance injected, using Local web3.');
Como en su caso, no está ejecutando el nodo ethereum local , está arrojando un error.
Pero como lo sugerí, ha reemplazado el enlace localhost con el enlace infura.
Ahora no hay ningún error. ¿Por qué? porque se ha inyectado web3.
Pero aún así la salida de la consola es la misma, es porque el comando de la consola sigue siendo el mismo.
console.log('No web3 instance injected, using Local web3.');
Para verificar si web3 ha sido instanciado e inyectado, simplemente verifique la versión de web3
console.log(web3.version.api) // for web3 0.2x.x
o
console.log(web3.version) // for web3 1.0
kherwa
brownmamba
kherwa
brownmamba
No web3 instance injected, using Local web3.
registro de la consola.kherwa
james_pic
web3
enhttp://
yhttps://
páginas. Si este código se ejecuta en una secuencia de comandos en segundo plano o en una secuencia de comandos de contenido, entonces MetaMask no se inyectaráweb
en lowindow
que puede ver su secuencia de comandos (ya que estas secuencias de comandos se ejecutan en unchrome-extension://
contexto).web3
solo será visible desde los scripts inyectados en la página.