Deep Sky Memories

横浜の空で撮影した星たちの思い出

VirtualSkySlideShow v0.1.1 (IE11対応)

VirtualSkySlideShow (VSSS) ですが、IE11 で動作しないことが判明しました。というか、画面が固まってしまうという…

IE11 で画面が固まるのは大元の VirtualSky も同様で、VirtualSky 同梱の stuquery.js のバグっぽいです。とりあえず処理を一部削って動くようにはしましたが、VirtualSky のフル機能が動くかどうかは不明です。たぶんいらない処理だとは思うのですが…

また、VSSS 本体の方も IE11 がサポートしないメソッドを使ってしまっていたので修正しました。

以上を修正したものを v0.1.1 として公開します。

追記: IE11で固まる理由

直接的には lang ファイル en.json の読み込みが無限に繰り返されるのが原因。

IEXMLHttpRequest は responseType: 'json' に対応しないため、en.json の読み込みの際に応答がJSONパース済みのオブジェクトではなく文字列で帰ってくる。stuquery.js ではそのような場合を想定して、文字列の応答なら応答を JSON.parse() するように実装されているが、応答の前処理の不具合でJSON内の文字列値に括弧が入っているものを読み込むとJSON文字列を破壊してしまう。en.json 内には括弧を含む文字列値があるので、読み込み時にパースに失敗する。

JSONのパースに失敗すると文字列値がそのまま virtualsky.js に渡されるが、loadLanguage() はこれをオブジェクトだと思ってプロパティ loaded を追加してロード済みのフラグに使用しようとするが、相手は文字列なので失敗。続く changeLanguage() には、このフラグが立ってなければ loadLanguage() を呼び出す処理があるため、無限に loadLanguage() が呼び出されてしまう。

問題の「応答の前処理」だが、どうも JSONP 形式の応答から正規表現JSON を抽出しようとしている模様。でもクォーテーションとか考慮していないのでまともに機能しない。ここで JSONP を読めるようにする必要はなさそうなので前処理を丸ごと削除することで対応した。