1. ホーム
  2. ジャバスクリプト

[解決済み】IE8で配列のindexOfが効かないのはなぜ?

2022-03-30 08:34:02

質問

下記の関数はOpera、Firefox、Chromeで問題なく動作します。しかし、IE8では if ( allowed.indexOf(ext[1]) == -1) の部分があります。

なぜかわかる方いらっしゃいますか?何か明らかな間違いがあるのでしょうか?

function CheckMe() {
    var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');
    var fileinput=document.getElementById('f');
    var ext = fileinput.value.toLowerCase().split('.');
    if ( allowed.indexOf(ext[1]) == -1) 
    {
        document.getElementById('uploadsec').innerHTML = document.getElementById('uploadsec').innerHTML;
        alert('This file type is not allowed!');
    }
}

解決方法は?

IE9 以前のバージョンの IE には .indexOf() を定義するためのArray用関数です。 正確な仕様のバージョン を使用する前に、これを実行してください。

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

これはバージョン MDNより Firefox/SpiderMonkeyで使用されています。IE などの他のケースでは、このファイルに .indexOf() がない場合...現時点では基本的にIE8以下です。