IE10以降でSilverlightでF5押したらフリーズする不具合と対処
IE10とIE11でSilverlightのWebサイトでSilverlightがフォーカスを持った状態で更新ボタンやF5で更新するとフリーズします。IE8は大丈夫。IE9は環境ないからわからないけど使ってるやつおらんやろ……*1
2014/03/24 追記
テストはIEの開発者ツール(F12)の[ドキュメントモード]で行えます。~9までは再現方法でフリーズしませんが、10~既定の場合はフリーズします。
また、対処をドキュメントモードを判定するように修正しました。
ドキュメントモードが~8の時に動的にホストすると初回ロード時に確実に(テスト数回だけど)フリーズします。9の場合にも稀にフリーズします。
よって、対処のようにドキュメントモードで判別するとよいです。IE以外の時は該当プロパティがないので実行されません。
再現方法
- プロジェクトを作る
- Webでホストするようにします
- わかりやすいようにボタンでもおいとく
- 起動する
- おいたボタンを押す
- F5押す
_人人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y ̄
ブラウザの更新ボタンでもフリーズします。冒頭にフォーカス云々書いた通りに起動したあとにSilverlight上のボタンを押さずに更新した場合はフリーズしません。
対処
Silverlightを動的にホストさせます。
function loadSilverlight() { if (document.documentMode >= 10) { var host = document.getElementById("silverlightControlHost"); host.innerHTML = host.innerHTML; } }
<body onload="loadSilverlight();">
これだけです。id違うとかファイル分離とかは適宜。
参考
- internet explorer - Silverlight app disappears on page refresh in IE10 - Stack Overflow
- Silverlight content doesn't refresh properly in IE10 Microsoft Connect
参考の中で、メタタグで互換表示を切り替える方法は不完全で、onloadでやりなさいと書かれてる。ただ文字列で挿してるのが嫌だなーと思って紹介してみた。viewでホストしていて初期化パラメーター切り替えたりしてたからviewで実装した内容使いたいよねって。"適宜"の範囲から出てないけども。
*1:今春で8も使用者いなくなったらいいね