モーダルなどjQueryでiframeを開いた場合に、jQuery 1.10.1とIE11の組み合わせだとエラーが発生する。ので、モーダル使っているなら、1.10.2にアップデートしないといけない。これはバンドルされてるSizzleに下記のような処理があるため。
1 | setDocument = Sizzle.setDocument = function( node ) { |
parentWindowで値がとれて、かつframeElement(iframeとか)があると、attachEventが実行される。IE11にはattachEventは存在しないので、エラーとなるみたいな感じ。parentWindowはquirksmodeによるとIE(と古いOpera)でのみ使われているプロパティ。
この処理が、1.10.2だと下記のようになる。
1 | setDocument = Sizzle.setDocument = function( node ) { |
parentにattachEventメソッドがある場合のみに実行されるので、IE11では処理されなくなる。parentの取得がparentWindowからdefaultViewになっているのは(defaultViewはIE9以降しか使えない)、そもそもこの対応は#13936 (SCRIPT70 Permission denied in selectors after iframe was submitted in IE9-10, jQuery 1.9.1 and 2.0.0)のissueに対するものなので、IE8以前は不要だからみたい。
ということで、1.10.2であればIE11でもエラーが発生しない。
けれども、どうも#13936の問題はIE11でも発生するようで、#14535 (Selection fails in IE11 when the last context is a no-longer-present iframe document)で追加修正が1.11で入りそうな様子(child iframeでreloadをさせなければ発生しない問題みたい)。
というメモ。