IE9のDOMイベントについて調べてみた
タイトルはかなり釣りです(ぇ
IEが忌み嫌われる原因の1つにIE独自仕様があります。
DOMイベントはその中の1つです。
W3Cで標準のDOMイベントについて規定されていますが、
IEでは別の命名で実装されているので、
IEのときだけ別のイベントを呼びだす必要があります。
(例えばイベントを起動するcreateEventはIEではcreateEventObjectになっている。)
例えばこんな感じです。
if (/*@cc_on!@*/false) { // IEかどうか判定 var event = document.createEventObject(); ・・・・ }else{ var event = document.createEvent("HTMLEvents"); ・・・ }
それがIE9からDOM level3に準拠するようになったので、
createEventが使えるようになり、createEventObjectが非推奨になりました。
Legacy DOM events are no longer supported (Windows) | Microsoft Docs
そのため、IE9の場合はcreateEventObjectではなく、createEventを実行しなければなりません。
ただし、上のようにIEで判定していると、createEventObjectのほうにいってしまうので、
IE9かどうかで更に判定を加える必要があります。
IE9かどうかの判定は次のブログを参考にしました。
JavaScript とかによるブラウザ判定方法のまとめ - A Memorandum
var appversion = window.navigator.appVersion.toLowerCase(); if ((/*@cc_on!@*/false) && appVersion.indexOf("msie 9.") == -1) { // IE8以前かどうかチェック var event = document.createEventObject(); ・・・・ }else{ var event = document.createEvent("HTMLEvents"); ・・・ }
また、ブラウザのバージョンを見なくても、
createEventが実行可能かどうかで判定したほうがスマートです。
if (document.createEvent) { // I以前かどうかチェック var event = document.createEvent("HTMLEvents"); ・・・ }else{ var event = document.createEventObject(); ・・・・ }
個人的に使っているライブラリがIE9だとエラーが発生したので、
その原因を色々と調べてみたところ、
上の原因でエラーが出ていたのでちょっとまとめてみました。