Web3js

未擷取的錯誤:缺少提供程序

  • November 1, 2022

我正在建構一個 web3,如果瀏覽器沒有檢測到 Metamask(或 web3 應用程序),我會遇到一個頁面無法載入的問題,否則它會載入並正常工作。

在未安裝 Metamask 的情況下,我查看了瀏覽器的控制台並看到此錯誤:

未擷取的錯誤:缺少提供程序(argument=“provider”,value=undefined,code=INVALID_ARGUMENT,version=providers/5.7.2)

在我的原始碼中,我在全域變數部分中有這些行(就function Main() {在行之前):

const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

所以我假設當沒有安裝 Metamask 時,第一行會導致我似乎無法避免或修復的問題,並且我無法找到將它們放入Main()函式中的方法,因為許多內部函式都使用它們(內部)。

到目前為止,我已經嘗試了很多東西並進行了很多搜尋。知道如何解決這個問題。謝謝

好的,我通過將第一行替換為以下內容來修復它:

const provider = ((window.ethereum != null) ? new ethers.providers.Web3Provider(window.ethereum) : ethers.providers.getDefaultProvider());

Chainstack的開發倡導者在這裡!

您還可以從MetaMask 文件中實現此程式碼,您可以在其中顯示錯誤並提示使用者安裝 MetaMask,以防它未安裝!

import detectEthereumProvider from '@metamask/detect-provider';

// this returns the provider, or null if it wasn't detected
const provider = await detectEthereumProvider();

if (provider) {
 startApp(provider); // Initialize your app
} else {
 console.log('Please install MetaMask!');
}

function startApp(provider) {
 // If the provider returned by detectEthereumProvider is not the same as
 // window.ethereum, something is overwriting it, perhaps another wallet.
 if (provider !== window.ethereum) {
   console.error('Do you have multiple wallets installed?');
 }
 // Access the decentralized web!
}

引用自:https://ethereum.stackexchange.com/questions/138536