25

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

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

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

这是什么意思 ?

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

我使用火狐 4。

4

6 回答 6

27

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

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

于 2011-05-01T12:39:26.270 回答
10

这是什么意思 ?

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

您不能将其关闭。解决它的唯一方法是使用自定义对话框,如JQuery UI 的 dialogs

于 2011-05-01T12:40:14.833 回答
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'
    });
};
于 2014-12-15T12:34:50.767 回答
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
}
于 2012-08-07T22:25:17.087 回答
0

使用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;
  };
};
于 2011-07-08T12:01:36.747 回答
0

这是一个浏览器功能。

如果可以的话,尝试使用http://bootboxjs.com/,使用这个库你可以做同样的事情

alert("Empty message sent");

通过写作:

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

你也会得到一个漂亮的用户界面!

于 2014-04-30T15:54:39.590 回答