0

訪問者がボタンを3秒以上押し続けた後、jQueryイベントをバインドしてポップオフする方法はありますか?この場合、ユーザーがf5を3秒間押し続けた後、何かをしたいと思います。

ここで、ユーザーがf5を押したときに更新されないようにする解決策を見つけました。

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

ただし、これは私が探しているものではありません。ユーザーがページを更新できるようにしたいのですが、いわばf5ボタンにロックをかけないようにしたいのです(これは、次の方法でタスクを実行できるオンラインゲームです。ページを更新します)。

私がやろうとしていることは可能ですか?

編集:私は短期的で迅速なクライアント側の修正を探しています。サーバー側の問題は後で解決されます。

4

2 に答える 2

7

これは、サーバー側で本当に解決する必要がある種類の問題です。ページを更新することでタスクを実行できる場合は、ボットまたはチェックを無効にする1行か2行のスクリプトで実行できます。このクライアント側を実行しても、実際には役に立ちません。

その場合に必要なのは、ユーザーセッションで、アクションXが最後に実行された時間を追跡し、Y秒以上経過しない限り再度実行しないでください。また、ユーザーに実行を試みたことを通知します。速い。

cache-control編集:簡単なハックとして、影響を受けるスクリプトの応答に、コンテンツがY秒で期限切れになるように設定された値を持つヘッダーを提供するようにWebサーバーを構成することができます。これにより、クライアントが通常の「F5」でページを再要求できなくなる可能性があります(一部のブラウザーではctrl + f5)、これによる影響はありません。

繰り返しになりますが、ユーザーがこの問題を悪用していることが問題である場合、クライアント側での修正はそれほど長くは機能せず、ユーザーはすぐに別の方法を見つけるでしょう。

于 2013-02-13T14:31:27.667 に答える
1

PhonicUKの答え(サーバー側で行う)は、これを処理する唯一の正しい方法です。しかし、あなたはその答えについてのコメントで言った:

今のところ、クライアント側の簡単な修正を適用するように求められました。だから私はそれが可能かどうか尋ねています。

次のように、バイパスされるようなことを行うことができます(ここでは、jQuery cookieプラグインを使用していると想定しています)。

(function($) {

    $(document).on("keydown", function(e) {
        var lastRefresh, now;

        if (e.which == 116) {
            now = new Date().getTime();
            lastRefresh = $.cookie("lastRefresh");
            if (lastRefresh && (now - parseInt(lastRefresh, 10)) < 3000) {
                e.preventDefault();
            }
            $.cookie("lastRefresh", now);
        }
    });

})(jQuery);

繰り返しになりますが、ユーザーはそれを回避する方法を見つけるでしょう。

必ず、Closureコンパイラまたは非常に優れた難読化ツールを使用してスクリプトを実行してください。:-)

于 2013-02-13T14:39:09.643 に答える