IEのファンクションキーの動作をキャンセルさせる

function cancelRefresh() {
  // keyCode == 116 → F5
  if (window.event && window.event.keyCode == 116) {
    window.event.keyCode = 8;
  }

  if (window.event && window.event.keyCode == 8) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
    return false;
  }
}

上記コードを<body onkeydown="cancelRefresh();">とすることでそのページ内でF5を押してもページが更新(リロード)されません。F5キーを検出しつつ更新がかからないので、ファンクションキーとしてF5キーを使う事が可能になります。

keyCodeを変える事により他のファンクションキー「112(F1)〜123(F12)」も検出しつつキャンセルする事ができますが、F1キーだけはヘルプが起動してしまいました。keyCode == 122としたらF11キーのフルスクリーンへ切り替える機能もキャンセルできました。

Flashでファンクションキーが拾えるけどIEのショートカットが優先されてしまってどうしよ〜って思ってた事がありましたけど、IE+JavaScriptが使えるという限定された環境だったらこれも有効な策だったかもしれません。