Ответ 1
Это функция браузера, чтобы останавливать веб-сайты, которые снова и снова показывают раздражающие оповещения.
Как веб-разработчик, вы не можете отключить его.
В моем приложении Rails 3 я:
render :js => "alert(\"Error!\\nEmpty message sent.\");" if ...
Иногда, ниже этого сообщения об ошибке (в том же окне предупреждения), я вижу: "Предотвратить эту страницу от создания дополнительных диалогов" и флажок.
Что это значит?
Возможно ли, чтобы этот дополнительный текст и флажок не отображались?
Я использую Firefox 4.
Это функция браузера, чтобы останавливать веб-сайты, которые снова и снова показывают раздражающие оповещения.
Как веб-разработчик, вы не можете отключить его.
Что это значит?
Это мера безопасности в конце браузера, чтобы предотвратить зависание страницы браузером (или текущей страницей) путем отображения сообщений модального (оповещения/подтверждения) в бесконечном цикле. См. здесь для Firefox.
Вы не можете отключить это. Единственный способ - использовать пользовательские диалоги, такие как диалоговые окна JQuery UI.
Вы можете создать настраиваемое окно с помощью 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'
});
};
Использование Диалогов 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;
};
};
Я разработал эту функцию, надеюсь, обойти флажок в моих веб-приложениях.
Он блокирует все функциональные возможности страницы во время выполнения (при условии, что прошло менее трех секунд с момента закрытия пользователем последнего диалога), но я предпочитаю его рекурсивной или 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
}
Это функция браузера.
Если бы вы могли, попробуйте использовать http://bootboxjs.com/, а в этой библиотеке вы можете сделать то же самое из
alert("Empty message sent");
написав:
bootbox.alert("Empty message sent", function(result) {
// do something whit result
});
Вы также получите хороший пользовательский интерфейс!