一个区块链的学习者 2025-01-12 15:31 采纳率: 100%
浏览 7
已结题

metamask钱包的时候这样写会报错:(关键词-window)

为什么我在写连接,metamask钱包的时候这样写会报错:

    if (typeof window.ethereum !== 'undefined') {
        // 请求用户授权连接
        const web3 = new Web3(window.ethereum);
        window.ethereum.request({ method: 'eth_requestAccounts' });
    } else {
        console.error('MetaMask not installed');
    }

这是我的报错:

inpage.js:1 
 MetaMask no longer injects web3. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3
get    @    inpage.js:1
Uncaught TypeError: Cannot read properties of undefined (reading 'Contract')
 at index.html:122:35
  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-12 15:32
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    这个报错的原因是因为 MetaMask 不再注入 web3 对象,如果你想连接 MetaMask 钱包,需要通过新的 provider API(例如 ethereum.enable())来实现。你可以修改你的代码如下:
    <span>if (<span>typeof <span>window.<span>ethereum !== <span>&#39;undefined&#39;) {        
        <span>// 请求用户授权连接        
        <span>window.<span>ethereum.<span>request({ <span>method: <span>&#39;eth_requestAccounts&#39; });        
        <span>const web3 = <span>new <span>Web3(<span>window.<span>ethereum);    
    } <span>else {        
        <span>console.<span>error(<span>&#39;MetaMask not installed&#39;);    
    }
    

    同时,根据新的 API 要求,你可以使用以下代码来获取用户的连接:

    window.ethereum.request({ method: 'eth_requestAccounts' })
      .then((accounts) => {
        // 用户授权连接成功,进行后续操作
      })
      .catch((error) => {
        // 用户拒绝了连接请求或发生了错误
        console.error(error);
      });
    

    这样修改后,你的代码应该可以正常连接 MetaMask 钱包并获取用户授权了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月12日