在我使用连接到 metamask 之前
declare global {
interface Window {
ethereum: import("ethers").providers.ExternalProvider;
}
}
它在 window.ethereum 上运行良好,但它不适用于移动设备,所以我按照说明切换到这个:
import detectEthereumProvider from "@metamask/detect-provider";
export const requestMetamaskAccount = async (): Promise<string | undefined> => {
const provider = await detectEthereumProvider();
if (provider) {
const accounts = await provider
?.request?.({
method: "wallet_requestPermissions",
params: [
{
eth_accounts: {},
},
],
})
.then(() =>
provider?.request?.({
method: "eth_requestAccounts",
})
);
return accounts?.[0];
}
return undefined;
};
现在,它给了我这个错误:属性“请求”在类型“MetaMaskEthereumProvider”上不存在。我认为使用 detectEthereumProvider,provider 应该等于 window.ethereum,其中应该存在请求。
在移动设备上没有
window.ethereum
,它在桌面上工作的原因是因为您已经安装了元掩码扩展,如果没有,也会发生同样的情况。 window.ethereum
由 metamask 注入,要获得等效的效果,您需要在 metamask Dapp 浏览器中运行该应用程序,"detectEthereumProvider from "@metamask/detect-provider"
检查您是从桌面访问还是从 metamask Dapp 浏览器访问.