Cómo detectar "evitar que esta página cree cuadros de diálogo adicionales"
PREGUNTA
¿Cómo puedo detectar si un usuario ha marcado la casilla "evitar que esta página cree cuadros de diálogo adicionales"?
POR QUÉ es un problema
Si el usuario ha impedido la aparición de cuadros de confirmación, la función confirm('foobar')
siempre devuelve falso.
Si el usuario no puede ver mis cuadros de diálogo de confirmación confirm('Are you sure?')
, entonces el usuario nunca podrá realizar la acción.
CONTEXTO
Entonces, uso el código como if(confirm('are you sure?')){ //stuff... }
. Por lo tanto, una respuesta automática del false
navegador impedirá que el usuario lo haga stuff
. Pero, si hubiera una manera de detectar que el usuario ha marcado la casilla, entonces podría ejecutar la acción automáticamente.
Creo que si el usuario ha desactivado los diálogos, entonces la función debería arrojar un error o devolver verdadero. La función está destinada a confirmar una acción que el usuario ha solicitado.
Hasta donde yo sé, esto no es posible hacerlo de ninguna manera limpia, ya que es una función del navegador, y si el navegador no te lo permite saber, entonces no puedes saberlo.
Sin embargo, lo que podría hacer es escribir un contenedor alrededor de confirm() que multiplique el tiempo de respuesta. Si es demasiado rápido para ser humano, es muy probable que el mensaje haya sido suprimido y devolverá verdadero en lugar de falso. Podría hacerlo más robusto ejecutando confirm() varias veces siempre que devuelva falso, por lo que la probabilidad de que sea un usuario súper rápido sea muy baja.
El envoltorio sería algo como esto:
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;
}
PD: si desea una solución práctica y no este truco, la sugerencia de Jerzy Zawadzki de usar una biblioteca para crear cuadros de diálogo de confirmación es probablemente la mejor manera de hacerlo.
Creo que no puedes cambiarlo: es una función del navegador.
Mi primera idea si necesita una solución alternativa sería cambiar el código de uso del sistema confirm
a alguna alerta de biblioteca js (por ejemplo, desde jQuery UI)