我的dApp需要连接MetaMask。文档中有两个粗暴的解决方案:要求用户每次手动点击连接按钮或者在页面加载后弹出连接确认窗口。我想实现唯一便捷的解决方案:第一次用户通过点击连接按钮并与MetaMask弹出窗口交互手动连接,然后我的dApp检测到连接仍然建立并使用该连接。我找不到解决方案,但我在其他dApps(例如Capture the ether)中看到了这个方法。
import detectEthereumProvider from '@metamask/detect-provider';
const provider = await detectEthereumProvider();
if (provider) {
connect(provider)
} else {
// kind of "Install the MetaMask please!"
}
function connect(provider) {
// How to check if the connection is here
if (//connection established) {
// Show the user connected account address
} else {
// Connect
provider.request({ method: "eth_requestAccounts" })
.then // some logic
}
}
window.ethereum.request({ method: 'eth_requestAccounts' })
,但对我来说有一个问题:如果Metamask没有连接,它将显示一个弹出窗口,但我希望它能够静默地发生。只有当用户点击“连接”时才显示弹出窗口。 - Данила Алексеевwindow.ethereum.request({ method: 'eth_requestAccounts' })
用作按钮单击处理程序,则用户必须在每次页面重新加载后都点击该按钮。如果我在页面加载时使用此方法,则弹出窗口将出现而无需用户请求(是的,仅在第一次)。期望的行为是:用户第一次点击“连接”按钮并与弹出窗口交互,但然后用户不必再次单击该按钮,因为我知道(如何知道是个问题)连接仍然建立。 - Данила Алексеев