Web3js
未擷取的錯誤:缺少提供程序
我正在建構一個 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! }