Web3js
檢測目前提供者 int web3.js 的優雅方法
我想知道使用者正在使用哪個提供商(Metamaks、Mist ……),這樣我就可以提供更好的使用者體驗。 例如,提供有關如何解鎖帳戶的提示
我目前正在這樣做,但遠非優雅。有沒有更正確/可靠的方法來實現相同的目標?
getProviderName=()=> { let providerName = "UNKNOWN" if(window.web3.currentProvider.constructor.name === "MetamaskInpageProvider") providerName = "METAMASK" else if(window.web3.currentProvider.constructor.name === "EthereumProvider") providerName = "MIST" else if(window.web3.currentProvider.constructor.name === "o") providerName = "PARITY" else if(window.web3.currentProvider.host.indexOf("infura")!==-1) providerName = "INFURA" else if(window.web3.currentProvider.host.indexOf("localhost")!==-1) providerName ="LOCALHOST" return providerName }
這是我目前的實現:
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'; },
我自己也在尋找一種更好的方法,至少對於 metamask 我發現你可以做到這一點:
window.web3.currentProvider.isMetaMask