Почему в окне предупреждения появляется сообщение «Запретить этой странице создавать дополнительные диалоги»? - PullRequest
25 голосов
/ 01 мая 2011

В моем приложении на Rails 3 я делаю:

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

Иногда ниже этого сообщения об ошибке (в том же окне предупреждения) я вижу: «Запретить этой странице создавать дополнительные диалоги» и флажок.

Что это значит?

Можно ли не отображать этот дополнительный текст и флажок?

Я использую Firefox 4.

Ответы [ 6 ]

27 голосов
/ 01 мая 2011

Это функция браузера, позволяющая останавливать веб-сайты, на которых снова и снова появляются раздражающие окна с предупреждениями.

Как веб-разработчик, вы не можете отключить его.

10 голосов
/ 01 мая 2011

Что это значит?

Это мера безопасности на стороне браузера, которая предотвращает зависание страницы браузером (или текущей страницей), показывая модальные сообщения (предупреждение / подтверждение) в бесконечном цикле. Смотрите, например здесь для Firefox.

Вы не можете отключить это. Единственный способ обойти это - использовать пользовательские диалоги, такие как диалоги пользовательского интерфейса JQuery .

3 голосов
/ 15 декабря 2014

Вы можете создать собственное окно оповещения, используя скрипт 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'
    });
};
0 голосов
/ 30 апреля 2014

Это функция браузера.

Если вы можете, попробуйте использовать http://bootboxjs.com/,, но в этой библиотеке вы можете сделать то же самое с

alert("Empty message sent");

, написав:

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

Вы также получите хороший пользовательский интерфейс!

0 голосов
/ 08 августа 2012

Я разработал эту функцию, чтобы, надеюсь, обойти флажок в моих веб-приложениях.

Он блокирует все функциональные возможности на странице во время выполнения (при условии, что прошло меньше трех секунд с того момента, как пользователь закрыл последнее диалоговое окно), но я предпочитаю его рекурсивной или 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 голосов
/ 08 июля 2011

Использование диалоговых окон 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;
  };
};
...