web-dev-qa-db-ja.com

JavaScriptを使用してF5とブラウザーの更新を無効にする

JavaScriptを使用してブラウザの更新を無効にします。

現在、window.onbeforeunloadを使用していますが、ユーザーがブラウザを更新したときに呼び出されたくないのです。

それを行う最良の方法は何ですか?

55
Salil

Update最近のコメントは、これが新しいChromeで機能しないと主張しています... Chrome ver 26.0.1410.64 mとして機能します

これはjQueryで非常に簡単です:

jsFiddle

// 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」は迅速かつ簡単で、ボタンが何もしないようにします。ただし、更新ボタンのマウスクリックを防ぐために、いくつかのことが行われます。

  1. ロックがクリックされると、ユーザーセッションデータには「locked」という変数があり、TRUEになります
  2. 更新ボタンがクリックされると、マスターページのロードメソッドで「ロック」のセッションデータに対するチェックがTRUEの場合、要求された宛先に関係なく、リダイレクトを許可せず、ページは変更されません

TIP:PHPの$_SESSIONなどのサーバーセットCookieを使用してみます。 .NetのResponse.Cookiesでさえ、クライアントがあなたのサイトのどこにいるかを維持します。これは、CIのSessionクラスで行うことを行うより多くのVanilla方法です。大きな違いは、CIはDBのテーブルを使用するのに対して、これらのVanillaメソッドはクライアントに編集可能なCookieを格納することです。欠点は、ユーザーがそのCookieをクリアできることです。

81
SpYk3HH

エンリケが投稿したサイトから:

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;
    }
}
8
kzh

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);
});
8
gokhan
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;
};
7
Jos
$(window).bind('beforeunload', function(e) { 
    return "Unloading this page may lose data. What do you want to do..."
    e.preventDefault();
});
6
Hla Min Swe

これは、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を返します

4
Saurav S.

これを最新のブラウザーに使用します。

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);
2
Orhun Alp Oral

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" /> 
1
pratik

すべてのブラウザで動作します:

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;
            }
    }
}
0

Ctrl + f5、ctrl + R、f5、backspaceを無効にする場合は、この単純なコードを使用できます。このコードはChromeと同様にMozilaでも機能しています。 bodyタグ内に次のコードを追加します。

<body onkeydown="return (event.keyCode == 154)">