How to check from client-side JavaScript whether MetaMask is installed?
Not Metamask specifically, but the below checks if Web3 is being injected.
window.addEventListener('load', function() {
// Check if Web3 has been injected by the browser (Mist/MetaMask).
if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider.
web3js = new Web3(web3.currentProvider);
} else {
// Handle the case where the user doesn't have web3. Probably
// show them a message telling them to install Metamask in
// order to use the app.
}
});
The recommended way to check for web3
presence with specific check for Metamask:
window.addEventListener('load', function() {
if (typeof web3 !== 'undefined') {
console.log('web3 is enabled')
if (web3.currentProvider.isMetaMask === true) {
console.log('MetaMask is active')
} else {
console.log('MetaMask is not available')
}
} else {
console.log('web3 is not found')
}
})
I found this answer on the Metamask github page https://metamask.github.io/metamask-docs/Advanced_Concepts/Provider_API#ethereum.on(eventname%2C-callback)
if (typeof window.ethereum !== 'undefined'
|| (typeof window.web3 !== 'undefined')) {
// Web3 browser user detected. You can now use the provider.
const provider = window['ethereum'] || window.web3.currentProvider
}
Then you call window.ethereum.enable()
to request user permission