Версии IE до IE9 не имеют функции if ( allowed.indexOf(ext[1]) == -1) часть.

для Array, чтобы определить

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!');
    }
}

точную версию спецификации .indexOf(), запустите ее, прежде чем пытаться ее использовать: Это версия из MDN , используется в Firefox / SpiderMonkey. В других случаях, таких как IE, он добавит

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;
  };
}

в случае, если он отсутствует … в основном IE8 или ниже на данном этапе. Если вы используете jQuery, вы можете использовать $. InArray () .indexOf() и хотите продолжать использовать indexOf, не беспокоясь о проблемах совместимости, вы можете сделать это:

Это полезно, когда вы хотите продолжать использовать , но предоставлять запасной вариант, когда он недоступен. .

Если вы используете jQuery Для действительно подробного объяснения и обходного пути не только для indexOf, но и для других функций массива, отсутствующих в IE, задайте вопрос StackOverflow

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(val) {
        return jQuery.inArray(val, this);
    };
}

Исправление функций JavaScript Array в Internet Explorer (indexOf, forEach и т. Д.)indexOf Пожалуйста, внимательно с $ .inArray, если вы хотите его использовать. Я только что обнаружил, что $ .inArray работает только с «Array», а не со String. Вот почему эта функция не будет работать в IE8!

— & Gt ; Они не должны произносить это как «Подобный». Так как indexOf поддержки «String» также!

IE & Lt ; = 8 просто не имеет метода

для массивов.

Решение

Проблема

Если вам нужно indexOf() в IE & Lt ; = 8, вам следует рассмотреть возможность использования следующего


, который

Minified:indexOf в IE & lt ; = 8, вам следует рассмотреть возможность использования следующего polyfill , который рекомендуется в MDN {* } проверка проще, чем instanceof, но вам также придется уничтожить оба , тогда нам нужно привязать контекст к внутренней функции.

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(searchElement, fromIndex) {
        var k;
        if (this == null) {
            throw new TypeError('"this" is null or not defined');
        }
        var o = Object(this);
        var len = o.length >>> 0;
        if (len === 0) {
            return -1;
        }
        var n =  fromIndex || 0;
        if (Math.abs(n) === Infinity) {
            n = 0;
        }
        if (n >= len) {
            return -1;
        }
        k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
        while (k < len) {
            if (k in o && o[k] === searchElement) {
                return k;
            }
            k  ;
        }
        return -1;
    };
}

Minified:

Array.prototype.indexOf||(Array.prototype.indexOf=function(r,t){var n;if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),i=e.length>>>0;if(0===i)return-1;var a= t||0;if(Math.abs(a)===1/0&&(a=0),a>=i)return-1;for(n=Math.max(a>=0?a:i-Math.abs(a),0);i>n;){if(n in e&&e[n]===r)return n;n  }return-1});

Вы можете использовать это для замены функции, если она не существует: Как я могу сгруппировать данные с угловым фильтром? — Переполнение стека

<script>
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;
    };
}
</script>