JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Internet ExplorerでaddEventListenerが「オブジェクトはこのプロパティまたはメソッドをサポートしていません」エラーになる原因と解決方法

JavaScriptでイベント処理を行う際、Internet Explorer(特にIE8以前の旧バージョン)では addEventListener がサポートされておらず、「オブジェクトはこのプロパティまたはメソッドをサポートしていません(Object doesn't support this property or method)」というエラーが発生することがあります。

これは、addEventListener がIE9以降で標準採用されたメソッドであるためです。この問題を解決するには、以下の2つの方法があります。

方法1:互換モードの設定を追加する

HTMLの <head> 内に X-UA-Compatible メタタグを追加し、IEに最新のレンダリングエンジンを使用するよう指示します。これにより、IEが古い互換モードで動作するのを防げます。

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge;" />
    </head>
    <body>
    ...
    </body>
</html>

方法2:attachEventを使い分ける

IE8以前をサポートする必要がある場合は、旧IE独自の attachEvent メソッドを利用します。機能の有無を判定する条件分岐を組み合わせることで、ブラウザに応じた適切なメソッドを呼び出せます。

if (ev.addEventListener) {
    // 標準準拠ブラウザ(IE9以降を含む)
    ev.addEventListener('click', myText, false);
}
else if (ev.attachEvent) {
    // IE8以前
    ev.attachEvent('onclick', myText);
}

補足ポイント

  • addEventListener ではイベント名に「click」のように on を付けませんが、attachEvent では「onclick」のように on を付ける点に注意してください。
  • 現在ではIE自体がサポート終了しているため、新規開発でIE8以前への対応が必要になることはまれです。ただし、レガシーシステムの保守では依然として役立つ知識です。
  • より汎用的な対応としては、jQueryなどのライブラリを使うと、ブラウザ間の差異を意識せずにイベントを登録できます。
  1. JavaScriptでオブジェクトに特定のプロパティが存在するか確認する方法

    JavaScriptでオブジェクトのプロパティ存在を確認する方法 JavaScriptでは、オブジェクトに特定のプロパティが存在するかどうかを確認したい場面がよくあります。最も基本的な方法は、すべてのオブジェクトが持つhasOwnProperty()メソッドを使用することです。このメソッドは、指定したプロパティがオブジェクト自身に直接定義されている場合にtrueを返し、存在しない場合にはfalseを返します。 hasOwnProperty()メソッドの構文 object.hasOwnProperty(propertyName) propertyName: 存在を確認したいプロパティ名(文字列

  2. JavaScriptでサブオブジェクトや配列を含むオブジェクトをインポートする方法

    はじめに JavaScriptでは、ESモジュール(import / export)の仕組みを利用することで、別ファイルに定義したオブジェクトを簡単に読み込めます。オブジェクトの中にサブオブジェクト(ネストされたオブジェクト)や配列が含まれていても、そのままインポートして扱うことができます。以下に具体的なコード例を示します。 コード例 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta na