2018年2月5日月曜日

最新版Edgeでpopstateに問題発生

最近Edgeがアップデートされ、popstateの動作が変わりました。
他ブラウザとの互換性が無くなりました。

まぁ、バグでしょう。 バグで直る事をお祈りします。

初回アクセス時に実行させないよう

if(!event.originalEvent.state) return;

は、もはやスニペット入りしていると思います。
しかし、このif文がfalseになることはありません。
nullになりません。
オブジェクトが入ってしまうようになりました。

※もちろん、if文が不要な状況下は話は別ですし、そういう議論ではないので書きません。


pushstateして,formのsubmitによるページリロードが行われた時、popstateが発火します。
このとき、originalEvent.stateがnullとならず、submit前にpushstateで登録してあるオブジェクトが入っているのです。

このため、オブジェクトが現在のページの物であるかの判定を追加する必要がでてきました。
URLが同一かの判定が楽だと思います。