MetaMask не внедряет window.ethereum: Uncaught (в обещании) TypeError: Невозможно прочитать запрос свойства неопределенного

Для начала позвольте мне упомянуть, что это проект в браузере, поэтому я могу использовать только

<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>

Итак, несколько месяцев назад я сделал децентрализованное приложение, которое отлично работало, даже если я никогда не устанавливал провайдера, поэтому я предположил, что оно использует те, которые предоставляет MetaMask. Однако я использую руководство здесь. Единственная проблема заключается в следующем коде:

var account_global, connected = false;

async function connect() {
    if (!connected) {
        var wei;
        const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' }); // Waits for connection to MetaMask.
        account_global = accounts[0];
        web3.eth.defaultAccount = account_global;
        console.log(account_global.toString() + " connected!");
        connected = true;
        console.log(account_global);
    }
}

connect();

Этот код используется для вывода адреса пользователя метамаски после того, как они одобрили метамаску в моем децентрализованном приложении, однако я получаю сообщение об ошибке

Uncaught (in promise) TypeError: Cannot read property 'request' of undefined

Ошибка просто говорит о том, что моя настоящая цель, если мне нужно добавить провайдеров, и все это - использовать те, что из метамаски, и разрешить подключение к метамаске, остальные функции, такие как передача или другие, я знаю, как с ними обращаться, это просто кажется, что мои проблемы возникают, когда я пытаюсь загрузить страницу.

У меня нет эфирного узла для использования, я также не планирую использовать nodejs, только один html-файл, отображающий адрес метамаски, поэтому я использую web3js в браузере.

Я надеюсь, что это просто я не понимаю чего-то простого, потому что я не могу найти причину, по которой я не могу использовать web3js прямо сейчас.


person Bleiserman ADN    schedule 20.01.2021    source источник


Ответы (2)


Настоящая проблема в том, что вам нужно запустить скрипт на каком-то сервере. В целях тестирования вы можете использовать localhost.

Пожалуйста, обратитесь к этой ссылке о том, как запустить локальный сервер. И просто откройте свой файл через localhost:XXXX, где XXXX - номер порта.

person redCuckoo    schedule 05.03.2021

Разгадал загадку, вроде как показал код ошибки

Uncaught (in promise) TypeError: Cannot read property 'request' of undefined

на самом деле означало, что window.ethereum не определено, поэтому без какой-либо точной причины, по которой MetaMask не будет внедрять ethereum, заметил, что после прочтения документации по Metamask и Web3js моя проблема не имеет ничего общего с их кодом, на самом деле я собираюсь использовать код, показанный на этот ответ.

https://ethereum.stackexchange.com/a/78987

Проблемы выглядят так, что независимо от того, какой браузер Metamask не будет внедрять, поэтому я протестировал его на нескольких веб-сайтах, которым обычно требуется Metamask для подключения, и на других обычных сайтах, таких как google.com, к моему удивлению, на каждом сайте Metamask будет внедрять эфириум, кроме моего собственного. тестовый сайт, так что это означало, что мой сайт был проклят или что-то в этом роде, или просто тот факт, что Metamask не внедряет на нехостинговые веб-сайты (только что тестировал файлы на моем рабочем столе), вместо этого на реальном хосте он вводил, и мои тесты были работает на этих сайтах.

Вывод

Для метамаски требуется обычный хост для внедрения, он не будет внедряться в случайный файл, открытый на вашей собственной рабочей станции.

person Bleiserman ADN    schedule 20.01.2021
comment
Используйте https-localhost https://github.com/daquinoaldo/https-localhost - person Mikko Ohtamaa; 21.01.2021