クライアントスクリプトによるマウスホイール操作抑制が無効になる

文書番号 : 39405     文書種別 : 不具合     登録日 : 2016/04/25     最終更新日 : 2016/09/09
文書を印刷する
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
preventDefaultを使用してマウスホイール操作を抑制しても、SPREAD上では同動作による拡大・縮小が可能になる現象が発生します。

【再現手順】
1.新規WebフォームにSPREADを配置する
2.Webフォームに下記の再現コードを貼り付け、プロジェクトを起動する
3.Ctrl + ホイールスクロール操作で起動したページの拡大を行う
--- 拡大操作を禁止しているにも関わらず、SPREAD上にマウスカーソルがある場合のみ拡大・縮小が行われる

【再現コード】
------------------------------------
クライアント側スクリプト
------------------------------------
<script type="text/javascript">

  function isCancelWheelMouse() {
    var event = window.event;
    if (event.shiftKey || event.ctrlKey) {
      if (event.preventDefault) {
        event.preventDefault();
      }
    }
  }

  window.onload = function () {
    window.addEventListener('mousewheel', isCancelWheelMouse, false);
    document.addEventListener('mousewheel', isCancelWheelMouse, false);

  }
</script>
回避方法
Service Pack 3(v8.0.4004.2010)で修正済み。
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

addEventListernerのuseCaptureをTrueに設定し、イベント伝搬の順序を変更することで、本現象の回避が可能です。

------------------------------------
クライアント側スクリプト
------------------------------------
window.onload = function () {
  window.addEventListener('mousewheel', isCancelWheelMouse, true);
  document.addEventListener('mousewheel', isCancelWheelMouse, true);
}