Metamask
提示使用者登錄錢包
使用者已安裝錢包,但未登錄
下面的函式不會提示使用者登錄他們的錢包,它只是返回一個空數組。
const getAccount = async () => { try { const acc = await window.ethereum.request({ method: 'eth_accounts', }); console.log(acc); } catch (err) { console.log('err'); } };
但如果他們沒有安裝我想使用的鏈條,我會收到提示,為什麼?
const installAndChangeToNet = async (): Promise<void> => { try { await window.ethereum.request({ method: 'wallet_addEthereumChain', params: [ { chainId: chainId, chainName: chainName, nativeCurrency: { name: name, symbol: symbol, decimals: decimals, }, rpcUrls: [rpcUrls], blockExplorerUrls: [blockExplorerUrls], }, ], }); getAccount(); } catch (err: any) { alert('err'); } };
好問題,我認為問題在於您呼叫了錯誤的方法。如果您查看 Metamask 文件,您會發現:
const accounts = await ethereum.request({ method: 'eth_requestAccounts' }); const accounts = accounts[0];
因此,在第一行中,您從連接的錢包中請求賬戶,而在第二行中,您已經選擇了所需的賬戶。
也就是說,呼叫
eth_requestAccounts
可以訪問錢包和地址。現在,在您呼叫的第二個中
wallet_addEthereumChain
。此方法用於將某些特定網路添加到錢包中,您可以在文件中閱讀更多資訊