(Это дополнительный вопрос отсюда . )
В часто задаваемых вопросах разработчиков Metamask говорится, что «связывается версия web3, которая используется во время разработки».
Итак, я скачал web3.min.js версии 0.20.6 с GitHub и «связал» ее, как показано в коде ниже. Затем я вывожу в консоль "web3.version.api".
Теперь, с комплектацией или без , консоль сообщает о версии 0.20.3 после нажатия кнопки.
Я подозреваю, что это из-за строки
web3 = new Web3(web3.currentProvider);
который устанавливает для web3 введенный код из моего плагина Metamask, в котором я вошел в систему, и запускает этот код, а не мою "встроенную" версию...
Вопрос: Как мне собрать собственную версию web3?
<html>
<body>
<script type="text/javascript" src="scripts/web3.min.js"></script>
<script type="text/javascript">
window.addEventListener("load", function() {
if (typeof web3 === "undefined") {
console.log("No web3 provider found");
} else {
web3 = new Web3(web3.currentProvider);
console.log("Using web wallet");
}
}) </script>
<button id="buttonBalance">Click to report version to console</button>
<script type="text/javascript">
button = document.getElementById("buttonBalance")
button.onclick = function tmp()
{
console.log("Version=" + web3.version.api);
};
</script>
</body>
</html>
PS. Я создал кнопку, чтобы убедиться, что вызов web3 для «web.version.api» выполняется «вне добавления eventListener в окно» в соответствии с предложением @Kai Kälberer
Обновление: по предложению @viz я загрузил неминифицированную версию web3j с GitHub и раскомментировал строку, которая позволяет избежать переопределения глобального экземпляра web3. Посмотрите на этот снимок экрана из моего отладчика инструментов разработки:
Тем не менее я вижу, что консоль выводит версию 0.20.3 , а не 0.20.6 , как определено в загруженном web3.js ... почему?
Это происходит из-за этой строки . В настоящее время код не переопределяет Web3
объект, если глобальный объект Web3
уже существует. Вот почему вы получаете ту же версию Web3 API, которую MetaMask уже внедрил, как бы вы ни пытались.
Это можно решить, используя инструмент упаковки, такой как webpack, и загрузив объект Web3 как модуль, или вручную загрузив файл web3.js и исправьте эту строку, если вы хотите встроить ее в качестве тега скрипта.
Я думаю, что web3.js должен переопределять, даже если глобальный объект существует. Если вы считаете, что текущее поведение является неуместным, вы можете сообщить о проблеме через репозиторий web3.js github.
&& typeof window.Web3 === 'undefined'
эту часть.
а именно
Web3
объект.