Array.indexOf() 関数が IE8 で失敗する
配列内の要素のインデックスをチェックするために使用される、indexOf() 関数、Internet Explorer (IE) 9 より前のバージョンでは問題が発生します。具体的には、IE8 では、この機能は期待どおりに動作せず、開発者は作業を中断します。
根本原因を追跡するには、Opera、Firefox、Chrome などのブラウザで機能する次の関数を考慮してください。
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) {...
関数が次のことを試みるとエラーが発生します。 if (allowed.indexOf(ext[1]) == -1) 条件文を実行します。 IE8 では、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; }; }
この修正により、indexOf が追加されます。 () メソッドを Array プロトタイプに追加します (存在しない場合)。特に、それが存在しない IE8 以下を対象としています。この修正を組み込むことで、CheckMe() 関数が意図したとおりに実行され、IE8 の問題が解決されるようになります。
以上がIE8 で「Array.indexOf()」が失敗する理由とその修正方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。