Как определить " запретить этой странице создавать дополнительные диалоговые окна"
вопрос
как я могу определить, если пользователь установил флажок "запретить этой странице создавать дополнительные диалоги"?
почему это проблема
если пользователь предотвратил появление полей подтверждения, функция confirm('foobar')
всегда возвращает false.
если пользователь не может видеть мои диалоговые окна подтверждения confirm('Are you sure?')
, тогда пользователь никогда не сможет выполнить действие.
контекст
Итак, я использую код типа if(confirm('are you sure?')){ //stuff... }
. Таким образом, автоответчик false
из браузера будет препятствовать пользователю когда-либо делать stuff
. Но, если бы был способ обнаружить, что пользователь установил флажок, я мог бы выполнить действие автоматически.
Я думаю, что если пользователь отключил диалоги, то функция должна либо выдать ошибку, либо вернуть true. Функция предназначена для подтверждения действия, которое запросил пользователь.
2 ответов
насколько я знаю, это невозможно сделать каким-либо чистым способом, поскольку это функция браузера, и если браузер не даст вам знать, то вы не можете знать.
однако то, что вы можете сделать, это написать обертку вокруг confirm (), которая умножает время ответа. Если он слишком быстр, чтобы быть человеком, тогда приглашение, скорее всего, было подавлено, и оно вернулось бы истинным, а не ложным. Вы можете сделать его более надежным, запустив confirm () несколько раз, пока он возвращает false, поэтому вероятность того, что это пользователь über-fast, очень низкая.
обертка будет примерно такой:
function myConfirm(message){
var start = new Date().getTime();
var result = confirm(message);
var dt = new Date().getTime() - start;
// dt < 50ms means probable computer
// the quickest I could get while expecting the popup was 100ms
// slowest I got from computer suppression was 20ms
for(var i=0; i < 10 && !result && dt < 50; i++){
start = new Date().getTime();
result = confirm(message);
dt = new Date().getTime() - start;
}
if(dt < 50)
return true;
return result;
}
PS: Если вы хотите практическое решение, а не этот хак, предложение Ежи Завадски использовать библиотеку для диалога подтверждения, вероятно, лучший способ пойти.
Я думаю, что вы не можете изменить его - это функция браузера.
моей первой идеей, если вам нужно обходное решение, было бы изменить код с помощью system confirm
к некоторому оповещению библиотеки js (например, от jQuery UI)