【クライアント】 ブラウザ設定が互換モードの場合にドキュメントモードをIE7に設定し、コールバックを行うとブラウザがフリーズする
対象製品
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');
}
【再現手順】
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);
}
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のように、setTimeoutを使用してコールバックの実行タイミングずらすことで、現象の回避が可能です。
---------------------------------
クライアント側スクリプト
---------------------------------
function selectionChanged(e) {
// 現象確認用
var spread = document.getElementById("FpSpread1");
setTimeout(function () {
spread.UpdatePostbackData();
spread.CallBack('test');
}, 0);
}