web-dev-qa-db-ja.com

警告ページに「このページが追加のダイアログを作成しないようにする」と表示されるのはなぜですか?

私のRails 3アプリケーションで私は:

render :js => "alert(\"Error!\\nEmpty message sent.\");" if ...

時々、このエラーメッセージの下(同じアラートボックス内)に「このページが追加のダイアログを作成しないようにする」とチェックボックスが表示されます。

これは何を意味するのでしょうか ?

この追加のテキストとチェックボックスを表示しないことは可能ですか?

Firefox 4を使用しています。

25
Misha Moroshko

迷惑なアラートボックスを何度も表示するWebサイトを停止するブラウザー機能です。

Web開発者は、無効にすることはできません。

27
Marcel Korpel

これは何を意味するのでしょうか ?

これは、無限ループでモーダル(アラート/確認)メッセージを表示することで、ページがブラウザ(または現在のページ)をフリーズさせないようにする、ブラウザ側のセキュリティ対策です。例参照 here Firefoxの場合。

これをオフにすることはできません。それを回避する唯一の方法は、 JQuery UIのダイアログ のようなカスタムダイアログを使用することです。

10
Pekka 웃

Javaスクリプトを使用してカスタムアラートボックスを作成できます。以下のコードはデフォルトのアラート機能をオーバーライドします

window.alert = function(message) { $(document.createElement('div'))
    .attr({
      title: 'Alert',
      'class': 'alert'
    })
    .html(message)
    .dialog({
      buttons: {
        OK: function() {
          $(this).dialog('close');
        }
      },
      close: function() {
        $(this).remove();
      },
      modal: true,
      resizable: false,
      width: 'auto'
    });
};
3
Arun

JQuery UIのダイアログ を使用することが常に解決策とは限りません。私の知る限り、特定の時点でスクリプトの実行を停止する唯一の方法は、アラートと確認です。回避策として、アプリケーションがアラートを呼び出して確認する必要があることをユーザーに知らせるメカニズムを提供できます。これは、たとえば次のように実行できます(showErrorはjQueryダイアログまたは他の手段を使用してユーザーと通信します)。

var f_confirm;
function setConfirm() {
  f_confirm = confirm;
  confirm = function(s) {
    try {
      return f_confirm(s);
    } catch(e) {
      showError("Please do not check 'Prevent this page from creating additional dialogs'");
    }
    return false;
  };
};
0
mozey

この機能は、Webアプリのチェックボックスを回避するように設計されています。

実行中にページ上のすべての機能をブロックします(ユーザーが最後のダイアログを閉じてから3秒未満が経過したと仮定します)が、何か他の可能性をコーディングする必要がないため、再帰またはsetTimeout関数よりも好みますダイアログが表示されるのを待っている間にクリックまたはトリガーされます。

Modalboxに既に含まれているレポートにエラー/プロンプト/確認を表示するときに最も必要です。追加のダイアログ用にdivを追加することもできますが、組み込みのダイアログを使用できる場合、それは面倒で不必要に思えます。

Dom.successive_dialog_time_limitが3より大きい値に変更された場合、これはおそらく壊れるでしょう。また、ChromeがFirefoxと同じデフォルトを持っているかどうかはわかりません。しかし、少なくともオプションです。

また、誰かがそれを改善できるなら、してください!

// note that these should not be in the global namespace
var dlgRslt,
    lastTimeDialogClosed = 0;

function dialog(msg) {
    var defaultValue,
        lenIsThree,
        type;

    while (lastTimeDialogClosed && new Date() - lastTimeDialogClosed < 3001) {
        // timer
    }

    lenIsThree = 3 === arguments.length;
    type = lenIsThree ? arguments[2] : (arguments[1] || alert);
    defaultValue = lenIsThree && type === Prompt ? arguments[1] : '';

    // store result of confirm() or Prompt()
    dlgRslt = type(msg, defaultValue);
    lastTimeDialogClosed = new Date();
} 

使用法:

dialog('This is an alert.');

dialog( 'This is a Prompt', Prompt );
dialog('You entered ' + dlgRslt);

dialog( 'Is this a prompt?', 'maybe', Prompt );
dialog('You entered ' + dlgRslt);

dialog( 'OK/Cancel?', confirm );
if (dlgRslt) {
    // code if true
}
0
Queue

これはブラウザの機能です。

可能であれば、 http://bootboxjs.com/ を使用してみてください。このライブラリでは、同じことができます。

alert("Empty message sent");

書くことにより:

bootbox.alert("Empty message sent", function(result) {
    // do something whit result
 });

素敵なユーザーインターフェイスも表示されます。

0
zeppaman