在web3js中找不到window.solana



我想通过web3js库将Solana钱包(phantom或任何其他钱包(连接到web应用程序。我读过大多数钱包的文档,它似乎和await window.solana.request({ method: "connect" });一样简单,但在我的情况下,window.solana是未定义的。

当我执行console.log(window)时,我可以看到Solana值及其所有相应的键和值。

我该怎么做?

您的网站是否启用了https?如果没有,那么就不会工作

我找到了一个可以工作的代码来解决我的问题。我不确定是什么问题,因为我对js不是很有经验,但下面的代码让我可以连接到phantom。我在StackOverflow上的一个类似线程中发现了这一点,尽管我相信最初的答案缺少一些括号。索拉纳:添加Sollets/幻影钱包连接到我的网站-步骤?

const getProvider = async () => {
if ("solana" in window) {
await window.solana.connect(); // opens wallet to connect to
const provider = window.solana;
if (provider.isPhantom) {
console.log("Is Phantom installed?  ", provider.isPhantom);
return provider;
}
} else {
document.write('Install https://www.phantom.app/');
}
};
window.onload = () => {
getProvider().then(provider => {
console.log('key', provider.publicKey.toString())
})
.catch(function(error){
console.log(error)
});
}

使用当前的实现,每次刷新应用程序时,都会弹出连接到钱包的窗口。而是添加{onlyIfTrusted:true}选项进行连接。

const getProvider=async((=>{if(窗口中的"solana"({wait window.solana.connect({onlyIfTrusted:true}(;//打开钱包连接

const provider = window.solana;
if (provider.isPhantom) {
console.log("Is Phantom installed?  ", provider.isPhantom);
return provider;
}
} else {
document.write('Install https://www.phantom.app/');
}
};

然后,当用户点击按钮时,编写一个连接函数来处理连接,而不是在重新加载应用程序时弹出

const connectToWallet=async ()=>{
const {solana}=window
if(solana){
const response=await solana.connect()
console.log('address',response.publicKey.toString())

}
}

<button onClick={connectToWallet}  >
Connect to Wallet
</button>

现在,一旦用户连接,当你重新加载应用程序时,它不会弹出连接到钱包

最新更新