Обнаружен браузер, отличный от Ethereum. Вам следует подумать о попытке MetaMask

#javascript #ethereum #web3js #metamask

#javascript #ethereum #web3js #metamask

Вопрос:

У меня простой пользовательский интерфейс, в котором мне нужна кнопка подключения к metamask, но когда я использую этот код, я продолжаю получать сообщение «Обнаружен браузер, отличный от Ethereum. Вам следует подумать о попытке MetaMask!» ошибка, даже если я запустил metamsk в своем браузере

Вот код здесь:

  window.addEventListener('load', async () => {
    // Modern dapp browsers...
    if (window.ethereum) {
        window.web3 = new Web3(ethereum);
        try {
            await ethereum.enable();
            var accounts= await web3.eth.getAccounts();
            var option={from: accounts[0] };

        } 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!');
    }
    const ethereumButton = document.querySelector('.enableEthereumButton');
    const showAccount = document.querySelector('.showAccount');

ethereumButton.addEventListener('click', () => {
  getAccount();
});
async function getAccount() {
const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
const account = accounts[0];
showAccount.innerHTML = account;

};
 

и это 2 кнопки для учетной записи и для подключения

 <button class="enableEthereumButton">Enable Ethereum</button>
      <h2>Account: <span class="showAccount"></span></h2>
 

Что мне нужно сделать, чтобы это сработало, я следовал руководству по metamask, но они написаны так плохо, что почти бесполезны

Ответ №1:

Вам не нужно использовать window для доступа к metamask. Вы можете попробовать заменить свой if на что-то вроде этого.

 if (window.ethereum) {
    const web3 = new Web3(ethereum);
    try {
        await ethereum.enable();
        var accounts = await web3.eth.getAccounts();
        console.log(accounts)

    } catch (error) {
        // User denied account access...
    }
}
 

Функция getAccount() не обязательна, так как вы все равно сможете извлечь все из web3.eth. *.

Комментарии:

1. если это не обязательно, почему вы оставляете его там?

2. Я ссылаюсь на асинхронную функцию в нижней части вашего фрагмента кода. getAccount() не getAccounts()

Ответ №2:

Попробуйте запустить этот код на сервере, таком как Apache, nginx.