2012-01-13 15 views
5

trato de entender el comportamiento de Firefox con respecto al agregado "evitar que esta página cree cuadros de diálogo adicionales" en los cuadros de diálogo.reglas para "evitar que esta página cree cuadros de diálogo adicionales"

usando jQuery, si añado los siguientes oyentes:

//html 
<input class="testInput" /> 

//javascript 
$('.testInput') 
.click(function(){ alert('clicked') }) 
.keyup(function(){ alert('keyup') }) 
  1. Al hacer clic en la entrada, aparece el cuadro de alerta normalmente, hasta que el tiempo ~ 13.
  2. Al presionar una tecla, en cambio, aparece el segundo cuadro de mensaje con el mensaje "evitar que esta página cree diálogos adicionales". En realidad, parece que hay algún tiemout, y si espero como 2 segundos entre dos teclas, el mensaje desaparece.

De mis pruebas informales, 2. realidad se aplicará siempre que el cuadro de alerta no se llama desde dentro de una devolución de llamada onclick (por ejemplo: keyup de devolución de llamada, que muestra un cuadro de alerta en respuesta a una acción Ajax ...)

Estoy usando Firefox 9.0.1 en Ubuntu, hasta donde sé, no modifiqué la configuración de Firefox con respecto a estos umbrales. Imagino que sucede con cualquier versión reciente de cualquier navegador.

estoy usando la biblioteca jQuery, pero yo no creo que es relevante aquí.

Mi pregunta es: ¿Cuáles son las reglas exactas que hacen esta advertencia aparecerá en un cuadro de diálogo?

[Editar]

Uso de cromo/Ubuntu (versión 17.0.963.26), el umbral parece ser sólo el retardo entre dos cuadros de diálogo.

Puede probar esto desde jsFiddle here (gracias Rory McCrossan)

+1

FYI: prueba con este violín (http: // jsfiddle.net/RoryMcCrossan/9XwTn/) Obtengo la casilla de verificación en la alerta en la iteración 12 para el clic y la tecla. –

+0

@Rory: todavía tengo mi comportamiento. ¿Qué navegador tienes? thx para el enlace jsfiddle. – LeGEC

+0

Solo para completar con más datos de entrada; Lo obtengo en la iteración del 12º clic y la segunda iteración de la tecla en FF 9.0.1 Windows XP SP3. –

Respuesta

5

La regla (s) exacta: Un intervalo de tiempo entre los cuadros de diálogo apareciendo. El valor utilizado para determinar esto se encuentra en SUCCESSIVE_DIALOG_TIME_LIMIT

línea de salida 2614 en el siguiente enlace del fragmento:

nsGlobalWindow::DialogOpenAttempted() 

TimeDuration dialogDuration(TimeStamp::Now() - topWindow->mLastDialogQuitTime); 

if (dialogDuration.ToSeconds() < Preferences::GetInt("dom.successive_dialog_time_limit",SUCCESSIVE_DIALOG_TIME_LIMIT)){topWindow->mDialogAbuseCount++;return (topWindow->GetPopupControlState() > openAllowed || topWindow->mDialogAbuseCount > MAX_DIALOG_COUNT);}topWindow->mDialogAbuseCount = 0; return false;} 

Link to source

+0

Y ** ¿qué es este valor **? –

1

Puede patear alrededor de la fuente de Firefox si lo desea. Tenga en cuenta que los diferentes navegadores tendrán diferentes reglas.

El código correspondiente para Firefox está en nsGlobalWindow.cpp y nsGlobalWindow.h (los siguientes enlaces corresponden a números de línea, por lo que se pudrirán lentamente a medida que cambie la fuente). Parece estar controlado por las constantes MAX_DIALOG_COUNT (10) en nsGlobalWindow.h y SUCCESSIVE_DIALOG_TIME_LIMIT (3 unidades son segundos). nsGlobalWindow.cpp mantiene un recuento (mDialogAbuseCount). Al parecer, los dialogDuration funcionar tanto incrementos o borra mDialogAbuseCount dependiendo de si el cuadro de diálogo ha estado abierto más tiempo que el SUCCESSIVE_DIALOG_TIME_LIMIT. La función AreDialogsBlocked utiliza el mDialogAbuseCount (en parte) para decidir si están bloqueados.

Así que en resumen: Si va a abrir repetidamente los pop-ups y luego cerrarlas antes de tres segundos, después de 10 o así podrás desencadenar algo.

Cuestiones relacionadas