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