Si comienzo un clic con jquery que hace window.open()
, está bloqueado por el bloqueador de elementos emergentes, si hago el clic manualmente la ventana no está bloqueada. ¿Cómo difiere el navegador entre los dos?¿cómo distingue el navegador la diferencia entre el clic del usuario y el clic programático?
Respuesta
La aplicación de Firefox de esto es discutido extensamente en this bug y this other bug tiene algunos antecedentes más interesantes, incluyendo qué extremos sitios pasará a través con el fin de imponer una ventana emergente no deseado en los usuarios confiados (en este caso: llamar window.open()
de dentro de una imagen load
evento). Si busca alrededor de Bugzilla, encontrará que la gente de Mozilla tomó varios años para que todo funcione correctamente, por ejemplo here's a bug from 2001.
La forma en que funciona actualmente es la siguiente: Cuando Firefox recibe un evento de clic del sistema operativo, para una cierta cantidad de tiempo window.open()
está activado en JavaScript (busque en dom.disable_open_click_delay
about:config
). Si llama al evento click()
desde el código sin que el usuario haga clic en el siguiente paso, la habilitación de window.open()
nunca ocurre, aunque la llamada al window.open()
tendrá éxito to stop sites detecting that you have popup blocking enabled.
No estoy seguro de cómo otros navegadores implementan esto, pero me sorprendería si fuera muy diferente.
Creo que llamar a click
a través de jQuery realmente no activa un clic en el elemento, sino que llama a la función que escucha el clic. Entonces, aunque está llamando al click()
, en realidad está llamando a una función.
Cuando el usuario hace clic, es un clic real.
Ejemplo:
var handler = function() {
alert('hi');
};
$('#example').on('click', handler);
$('#example').click(); // really just calls handler();
¿Es eso también cierto para el javascript nativo .click()? – nbrooks
Algo interesante a tener en cuenta: si usted, como usuario, hace algo que da como resultado el código de clic que se está ejecutando, todavía lo hace. Esto incluye hacer clic en algo que llame al evento 'click'. O incluso un evento de pulsación de tecla puede llamarlo y funcionará. – sachleen
Es difícil predecir cómo el navegador implementa esta verificación ya que no hay nada en la especificación que dicte cuándo se debe solicitar al usuario. http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-2651361 – Fenton
código nativo del navegador controla el evento real clic del ratón (del sistema operativo) y crea el objeto de evento navegador. En ese punto en el código nativo del navegador, el navegador sabe que este evento fue creado con un clic real del mouse.
Supongo que hay algunos datos ocultos (no accesibles desde javascript) adjuntos al evento que permiten al navegador realizar un seguimiento de si el evento se inició con un clic real del mouse o no, aunque podría haber otros mecanismos de implementación también.
- 1. Cuál es la diferencia entre el disparador ('clic') y el clic() en jQuery
- 2. Botón programático clic arroja la excepción 'System.StackOverflowException'
- 3. diferencia principal entre el Manifiesto programático y registro de BroadcastReceiver
- 4. ¿Cuál es la diferencia entre un clic y un clic del mouse?
- 5. Distinga entre hacer doble clic con el mouse y hacer clic con el mouse en wpf
- 6. html diferencia formulario de presentación entre el clic(), enviar() y haga clic con el manual de jQuery
- 7. Distinga entre el navegador web del iPhone y el agente del usuario de la aplicación iPhone
- 8. El evento de clic de control del usuario no funciona al hacer clic en el texto dentro del control?
- 9. cómo imprimir otra página (o archivo) cuando el usuario hace clic en el botón de impresión del navegador?
- 10. ¿Diferencia entre f5, CTRL + F5 y haga clic o actualice el botón?
- 11. Cómo desencadenar el menú contextual del navegador en un elemento. (Como si el usuario hiciera clic derecho)
- 12. Quiero detener la solicitud del navegador, cuando el usuario hace clic en cualquier botón de la interfaz de usuario, como botón de detención en el navegador
- 13. ¿Cómo hago clic en un JButton sin que el usuario haga clic en él?
- 14. Cómo simular el clic del mouse con el control WebBrowser
- 15. pyqt4: Abra el sitio web en el navegador estándar en el botón haga clic en
- 16. ¿Cómo deseleccionar el cuadro de texto si el usuario hace clic en otro lugar del formulario?
- 17. Obtener la posición del clic sobre el enlace del comando
- 18. Android: cómo hacer que el teclado entre en el botón decir "Buscar" y manejar su clic?
- 19. diferencia entre el reenvío y la redirección
- 20. Distinguir entre un solo clic y doble clic en Java
- 21. Diferencia entre rango y selección en el navegador
- 22. Procedimiento para interceptar cuando el usuario haga clic en un enlace en un navegador web
- 23. RequiredFieldValidator requiere que el usuario haga clic dos veces
- 24. ¿Cambiar el color de TextView que se puede hacer clic en el foco y hacer clic?
- 25. Textarea pierde el foco en el clic del mouse?
- 26. jQuery: detectar el clic del mouse y abrir el objetivo en la nueva pestaña
- 27. Cómo deshabilitar el botón, haga clic en?
- 28. Visual Studio: ¿hay algún clic en el interruptor entre las pestañas y la sangría de espacios?
- 29. ¿Cómo puedo detener la vista del navegador moviéndome a la parte superior de la página cuando el usuario hace clic en el botón de selección jQueryUI?
- 30. Encuentre el número li clic
Aquí hay un [jsfiddle] (http://jsfiddle.net/twMSG/1/) para demostrar. Intentará aparecer en la carga de página pero se bloqueará. Llamar al evento 'click' programmatically hace que se bloquee, pero si lo llamas dentro de otro evento de clic que atraviesa. – sachleen