Метамаска внедряет web3 только после обновления страницы
В моем приложении реакции я проверяю web3, как показано ниже, но мне нужно обновить страницу хотя бы один раз после установки метамаски в chrome.
detectAndReadMetaMaskAccount() {
return new Promise((resolve, reject) => {
if (typeof web3 === 'undefined' || typeof web3.currentProvider === 'undefined' || web3.currentProvider.isMetaMask !== true) {
reject({
code: "error.metamask.missing"
});
}
}
Ниже приведены шаги, которые я делаю:
1. загрузка моей страницы.
2. Установка метамаски на хром.
3. Нажатие на кнопку отправки, которая вызывает вышеуказанную функцию, но web3 не определена.
4. Но после обновления страницы получаем web3.
Итак, мой вопрос: когда и как именно метамаска внедряет web3? Есть ли способ, где метамаска внедрит web3 без обновления страницы?
1 ответ
К сожалению, я не смог найти способ заставить web3 обновиться после установки MetaMask без перезагрузки страницы.
В качестве обходного пути я заставляю перезагрузку страницы при изменении фокуса окна:
window.onfocus = () => {
window.location.reload();
}
Основанием для этого является то, что я открываю страницу для установки расширения MetaMask в новой вкладке, и пользователю необходимо вернуться на мою вкладку, прежде чем продолжить процесс адаптации.