【クライアント】 ブラウザ設定が互換モードの場合にドキュメントモードをIE7に設定し、コールバックを行うとブラウザがフリーズする

文書番号 : 37609     文書種別 : 不具合     登録日 : 2014/10/07     最終更新日 : 2015/03/31
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
ドキュメントモードをIE7に設定し、ブラウザ設定を互換モードにしてコールバックを行うとブラウザがフリーズします。

【再現手順】
1.新規 Web フォームに SPREAD を用意します
2.下記の再現コードを貼り付け、Web ページを起動します
3.ブラウザがIE11~IE8の場合は互換モードに設定します
4.SPREADにフォーカスがある状態でアクティブセル以外のセルを左クリックします
--- SPREAD上、ブラウザ上に限らずマウスの左クリックが効かなくなります

※上記の状態でキーボードのボタンを押下したり、マウスの右クリックなどでブラウザのコンテキストメニューを出したりすると制御がもどります。

【再現コード】
---------------------------------
Webフォームクラス
---------------------------------
Public Class WebForm1
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Page.IsPostBack Then Return
    FpSpread1.DocumentMode = FarPoint.Web.Spread.DocumentMode.IE7
  End Sub
End Class

---------------------------------
クライアント側スクリプト
---------------------------------
window.onload = init;
function init() {
  var spread = document.getElementById("FpSpread1");
  if (spread.addEventListener) {
    spread.addEventListener("SelectionChanged", selectionChanged, false);
  } else {
    spread.onSelectionChanged = selectionChanged;
  }
}
function selectionChanged(e) {
  var spread = document.getElementById("FpSpread1");
  spread.UpdatePostbackData();
  spread.CallBack('test');
}
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

以下のように、setTimeoutを使用してコールバックの実行タイミングずらすことで、現象の回避が可能です。

---------------------------------
クライアント側スクリプト
---------------------------------
function selectionChanged(e) {
  // 現象確認用
  var spread = document.getElementById("FpSpread1");
  setTimeout(function () {
    spread.UpdatePostbackData();
    spread.CallBack('test');
  }, 0);
}