首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Web3未被检测- google扩展

Web3未被检测- google扩展
EN

Ethereum用户
提问于 2018-04-01 01:55:47
回答 1查看 6.4K关注 0票数 2

当用户打开一个新的选项卡时,我正在开发一个google扩展。打开一个新的选项卡后,我的dapp应该连接到用户的web3提供程序。然而,没有检测到web3。

如果将其部署为一个简单的网页,一切都可以正常工作。

当我尝试将我的dapp作为一个chrome扩展操作时,我只是遇到了上述问题,当打开一个新的选项卡时,它开始运行。

这里是truffle-react的S设置,我没有编辑它来检索web3:

代码语言:javascript
运行
复制
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)
}
})
})
EN

回答 1

Ethereum用户

发布于 2018-04-02 05:21:17

例如,此代码检查窗口中已经可用的检查。

代码语言:javascript
运行
复制
var web3 = window.web3

如果找到,请检查Mist/Metamask或任何其他提供程序,并返回web3,并将控制台输出返回“注入web3检测”。

代码语言:javascript
运行
复制
// Use Mist/MetaMask's provider.
  web3 = new Web3(web3.currentProvider)

  results = {
    web3: web3
  }

  console.log('Injected web3 detected.');

否则,如果找不到web3实例,则此代码回退到本地主机节点web3提供程序,因此控制台将输出到“没有注入web3实例,使用本地web3”。

代码语言:javascript
运行
复制
// 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链接。

现在没有error.Why了吗?因为web3已经被注射了.

但是控制台输出是一样的,因为控制台命令仍然是一样的。

代码语言:javascript
运行
复制
 console.log('No web3 instance injected, using Local web3.');

要检查web3是否已被实例化和注入,只需检查web3版本

代码语言:javascript
运行
复制
console.log(web3.version.api) // for web3 0.2x.x

代码语言:javascript
运行
复制
console.log(web3.version) // for web3 1.0
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/44416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档