You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.web3弃用报错排查:Web3.js集成后功能失效问题

解决web3 shim废弃报错及按钮失效问题

报错提示You are accessing the window.web3 shim. This object is deprecated, please use window.ethereum instead的核心原因是代码依赖了已废弃的web3.currentProvider对象,同时代码中存在几处拼写错误,直接导致按钮功能失效。以下是修正后的完整代码及错误说明:

修正后的代码

<script>
// 移除废弃的授权方法,改用标准请求授权逻辑
const provider = new ethers.providers.Web3Provider(window.ethereum, "goerli");
const MoodContractAddress = "0x65B1174cDBb463e0F9132c09aaEDc63b02986D7D";
const MoodContractABI = [
  {
      "inputs": [
          {
              "internalType": "string",
              "name": "_mood",
              "type": "string"
          } 
      ],
      "name": "setMood",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
  },
  {
      "inputs": [],
      "name": "getMood",
      "outputs": [
          {
              "internalType": "string",
              "name": "",
              "type": "string"
          }
      ],
      "stateMutability": "view",
      "type": "function"
  }
]

let MoodContract;
let signer;
provider.send("eth_requestAccounts", []).then(() => {
  provider.listAccounts().then(function(accounts) {
    signer = provider.getSigner(accounts[0]);
    MoodContract = new ethers.Contract(MoodContractAddress, MoodContractABI, signer);
  });
});

async function getMood(){
    var getMoodPromise = MoodContract.getMood();
    var Mood = await getMoodPromise;
    console.log(Mood);
}

async function setMood(){
    var mood= document.getElementById("mood").value;
    var setMoodPromise = MoodContract.setMood(mood);
    await setMoodPromise;
} 
</script>

关键错误修正点

  • 废弃API替换:将new ethers.providers.Web3Provider(web3.currentprovider, "goerli")改为new ethers.providers.Web3Provider(window.ethereum, "goerli"),直接使用官方推荐的window.ethereum作为提供者,彻底消除废弃提示。
  • 拼写错误修正:
    • provider.listAccount() → provider.listAccounts()(方法名缺少复数后缀s)
    • provider.getsigner() → provider.getSigner()(方法名首字母需大写)
  • DOM操作修复:getElementById("mood") → document.getElementById("mood"),必须通过document对象调用DOM选择器方法。
  • 冗余代码移除:删除window.ethereum.enable(),该方法已被废弃,provider.send("eth_requestAccounts", [])已完成钱包授权请求。

内容的提问来源于stack exchange,提问作者Coding_templar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:25:33