为什么警告框中会出现“防止此页面创建其他对话框”?

时间:2011-05-01 12:36:41

标签: javascript html ruby-on-rails alert firefox4

在我的Rails 3应用程序中,我做了:

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

有时,在此错误消息下方(在同一个警告框中),我看到:“阻止此页面创建其他对话框”和一个复选框。

这是什么意思?

是否可以不显示此附加文本和复选框?

我使用Firefox 4。

6 个答案:

答案 0 :(得分:27)

这是一个浏览器功能,可以阻止一遍又一遍显示烦人警报框的网站。

作为Web开发人员,您无法禁用它。

答案 1 :(得分:10)

  

这是什么意思?

这是浏览器端的安全措施,通过在无限循环中显示模态(警报/确认)消息来防止页面冻结浏览器(或当前页面)。参见例如Firefox的here

你无法关闭它。唯一的解决方法是使用JQuery UI's dialogs等自定义对话框。

答案 2 :(得分:3)

您可以使用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 :(得分:0)

使用JQuery UI's dialogs并不总是一种解决方案。据我所知,警报和确认是在某一点停止执行脚本的唯一方法。作为一种解决方法,我们可以提供一种机制,让用户知道应用程序需要调用警报并确认。例如,这可以这样做(其中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;
  };
};

答案 4 :(得分:0)

我设计了这个功能,希望绕过我的网络应用程序中的复选框。

它在执行时阻止页面上的所有功能(假设自用户关闭最后一个对话框后已经过了不到三秒钟),但我更喜欢它的递归或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
}

答案 5 :(得分:0)

这是一个浏览器功能。

如果可以,请尝试使用http://bootboxjs.com/,在此库中您可以执行相同的操作

alert("Empty message sent");

写作:

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

您也将获得一个不错的用户界面!