Web3js
使用帶有 web3 和元遮罩的 vanilla javascript
我已經多次搜尋瞭如何在沒有 nodejs 的情況下使用帶有 metamask 的 web3,但沒有任何成功。我希望能夠通過 web3 和 vanilla javascript 獲取使用者元遮罩帳戶的實例,而無需通過 nodejs 及其所有依賴項。我在 head 標籤中包含了 web3.mim.js 並且這段程式碼執行良好。
window.addEventListener('load', function () { if (typeof web3 !== 'undefined') { console.log('Web3 Detected! ' + web3.currentProvider.constructor.name); window.web3 = new Web3(web3.currentProvider); } else { console.log('No Web3 Detected... using HTTP Provider') window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); } })
然而問題是,當我嘗試使用我獲取預設帳戶時,
web3.eth.defaultAccount
我得到一個空值返回給我。如何訪問 metamask 上的目前帳戶?我在 apache 伺服器中執行腳本。
預設情況下,Metamask 不再公開帳戶。您需要請求使用者允許您的應用訪問該帳戶。
您可以使用此程式碼(請參閱此處的原始文章:https ://medium.com/metamask/https-medium-com-metamask-break-change-injecting-web3-7722797916a8 )
window.addEventListener('load', async () => { // Modern dapp browsers... if (window.ethereum) { window.web3 = new Web3(ethereum); try { // Request account access if needed await ethereum.enable(); // Acccounts now exposed web3.eth.sendTransaction({/* ... */}); } catch (error) { // User denied account access... } } // Legacy dapp browsers... else if (window.web3) { window.web3 = new Web3(web3.currentProvider); // Acccounts always exposed web3.eth.sendTransaction({/* ... */}); } // Non-dapp browsers... else { console.log('Non-Ethereum browser detected. You should consider trying MetaMask!'); } });
如果使用者啟用了隱私模式,當您載入應用程序時,它將打開一個元遮罩視窗,要求允許連接。如果您禁用隱私模式,它不會要求任何東西。
希望這有幫助。