首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >window.ethereum.providers未定义-允许用户选择MetaMask或Coinbase钱包作为web3提供程序

window.ethereum.providers未定义-允许用户选择MetaMask或Coinbase钱包作为web3提供程序
EN

Stack Overflow用户
提问于 2022-04-22 21:21:15
回答 1查看 1.5K关注 0票数 3

我们如何允许用户在与web3网站交互时选择使用哪个浏览器钱包/提供商?这是为基本的HTML / WordPress网站,不使用TypeScript / React等。

根据Coinbase Docs,不需要Coinbase Wallet SDK:“您可以在dapp中使用此提供程序来请求用户的Ethereum帐户,读取链上数据,并让用户签名消息和事务,而无需使用Coinbase Wallet SDK。”

https://docs.cloud.coinbase.com/wallet-sdk/docs/injected-provider

目前,我的集成使用的是MetaMask,没有问题。但是,当尝试选择Coinbase Wallet (浏览器扩展)作为我的提供者时,似乎没有办法这样做。

如果Coinbase钱包扩展设置了window.ethereum.providers,那么就应该有一个window.ethereum对象。然后,您可以遍历每一个,查找MetaMask或Coinbase,并将首选的一个设置为提供程序:

MetaMask conflicting with Coinbase wallet

但是,MetaMask似乎比它更具有优先级,并且在没有.提供程序对象的情况下设置了。

我试图在页面加载期间和之后加载/查找Coinbase钱包提供程序,但它似乎不存在。同样,我假设MetaMask在Coinbase注入甚至存在之前就被设置为提供程序。

是否有一种方法可以让用户设置使用基本web3 JS的提供者/钱包?

EN

回答 1

Stack Overflow用户

发布于 2022-07-02 17:02:56

https://docs.cloud.coinbase.com/wallet-sdk/docs/injected-provider-guidance

代码语言:javascript
运行
复制
const connectWallet = async () => {
  if (typeof window.ethereum !== "undefined") {
    let provider = window.ethereum;
    // edge case if MM and CBW are both installed
    if (window.ethereum.providers?.length) {
      window.ethereum.providers.forEach(async (p) => {
        if (p.isMetaMask) provider = p;
      });
    }
    await provider.request({
      method: "eth_requestAccounts",
      params: [],
    });
  }
};

我认为如何实现您的代码有一些错误。上面的代码很清楚。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71974763

复制
相关文章

相似问题

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