Web3js
Metamask 停止注入 Web3。如何正確注入 Web3.js?
我一直在執行一個 Django 應用程序,它允許使用者使用 Metamask 註冊/登錄。在最近的重大變化之前,一切都很好:
2021 年初,MetaMask 將不再注入 web3.js API。您仍然可以帶上自己的 web3.js 或類似的庫並將其與 MetaMask 一起使用。我們將停止為您注入特定版本的 web3.js。
這是我以前做的。
我檢測到 METAMASK 如下 –> 這仍然有效
if (typeof web3 !== 'undefined') { data['web3_status'] = true; if (web3.currentProvider.isMetaMask === true) { console.log('success'); } else { console.log('detection failed)'; } } else { console.log('detection failed'); };
我要求使用者啟用–> 這仍然有效
var accounts = await ethereum.request({ method: 'eth_requestAccounts' });
我要求使用者簽署消息以進行驗證–> 這不起作用
web3.personal.sign(nonce, account, function(error, signature)
Metamask 不再注入 web3.js。所以我嘗試如下注入我自己的。
在我的 html 標頭中
<script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.2.9/web3.min.js"></script>`
在 metamask.js 腳本中
const provider = new Web3.providers.HttpProvider('https://ropsten.infura.io/v3/<MY-API_KEY>'); const web3 = new Web3(provider);
我在嘗試簽名時收到以下錯誤;
metamask.js:51 Uncaught TypeError: Cannot read property 'personal' of undefined
感謝您的時間。
metamask.js 腳本似乎不正確。
沒有足夠的程式碼來測試,但你必須做這樣的事情
const oldProvider = web3.currentProvider; // keep a reference to metamask provider myWeb3 = new Web3(oldProvider); // now you can use myWeb3 instead of web3
如果項目很大,您可能希望將 web3 替換為 myWeb3。
global.web3 = myWeb3