Окно предупреждения о закрытии Javascript

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

Кроме того, я не хочу, чтобы переопределение отображало скрытый div в качестве предупреждения. Мне нужно реальное диалоговое окно.


person Andrew Ensley    schedule 20.01.2009    source источник


Ответы (10)


Как упоминалось ранее, вы действительно не можете этого сделать. Вы можете сделать модальный диалог внутри окна, используя структуру пользовательского интерфейса, или у вас может быть всплывающее окно со сценарием, который автоматически закрывается после тайм-аута... у каждого есть отрицательный аспект. Модальное окно внутри браузера не будет создавать никаких уведомлений, если окно свернуто, а программные всплывающие окна (на основе таймера), вероятно, будут заблокированы современными браузерами и блокировщиками всплывающих окон.

person Tracker1    schedule 20.01.2009

Похоже, вы можете сделать нечто подобное с помощью уведомления API. Вы не можете контролировать, как долго оно остается видимым (вероятно, какое-то предпочтение ОС — если вы не укажете requireInteraction true, тогда оно останется навсегда или до тех пор, пока оно не будет закрыто, или пока вы его не закроете), и для этого требуется, чтобы пользователь нажал кнопку «Разрешить уведомления». (к сожалению) первый, но вот он:

Если вы хотите, чтобы он закрывался через 1 с (все ОС оставляют его открытым как минимум 1 с):

var notification = new Notification("Hi there!", {body: "some text"});
setTimeout(function() {notification.close()}, 1000);

Если вы хотите показать его дольше, чем по умолчанию, вы можете привязать к обратному вызову onclose и, я полагаю, показать другое повторное уведомление, чтобы заменить его.

Ссылка: вдохновлен этим ответом, хотя этот ответ больше не работает в современном Chrome, но работает Notification API.

person rogerdpack    schedule 17.07.2017
comment
Флаг requireinteraction также должен заставить его оставаться на неопределенный срок (пока они не закроют его или вы не сделаете это с помощью метода #close) FWIW (в OS .X тайм-аут по умолчанию составляет 5 с FWIW) - person rogerdpack; 06.01.2018

нет контроля над диалоговым окном, если бы у вас был контроль над диалоговым окном, вы могли бы написать навязчивый код javascript. (Не рекомендуется использовать оповещение для чего-либо, кроме отладки)

person ForYourOwnGood    schedule 20.01.2009
comment
Теперь... я признаю, что все еще делаю это время от времени, но... правда? Предупреждение об отладке? Вы пропагандируете это? - person eyelidlessness; 24.09.2009
comment
alert() идеально подходит для отладки. В прошлый раз я использовал его во время написания userjs на своем iPad @ в офисе. Боже, благослови оповещение ()! :) - person A.D.; 10.03.2015
comment
Я считаю, что и alert, и console.log полезны в разных ситуациях. Однако никогда не используйте alert(); внутри цикла. Хороший способ сломать компьютер :) - person www139; 07.04.2018

Я хочу иметь возможность автоматически закрывать окно предупреждения с помощью javascript через определенное время или при определенном событии (например, при нажатии клавиши)

Примечание: если у вас есть предупреждение («данные»), вы не сможете поддерживать работу кода в фоновом режиме (AFAIK).... диалоговое окно является модальным окном, поэтому вы также не можете потерять фокус. Таким образом, у вас не будет ни нажатия клавиш, ни таймера...

person Ironicnet    schedule 20.01.2009
comment
Мое окно предупреждения будет запущено асинхронным событием, так что это не должно быть проблемой (теоретически). - person Andrew Ensley; 21.01.2009
comment
JavaScript не является асинхронным. Вызов alert/confirm/prompt замораживает всю обработку скрипта (а зачастую и весь веб-браузер) до тех пор, пока пользователь не ответит. - person bobince; 21.01.2009
comment
@bobince JavaScript допускает асинхронное поведение; но он не многопоточный. Если поток зависает в блоке кода --- асинхронном или нет --- весь код будет заморожен в этот момент. - person jpaugh; 23.07.2015

Попробуйте плагин загрузочного бокса.

var alert = bootbox.alert('Massage')
alert.show();
setTimeout(function(){alert.modal('hide'); }, 4000);
person Dhaval Rajpara    schedule 01.09.2017

Думаю, вы могли бы открыть всплывающее окно и назвать это диалоговым окном. Я не уверен в деталях, но я уверен, что вы можете программно закрыть окно, которое вы открыли из javascript. Будет ли этого достаточно?

person David Hanak    schedule 20.01.2009
comment
Хорошая работа, но OP хотел только диалоговое окно с предупреждением. Но это должно подойти тем, кто хочет контролировать диалоги. +1 - person GoodSp33d; 30.05.2013

Единственная реальная альтернатива здесь — использовать какой-то пользовательский виджет с модальной опцией. Взгляните на пользовательский интерфейс jQuery для примера диалога с этими функциями. Подобные вещи существуют почти в каждом JS-фреймворке, который вы можете упомянуть.

person Toby Hede    schedule 20.01.2009
comment
Я знаю, но, к сожалению, это единственный способ справиться с этим в JavaScript. - person Toby Hede; 21.01.2009
comment
Не надо раздражаться, вы задали вопрос, а я сказал, что это невозможно, что нельзя, и предложил альтернативу. - person Toby Hede; 22.01.2009
comment
Вау... годы спустя я не могу поверить, каким идиотом я был. Извини, я была такой задницей, когда все, что ты пытался сделать, это помочь. - person Andrew Ensley; 14.02.2012

Если вы сделаете это программно в JS, это будет похоже на изобретение велосипеда. Я рекомендую использовать плагин jQuery под названием jGrowl

person Perpetualcoder    schedule 20.01.2009
comment
jGrowl просто отображает встроенный div. Мне нужно диалоговое окно. Спасибо хоть. - person Andrew Ensley; 21.01.2009

Вы на самом деле можете сделать это, вы можете просто прослушать это всплывающее окно, а затем подтвердить true, прежде чем оно когда-либо «всплывет»,

if(window.alert){
  return true
}
person mferguson54100    schedule 06.11.2019

Вы можете использовать ярлык и установить время его появления и исчезновения, например, скрыть его изначально и показать при нажатии. $('#div_Message').fadeIn(500).delay(1000).fadeOut(1500);

person Hammer    schedule 27.02.2012