Я хочу иметь возможность автоматически закрывать окно предупреждения с помощью Javascript через определенное время или при определенном событии (например, onkeypress). Судя по моим исследованиям, это невозможно со встроенной функцией alert(). Есть ли способ отменить его и контролировать открываемое диалоговое окно?
Кроме того, мне не нужно переопределение, которое показывает скрытый div в качестве предупреждения. Мне нужно настоящее диалоговое окно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы могли бы открыть всплывающее окно и вызвать что диалоговое окно. Я не уверен в деталях, но уверен, что вы можете программно закрыть окно, открытое с помощью javascript. Этого было бы достаточно?
нет контроля над диалоговым окном, если бы у вас был контроль над диалоговым окном, вы могли бы написать навязчивый код javascript. (Не рекомендуется использовать оповещение ни для чего, кроме отладки)
Теперь ... Признаюсь, я все еще делаю это время от времени, но ... правда? Предупреждение об отладке? Ты что пропагандируя?
alert() идеально подходит для отладки. В прошлый раз я использовал его при написании userjs на своем iPad @ office. Дай бог бдительности ()! :)
Я считаю, что и alert, и console.info могут быть полезны в разных ситуациях. Однако никогда не используйте alert(); в цикле. Хороший способ разбить компьютер :)
I want to be able to close an alert box automatically using javascript after a certain amount of time or on a specific event (i.e. onkeypress)
Замечание: если у вас есть оповещение («данные»), вы не сможете сохранить код, работающий в фоновом режиме (AFAIK) .... диалоговое окно является модальным окном, поэтому вы также не можете потерять фокус. Так что у вас не будет ни нажатия клавиш, ни таймера ...
Мое окно предупреждения будет активировано асинхронным событием, поэтому это не должно быть проблемой (теоретически).
JavaScript не асинхронный. Вызов предупреждения / подтверждения / приглашения останавливает всю обработку скриптов (а зачастую и весь веб-браузер) до тех пор, пока пользователь не ответит.
@bobince JavaScript допускает поведение асинхронный; но это не многопоточный. Если поток зависает в блоке кода - асинхронно или нет - весь код будет заморожен в этой точке.
Единственная реальная альтернатива здесь - использовать какой-то настраиваемый виджет с модальной опцией. Взгляните на пользовательский интерфейс jQuery, чтобы увидеть пример диалога с этими функциями. Подобные вещи существуют практически во всех JS-фреймворках, которые вы можете упомянуть.
Я знаю, но, к сожалению, это единственный способ справиться с этим в JavaScript.
Не нужно раздражаться, вы задали вопрос, а я сказал, что это невозможно, а это невозможно, и предложил альтернативу.
Вау ... годы спустя, я не могу поверить, насколько я был идиотом. Извини, что я был таким придурком, когда все, что ты пытался сделать, это помочь.
Как упоминалось ранее, вы действительно не можете этого сделать. Вы можете создать модальный диалог внутри окна, используя структуру пользовательского интерфейса, или у вас может быть всплывающее окно со скриптом, который автоматически закрывается после тайм-аута ... у каждого есть отрицательный аспект. Модальное окно внутри браузера не будет создавать никаких уведомлений, если окно свернуто, а программное всплывающее окно (основанное на таймере), вероятно, будет заблокировано современными браузерами и блокировщиками всплывающих окон.
Вы можете использовать ярлык и установить время его появления и исчезновения, например, Скрыть его изначально и отображать при нажатии. $ ('# div_Message'). fadeIn (500) .delay (1000) .fadeOut (1500);
Похоже, вы можете добиться чего-то подобного с помощью Уведомление API. Вы не можете контролировать, как долго он остается видимым (возможно, это какое-то предпочтение ОС - если вы не укажете requireInteraction true, тогда он останется навсегда или до тех пор, пока он не будет закрыт или пока вы его не закроете), и для этого требуется, чтобы пользователь щелкнул "разрешить" уведомления »(к сожалению) первым, но вот оно:
Если вы хотите, чтобы он закрывался через 1 с (все ОС оставляют его открытым как минимум 1 с):
var notification = new Notification("Hi there!", {body: "some text"});
setTimeout(function() {notification.close()}, 1000);
Если вы хотите показать его дольше, чем «по умолчанию», вы можете привязать его к обратному вызову onclose и показать другое повторное уведомление, я полагаю, чтобы заменить его.
Ссылка: вдохновлено ответом это, хотя этот ответ больше не работает в современном Chrome, но API уведомлений работает.
Флаг requireinteraction также «предполагается», чтобы он оставался включенным бесконечно (пока они не закроют его или вы не сделаете это с помощью метода #close) FWIW (в OS .X тайм-аут по умолчанию составляет 5 секунд FWIW)
window.setTimeout('alert("Message goes here");window.close();', 5000);
Попробуйте плагин boot box.
var alert = bootbox.alert('Massage')
alert.show();
setTimeout(function(){alert.modal('hide'); }, 4000);
Вы действительно можете это сделать, вы можете просто прослушать это всплывающее окно, а затем подтвердить его истинность, прежде чем оно когда-либо «всплывет»,
if (window.alert){
return true
}
Хорошая работа, но OP хотел только диалоговое окно с предупреждением. Но это должно быть сделано для тех, кто хочет контролировать диалоги. +1