Подтвердить что ты не робот

Почему в предупреждающем окне появляется сообщение "Предотвратить эту страницу от создания дополнительных диалогов"?

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

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

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

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

Возможно ли, чтобы этот дополнительный текст и флажок не отображались?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Вы можете создать настраиваемое окно с помощью java script, ниже код переопределит функцию предупреждения по умолчанию

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'
    });
};

Ответ 4

Использование Диалогов JQuery UI не всегда является решением. Насколько я знаю, предупреждение и подтверждение - единственный способ остановить выполнение script в определенный момент. В качестве обходного пути мы можем предоставить механизм, позволяющий пользователю узнать, что приложение необходимо вызвать оповещение и подтвердить. Это можно сделать так, например, (где 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;
  };
};

Ответ 5

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

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

Ответ 6

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

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

alert("Empty message sent");

написав:

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

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