Dapp-Development
當 Metamask 被使用者解鎖或鎖定時如何自動重新載入 dapp
如何根據 Metamask 帳戶狀態自動重新載入 dapp?
我希望設計一種基於元遮罩的身份驗證(如 Crypokitties 中使用的身份驗證),我可以為此設計程式碼來辨識元遮罩是否被鎖定。但挑戰是我必須手動刷新我的網頁以擷取元遮罩的最新狀態,如果它被鎖定或解鎖。
假設,如果使用者退出元遮罩,我想擷取該實例並同時關閉 dapp,而不需要使用者採取任何進一步的行動(在我的情況下,這只發生在我手動刷新頁面之後)。
如果有人創建了類似的功能並可以使用邏輯或程式碼片段進行指導,將不勝感激。
當 Metamask 在對像中注入 Web3 實例時,
window
您可以檢查對像是否存在。為了檢測元遮罩是否已解鎖,您可以檢查 Web3 實例是否有可用的地址。要在 JavaScript 中自動刷新數據,您可以
setInterval(MyCheckingMethod,1000);
在主應用程序實例中使用。下面是一個簡單的範例,但您會發現大部分來自官方頁面。請注意,這只是一個大部分空但有註釋的範例,您必須適應自己的案例和數據流:
export detectWeb3 = () => { if(typeof window.web3 !== "undefined" ){ // load metamask's provider const w3 = window.web3; // Calling method to retrieve accounts. Method available since Web3 v1.x.x-beta w3.eth.getAccounts().then( r => { if (r.length > 0) { // some addresses found. } else { // No address found } }).catch(e => { // Error catched if method doesn't exist const accounts = w3.eth.accounts; // We'll try to get accounts from previous versions ( up to Web3 v0.20.x) if (accounts.length > 0) { // some addresses found } else { // No address found } }); }else{ // Instructions to execute if no Web3 instance has been detected. } } setInterval(detectWeb3,1000);
另一個免責聲明:我從我的一堆打字稿文件中提取了部分程式碼。您可能需要考慮到這一點。