※注意事項
IEは、2022/06/16にサポートが終了されるそうです。
https://www.mdn.co.jp/di/newstopics/79744/
なので、こんな記事を見ていないで、「IE対応の廃止」を進言しましょう!!><
お客様にも、PMにも、経営層にも、幹部にも....
それでも聞き入れていただけない場合は、やむを得ないのでこの記事を参考としてください(ง ˘ω˘ )วスヤッスヤッ
対象者
- IE(11)で動作するjavascriptコードを書きたい
⇒ この記事に掲載されているメソッドや記法を避ける - IEのブラウザでのみ動かないjavascriptがあって困っている
⇒ この記事に掲載されているメソッドや記法が使用されていないか一つずつ確認する...>_<。ツライ
ちなみに、IEに対応させる方法は記載していないので、各自調査されたし!!
気を付けたこと
資料をコンパクトにするため、以下の2点に力を入れました
- 各メソッドや記法自体の説明は省略
- IEをbreakさせ得る記述を必要最低限に絞り込んで記載
更新予定
まだまだ他にも動かないものがありそうなので、今後も追記・修正していこうと思っています
2022/01/13追記
大変申し訳ないのですが、フロントエンドの開発に関わる機会が全くなくなったので、私がこの記事を更新する予定は基本的にはなさそうです。
せっかくコメントをいただいている中、心苦しいのですが、今は自分のすべきことに集中したいと考えています。1
IEによる対応状況を調べる方法
ここで調べられるらしい
https://caniuse.com/
本題 - IE11で動作しないモノたち -
SCRIPT438
SCRIPT438
は、「プロパティまたはメソッド」が使用できないパターン
before
// before から append までは、jQuery メソッドではなく、javascriptのメソッドを指しています
// jQueryのメソッドは試してないですが、動くのではないでしょうか?
var $element = document.getElementById('element1');
$element.before('<span>content</span>')
-> SCRIPT438: オブジェクトは 'before' プロパティまたはメソッドをサポートしていません。
after
var $element = document.getElementById('element1');
$element.after('<span>content</span>')
-> SCRIPT438: オブジェクトは 'after' プロパティまたはメソッドをサポートしていません。
replaceWith
var $element = document.getElementById('element1');
$element.replaceWith('<span>content</span>')
-> SCRIPT438: オブジェクトは 'replaceWith' プロパティまたはメソッドをサポートしていません。
prepend
var $element = document.getElementById('element1');
$element.prepend('<span>content</span>')
-> SCRIPT438: オブジェクトは 'prepend' プロパティまたはメソッドをサポートしていません。
append
var $element = document.getElementById('element1');
$element.append('<span>content</span>')
-> SCRIPT438: オブジェクトは 'append' プロパティまたはメソッドをサポートしていません。
trimStart
var greeting = ' Hello world! ';
greeting.trimStart();
-> SCRIPT438: オブジェクトは 'trimStart' プロパティまたはメソッドをサポートしていません。
trimEnd
var greeting = ' Hello world! ';
greeting.trimEnd();
-> SCRIPT438: オブジェクトは 'trimEnd' プロパティまたはメソッドをサポートしていません。
startsWith
'Saturday night plans'.startsWith('Sat');
-> SCRIPT438: オブジェクトは 'startsWith' プロパティまたはメソッドをサポートしていません。
endsWith
'Cats are the best!'.endsWith('best', 17));
-> SCRIPT438: オブジェクトは 'endsWith' プロパティまたはメソッドをサポートしていません。
replaceAll
'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?'.replaceAll('dog', 'monkey');
-> SCRIPT438: オブジェクトは 'replaceAll' プロパティまたはメソッドをサポートしていません。
find
var array1 = [5, 12, 8, 130, 44];
var found = array1.find(function(element) {
return element > 10;
});
-> SCRIPT438: オブジェクトは 'find' プロパティまたはメソッドをサポートしていません。
// https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/find
findIndex
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = function (element){ return element > 13 };
console.log(array1.findIndex(isLargeNumber));
-> SCRIPT438: オブジェクトは 'findIndex' プロパティまたはメソッドをサポートしていません。
codePointAt
'☃★♲'.codePointAt(1);
-> SCRIPT438: オブジェクトは 'codePointAt' プロパティまたはメソッドをサポートしていません。
includes
var some_array = ['Eins', 'Zwei'];
console.log(some_array.includes('Eins'));
-> SCRIPT438: オブジェクトは 'includes' プロパティまたはメソッドをサポートしていません。
querySelectorAll × forEach
<ul>
<li class='foods'>おやさい</li>
<li class='foods'>おさかな</li>
<li class='foods'>おにくう</li>
</ul>
<script>
// not working ... on IE
var foods_list = document.querySelectorAll('.foods');
foods_list.forEach(function(elem, index){
console.log(elem);
});
</script>
-> SCRIPT438: オブジェクトは 'forEach' プロパティまたはメソッドをサポートしていません。
<script>
// it will work !
var foods_list = document.querySelectorAll('.foods');
var nodes = Array.prototype.slice.call(foods_list, 0);
nodes.forEach(function(elem, index){
console.log(elem);
});
</script>
SCRIPT10xx
SCRIPT10xx
は、「構文エラー」など、文法の誤り扱いになるパターン
=>
// arrow1
var some_function = hoge => window.cosole.log(hoge);
some_function('string');
-> SCRIPT1002: 構文エラーです。
// arrow2
var arrow = () => {
return 'アロー関数';
};
-> SCRIPT1002: 構文エラーです。
// old
var some_function = function(hoge) { window.cosole.log(hoge); }
some_function('string');
class
class Hoge {
}
-> SCRIPT1002: 構文エラーです。
...array
var some_array = [1, 2, 3];
var copy_array = [...some_array];
-> SCRIPT1002: 構文エラーです。
オブジェクトの省略
var obj = {
shortFunction () {
return 'オブジェクト内の関数が省略ができます!';
}
};
console.log(obj.shortFunction());
-> SCRIPT1003: ':' がありません。
for-of
items = ['one', 'two', 'three']
for (var item of items) {
console.log(item);
}
-> SCRIPT1004: ';' がありません。
function method_name(x, y = 5) { ; }
function sum(x, y = 5) {
console.log(x + y);
}
sum(3);
-> SCRIPT1006: ')' がありません。
var [a, b] = ['a', 'b'];
var [a, b] = ['a', 'b'];
console.log(a);
console.log(b);
-> SCRIPT1010: 識別子がありません。
var { name: name, height: height, weight: weight } = {
name: 'kirby',
height: '80',
weight: '99999' // 隕石を飲み込んだ後
};
-> SCRIPT1010: 識別子がありません。
`文字列${hoge}`
```javascript:テンプレートリテラル/文字列内での変数展開(文字列${hoge}
)
var name = 'Miki'
console.log(`Hi, ${name} !`);
-> SCRIPT1014: 文字が正しくありません。
- 情報元
- [IE非対応のJavascriptをまとめてみた](https://yukimonkey.com/fix-error/ie/)
- [javascript IEで動かない時の対処法を教えてください。](https://teratail.com/questions/121517)
## SCRIPT5009
`SCRIPT5009`は、おそらく、その名前を認識できていないパターン。
### Promise
```javascript:promise
var promise = new Promise( );
promise.then( );
-> SCRIPT5009: 'Promise' is undefined
-> SCRIPT5009: 'Promise' は定義されていません。
fetch
fetch(' ... ').then( );
-> SCRIPT5009: 'fetch' は定義されていません。
IntersectionObserver
var io = new IntersectionObserver( ... )
io.observe($target)
-> SCRIPT5009: 'IntersectionObserver' は定義されていません。
その他
IEと、それ以外のブラウザで動作が異なるなど、特殊なパターンや、エラーコードが示されないものなどをここに入れました。
Set
var names_set = new Set(['Roman', 'Elysion', 'Moira'])
console.log(names_set.size);
# IE11
-> 0
# Chrome
-> 3
RadioNodeList
<form id="target">
<input name="food" type="radio" value="fish"> お魚
<input name="food" type="radio" value="meat"> お肉
<input name="food" type="radio" value="vegetable"> お野菜
</form>
var $element = document.getElementById("target") ;
var radioNodeList = $element.food ;
console.log(radioNodeList[0]);
// https://lab.syncer.jp/Web/JavaScript/Snippet/30/
-> 特に問題なく動いた
-> IEの中でも動かないバージョンと動くバージョンがあるのかもしれない
javascriptでURL欄に膨大な文字数を入力するとエラー
[IE] URL に使用可能な文字数は最大 2,083 文字
http://support.microsoft.com/kb/208427/ja
内容精査中...(追記予定)
- IEでAjaxのスクリプトが初回処理後に動かない原因!一時ファイルの設定で解決する方法!
- InternetExproler(IE)だけjQueryが使えない
- IEのセキュリティ設定が「高」になっている場合は、「信頼済みサイト」にドメインを登録するとJavascriptも動作するようになる
- Shows date as NAN in IE only
- Apex Date Parse Invalid Date in IE11 - Valid In Chrome
-
IE11 で使える機能と使えない機能
よさげな情報が多そう - [MDN Web Docs: String] (https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String)
IEで動かないのがいっぱい載ってた...
ちょっと信じられない対処法
試してません(`・ω・´)キリッ
-
IEでだけ動かないスクリプトが一発逆転動くかもしれない
本当に? -
Polyfilling Internet Explorer 11
1行足すだけでPromiseが動くようになるらしい。信じられない。
IE6-8の話
昔の話なので略
- JavaScript初級者が調べるInternet Explorer特有の仕様いろいろ
- JavaScriptで.trim()がIEで動作しない
- [Javascript]「こまけぇーこたぁいいんだよ!」な人の為のIE対応スクリプトまとめ
CSS/その他
-
Angularのprecompile失敗の可能性について
https://www.oipapio.com/question-4477848
理解できなかったする気にならなかったモノ
ES6の記法をES5で書き直す!?
ES6で追加された記法はこのページにまとまっていました。
ECMAScript 6 — New Features: Overview & Comparison
また、その一部ではありますが、5で書き直す方法も書かれています。
わかりやすい例としては、アロー関数のとこなんかを見れば、どんなことがまとまっている記事なのか、すぐに理解できるかと思います。
備考
google検索
- 「ie javascript」 7ページ目まで見た
- 「ie11 javascript 動かない 原因」 3ページ目まで見た
ご協力のお願い
他にもありましたら、是非ともこの記事上にコメント下さい.....(´・ω・`)
更新予定は今のところありませんが、多くの方が参照されているので、そのコメントがどなたかのお役に立てるかもしれません。
-
気が向けば、もしかしたら更新する可能性もなくはないですが、今保有しているPCにはもうIEを入れておらず動作確認も行えないため、やはり可能性は低いと思います(´;ω;`) ↩