The Chrome plugin Metamask inject a global variable web3 in your browser. You can see it in your console browser, you have this message MetaMask - injected web3 and you can see the web3 object by taping web3 in your console. MetaMask is a proxy between the server side and your browser interface. Your program can see this variable only when it's loading with your browser.
Variable Name | Description |
---|---|
window.ethereum | Modern ethereum provider. Specified in EIP-1102 & EIP-1193. |
window.web3 | Legacy ethereum provider. |
There are a list of web3 browsers that can be used to interact with decentralized application (Dapp):
<html> <head> <title></title> <link href="../media/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script> </head> <body> <div class="container-fluid pt-3"> <button id='btn-connect' type='button' class='btn btn-primary'>Connect For More Information</button> <div id='access-info' style='display:none;'> <h5 class="mt-3" id='hashtag3'>Access Information</h5> <table class="table table-bordered"> <tr><td style="width:20%;">Web3 Version</td><td id='access-web3ver'></td></tr> <tr><td style="width:20%;">Account(s)</td><td id='access-account'></td></tr> <tr><td>Provider</td><td id='access-provider'></td></tr> </table> </div> </div> </body> <script> function getCurrentProvider() { if (!window.web3) return 'unknown'; if (window.web3.currentProvider.isMetaMask) return 'metamask'; if (window.web3.currentProvider.isTrust) return 'trust'; if (window.web3.currentProvider.isGoWallet) return 'goWallet'; if (window.web3.currentProvider.isAlphaWallet) return 'alphaWallet'; if (window.web3.currentProvider.isStatus) return 'status'; if (window.web3.currentProvider.isToshi) return 'coinbase'; if (typeof window.__CIPHER__ !== 'undefined') return 'cipher'; if (window.web3.currentProvider.constructor.name === 'EthereumProvider') return 'mist'; if (window.web3.currentProvider.constructor.name === 'Web3FrameProvider') return 'parity'; if (window.web3.currentProvider.host && window.web3.currentProvider.host.indexOf('infura') !== -1) return 'infura'; if (window.web3.currentProvider.host && window.web3.currentProvider.host.indexOf('localhost') !== -1) return 'localhost'; return 'unknown'; } async function showAccounts(acc) { const accounts = await web3.eth.getAccounts(); document.getElementById('access-account').innerHTML = accounts.join(", "); document.getElementById('access-provider').innerHTML = getCurrentProvider(); document.getElementById('access-web3ver').innerHTML = window.web3.version; document.getElementById("access-info").style.display = "block"; } document.getElementById("btn-connect").addEventListener('click', async () => { //Modern web3 browsers if (window.ethereum) { window.web3 = new Web3(window.ethereum); try { await window.ethereum.request({ method: 'eth_requestAccounts' }).then( showAccounts ); } catch (error) { alert(error); } //Legacy web3 browsers }else if (window.web3) { window.web3 = new Web3(web3.currentProvider); // Acccounts always exposed showAccounts(null); } //Non web3 browsers else { if (window.self !== window.top) { //is in iframe //trust wallet has problem with content in iframe, so here is to load the content in new page. if(confirm("Provider not found. This could be a reason which some web3 browsers are not able to run content in iframe. Press 'OK' to try this page out of iframe.")) { window.open("eth_js_access_inject_web3.html", '_blank'); } } else { alert('Your browser is not supported with web3. Please try this in web3 browser or install metamask as browser extension!'); } } }); </script> <script type="text/javascript" src="../media/vendor/iframeresizer/js/iframeResizer.contentWindow.min.js"></script> </html>