当用户打开一个新的选项卡时,我正在开发一个google扩展。打开一个新的选项卡后,我的dapp应该连接到用户的web3提供程序。然而,没有检测到web3。
如果将其部署为一个简单的网页,一切都可以正常工作。
当我尝试将我的dapp作为一个chrome扩展操作时,我只是遇到了上述问题,当打开一个新的选项卡时,它开始运行。
这里是truffle-react
的S设置,我没有编辑它来检索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)
}
})
})
发布于 2018-04-02 05:21:17
例如,此代码检查窗口中已经可用的检查。
var web3 = window.web3
如果找到,请检查Mist/Metamask或任何其他提供程序,并返回web3,并将控制台输出返回“注入web3检测”。
// Use Mist/MetaMask's provider.
web3 = new Web3(web3.currentProvider)
results = {
web3: web3
}
console.log('Injected web3 detected.');
否则,如果找不到web3实例,则此代码回退到本地主机节点web3提供程序,因此控制台将输出到“没有注入web3实例,使用本地web3”。
// 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.');
在您的情况下,您不是在运行本地ethereum节点,而是抛出错误。
但是,正如我所建议的,您已经将localhost链接替换为infura链接。
但是控制台输出是一样的,因为控制台命令仍然是一样的。
console.log('No web3 instance injected, using Local web3.');
要检查web3是否已被实例化和注入,只需检查web3版本
console.log(web3.version.api) // for web3 0.2x.x
或
console.log(web3.version) // for web3 1.0
https://ethereum.stackexchange.com/questions/44416
复制相似问题