IE8 で indexOf が配列で動作しないのはなぜですか? 質問する

IE8 で indexOf が配列で動作しないのはなぜですか? 質問する

以下の機能は、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!');
    }
}

ベストアンサー1

IE9より前のバージョンのIEには.indexOf()配列の関数を定義する正確な仕様バージョン使用する前にこれを実行してください:

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 以下です。

おすすめ記事