JavaScriptを使用してブラウザの更新を無効にします。
現在、window.onbeforeunload
を使用していますが、ユーザーがブラウザを更新したときに呼び出されたくないのです。
それを行う最良の方法は何ですか?
Update最近のコメントは、これが新しいChromeで機能しないと主張しています... Chrome ver 26.0.1410.64 m
として機能します
これはjQueryで非常に簡単です:
// slight update to account for browsers not supporting e.which
function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); };
// To disable f5
/* jQuery < 1.7 */
$(document).bind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).on("keydown", disableF5);
// To re-enable f5
/* jQuery < 1.7 */
$(document).unbind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).off("keydown", disableF5);
補足説明:これはキーボードのf5ボタンのみを無効にします。本当に更新を無効にするには、サーバー側のスクリプトを使用してページの状態の変更を確認する必要があります。まだやっていないので、これを行う方法を本当に知っているとは言えません。
私が勤務しているソフトウェアサイトでは、CodeFignerのセッションデータと共にdisableF5関数を使用しています。たとえば、画面をロックしてパスワードダイアログを表示するロックボタンがあります。機能「disableF5」は迅速かつ簡単で、ボタンが何もしないようにします。ただし、更新ボタンのマウスクリックを防ぐために、いくつかのことが行われます。
TIP:PHPの$_SESSION
などのサーバーセットCookieを使用してみます。 .NetのResponse.Cookies
でさえ、クライアントがあなたのサイトのどこにいるかを維持します。これは、CIのSessionクラスで行うことを行うより多くのVanilla方法です。大きな違いは、CIはDBのテーブルを使用するのに対して、これらのVanillaメソッドはクライアントに編集可能なCookieを格納することです。欠点は、ユーザーがそのCookieをクリアできることです。
エンリケが投稿したサイトから:
window.history.forward(1);
document.attachEvent("onkeydown", my_onkeydown_handler);
function my_onkeydown_handler() {
switch (event.keyCode) {
case 116 : // 'F5'
event.returnValue = false;
event.keyCode = 0;
window.status = "We have disabled F5";
break;
}
}
mac cmd + r、cmd + shift + rが必要です。
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };
$(document).ready(function(){
$(document).on("keydown", disableF5);
});
var ctrlKeyDown = false;
$(document).ready(function(){
$(document).on("keydown", keydown);
$(document).on("keyup", keyup);
});
function keydown(e) {
if ((e.which || e.keyCode) == 116 || ((e.which || e.keyCode) == 82 && ctrlKeyDown)) {
// Pressing F5 or Ctrl+R
e.preventDefault();
} else if ((e.which || e.keyCode) == 17) {
// Pressing only Ctrl
ctrlKeyDown = true;
}
};
function keyup(e){
// Key up Ctrl
if ((e.which || e.keyCode) == 17)
ctrlKeyDown = false;
};
$(window).bind('beforeunload', function(e) {
return "Unloading this page may lose data. What do you want to do..."
e.preventDefault();
});
これは、IEおよびfirefoxの更新を無効にするために使用しているコードです(これはF5、Ctr + F5、およびCtrl + Rでうまく機能します)。
<script language="javascript" type="text/javascript">
//this code handles the F5/Ctrl+F5/Ctrl+R
document.onkeydown = checkKeycode
function checkKeycode(e) {
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
// Mozilla firefox
if ($.browser.mozilla) {
if (keycode == 116 ||(e.ctrlKey && keycode == 82)) {
if (e.preventDefault)
{
e.preventDefault();
e.stopPropagation();
}
}
}
// IE
else if ($.browser.msie) {
if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) {
window.event.returnValue = false;
window.event.keyCode = 0;
window.status = "Refresh is disabled";
}
}
}
</script>
Useragentを使用してブラウザの種類を検出したくない場合($ .browserはnavigator.userAgentを使用してプラットフォームを決定します)、次を使用できます。
if('MozBoxSizing' in document.documentElement.style)
-firefoxに対してtrueを返します
これを最新のブラウザーに使用します。
function my_onkeydown_handler( event ) {
switch (event.keyCode) {
case 116 : // 'F5'
event.preventDefault();
event.keyCode = 0;
window.status = "F5 disabled";
break;
}
}
document.addEventListener("keydown", my_onkeydown_handler);
JSFを使用している場合、リッチフェイスからホットキーを直接使用できます。
<rich:hotKey key="backspace" onkeydown="if (event.keyCode == 8) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="f5" onkeydown="if (event.keyCode == 116) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+R" onkeydown="if (event.keyCode == 123) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+f5" onkeydown="if (event.keyCode == 154) return false;" handler="return false;" disableInInput="true" />
すべてのブラウザで動作します:
document.onkeydown = function(){
switch (event.keyCode){
case 116 : //F5 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 82 : //R button
if (event.ctrlKey){
event.returnValue = false;
event.keyCode = 0;
return false;
}
}
}
Ctrl + f5、ctrl + R、f5、backspaceを無効にする場合は、この単純なコードを使用できます。このコードはChromeと同様にMozilaでも機能しています。 bodyタグ内に次のコードを追加します。
<body onkeydown="return (event.keyCode == 154)">