19

質問

ユーザーが「このページで追加のダイアログを作成できないようにする」ボックスをチェックしたかどうかを検出するにはどうすればよいですか?

なぜそれが問題なのか

ユーザーが確認ボックスの表示を防いだ場合、関数confirm('foobar')は常に false を返します。

ユーザーが確認ダイアログ ボックスを表示できない場合、ユーザーconfirm('Are you sure?')はアクションを実行できません。

環境

だから、私はのようなコードを使用しますif(confirm('are you sure?')){ //stuff... }falseしたがって、ブラウザからの自動応答により、ユーザーはstuff. しかし、ユーザーがチェックボックスをオンにしたことを検出する方法があれば、アクションを自動的に実行できます。

ユーザーがダイアログを無効にした場合、関数はエラーをスローするか、true を返す必要があると思います。この関数は、ユーザーが要求したアクションを確認するためのものです。

4

2 に答える 2

17

私の知る限り、これはブラウザの機能であるため、きれいな方法で行うことはできません。ブラウザが通知しない場合は、知ることができません。

しかし、あなたができることは、応答時間を計る confirm() の周りにラッパーを書くことです。人間であるには速すぎる場合、プロンプトはおそらく抑制され、false ではなく true が返されます。false を返す限り、confirm() を数回実行することでより堅牢にすることができるため、非常に高速なユーザーである可能性は非常に低くなります。

ラッパーは次のようになります。

function myConfirm(message){
    var start = new Date().getTime();
    var result = confirm(message);
    var dt = new Date().getTime() - start;
    // dt < 50ms means probable computer
    // the quickest I could get while expecting the popup was 100ms
    // slowest I got from computer suppression was 20ms
    for(var i=0; i < 10 && !result && dt < 50; i++){
        start = new Date().getTime();
        result = confirm(message);
        dt = new Date().getTime() - start;
    }
    if(dt < 50)
       return true;
    return result;
}

PS: このハックではなく実用的な解決策が必要な場合は、ライブラリを使用して確認ダイアログを行うという Jerzy Zawadzki の提案がおそらく最善の方法です。

于 2012-07-20T00:07:07.613 に答える
3

変更できないと思います-それはブラウザの機能です。

回避策が必要な場合の私の最初のアイデアは、コードをシステムの使用からconfirmjs ライブラリ アラート (jQuery UI など)に変更することです。

于 2012-07-20T00:10:17.847 に答える