Posted at

CoffeeScriptでIE8に対応するときにやったこと

More than 5 years have passed since last update.

直接CoffeeScriptと関係ないのも含む。


Array.prototype.indexOfをサポートしていない

Array.prototype.indexOf の追加

Array::indexOf or= (item) ->

for x, i in this
return i if x is item
return -1


mouseoutのイベントが発火しない

hoverは動くが、mouseoutが効かない。

$(document)

.on 'hover', '.foobar', -> doSomething()
.on 'mouseout', '.foobar', -> doSomething2()

どうしたら対応できるか調べた限り分からなかったので、あまり重要じゃないUIインタラクションだったので、IE8のときは hover の処理をしないようにした。

$(document)

.on 'hover', '.foobar', ->
return if $.browser.msie and $.browser.version is '8.0'
doSomething()
.on 'mouseout', '.foobar', -> doSomething2()

jQuery.onで対応する方法があれば教えて欲しい。


titleタグのテキストが変更できない

$('title').text('new title')

jQueryのtext関数を使った上記のコードでは動かない。なので、下記のバニラなJavaScriptで書く。

document.title = 'new title'


開発者ツールを開くまで console.log は使えない

という事実を心得ておく。

「なぜかJSが開発ツールを開かないと途中までしか動かない」という現象が発生した。どうやらIE8は「開発ツール」を開くまで console.log が使えないようで、そのためコードに console.log が入っていると、その行で処理が止まってしまう様子。

ちなみに、開発ツールを一度でも開いてしまえば、閉じたとしても console.log で引っかかることがないみたいだ。つまり、開発ツールを閉じても console.log は削除されない様子。

参考: IEでwindow.console.log()を使う時は要注意 | ReBuy開発者ブログ