playground

The world is a playground.

MetaMask のネットワーク変更を検知する

MetaMask の仕様変更

  • MetaMask のネットワークを変更したときに、これまではブラウザを自動的にリロードしていたが、自動的にリロードしないようになるとのことです。
  • したがって、 ポーリングで MetaMask に設定されているネットワークを確認する必要が出てくるようになりました。
  • なお、どのネットワークが選択されているかについては、ローカルに値がキャッシュされているので、ポーリングしても通信は発生しないとのことです。

MetaMask のネットワーク変更を検知するプログラム例

  • この例では web3.js 0.20.6 を使用
var web3js; // ローカルの Web3 オブジェクトを格納するための変数です。
window.onload = function() {
  if (typeof web3 !== 'undefined') {
    // Mist または MetaMask のプロバイダを使用して Web3 を初期化します。
    web3js = new Web3(web3.currentProvider);
    console.log(web3js.version.api);  // => 0.20.3

    // ポーリングし、使用しているネットワークをチェックします。
    setInterval(function () {
      web3js.version.getNetwork(checkNetwork)
    }, 1000);

    function checkNetwork (err, currentNetwork) {
      if (window.lastNetwork != currentNetwork) {
        alert("Ethereum Network has been changed: " + currentNetwork);
        window.lastNetwork = currentNetwork;
      }
    }
  } 
};

サンプル

参考