Javascript 为什么;阻止此页面创建其他对话框";是否显示在警报框中?

Javascript 为什么;阻止此页面创建其他对话框";是否显示在警报框中?,javascript,html,ruby-on-rails,alert,firefox4,Javascript,Html,Ruby On Rails,Alert,Firefox4,在Rails 3应用程序中,我执行以下操作: render :js => "alert(\"Error!\\nEmpty message sent.\");" if ... 有时,在这个错误消息下面(在同一个警告框中),我会看到:“阻止此页面创建其他对话框”和一个复选框 这是什么意思 是否可以不显示此附加文本和复选框 我使用Firefox4。这是一种浏览器功能,可以阻止反复显示恼人警告框的网站 作为web开发人员,您不能禁用它 这是什么意思 这是浏览器端的一种安全措施,通过在无限循环中显

在Rails 3应用程序中,我执行以下操作:

render :js => "alert(\"Error!\\nEmpty message sent.\");" if ...
有时,在这个错误消息下面(在同一个警告框中),我会看到:“阻止此页面创建其他对话框”和一个复选框

这是什么意思

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


我使用Firefox4。

这是一种浏览器功能,可以阻止反复显示恼人警告框的网站

作为web开发人员,您不能禁用它

这是什么意思

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


你不能关掉这个。唯一的解决方法是使用自定义对话框,如。

使用并不总是一个解决方案。据我所知,警报和确认是在某一点停止脚本执行的唯一方法。作为一种解决方法,我们可以提供一种机制,让用户知道应用程序需要调用警报和确认。例如,可以这样做(其中,淋浴ROR使用jQuery对话框或其他方式与用户通信):


我设计这个功能是希望绕过我的web应用程序中的复选框

它在执行时会阻止页面上的所有功能(假设用户关闭最后一个对话框后不到三秒钟),但我更喜欢使用递归或setTimeout函数,因为在等待对话框出现时,我不必编写代码,以防单击或触发其他功能

在显示Modalbox中已包含的报告的错误/提示/确认时,我最需要它。我可以为额外的对话框添加一个div,但是如果可以使用内置对话框的话,这看起来太混乱和不必要了

请注意,如果dom.successional\u dialog\u time\u 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();
} 

这是一个浏览器功能

如果可以的话,试着用这个图书馆,你也可以这样做

alert("Empty message sent");
以书面形式:

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

你也会得到一个很好的用户界面

您可以使用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'
    });
};

浏览器认为您的js代码有一些错误,并且它在某种循环中非常频繁地显示消息,因此浏览器向用户提供了禁止此警报的选项,无论这些警报的内容或长度如何,从第二次
警报开始显示此警报,这似乎是基于上一个警报关闭后经过的时间。计时器大约在一秒钟左右。@Dan是的,可能是他们多年来改变了它。:)只是补充:从Firefox4开始,这些警报不再是模态的,至少对窗口管理器来说不是。现在,您可以轻松导航到其他选项卡/窗口。“警报和确认是在某个点停止脚本执行的唯一方法”-当您同步思考时,这是正确的。但是,它们可以使用jQueryUI控件触发另一个方法,然后处理结果。使用回调不会停止其间执行的代码。但正如您所说,在使用jQuery对话框时,传入回调函数是控制流的一种很好的方法。您能演示一下如何使用它吗?也许可以添加一些关于如何使用和发生了什么的描述?
bootbox.alert("Empty message sent", function(result) {
    // do something whit result
 });
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'
    });
};