2010-09-15 12 views
8

Me encontré con una interesante función de error esta noche al escribir un controlador para window.onresize en Chrome (la última versión 6.0.472.55). Primero abra dos pestañas, luego en la primera pestaña abra this jsFiddle.¿Por qué se dispara el evento 'window.resize' cuando se cambian las pestañas en Chrome (6.0.472.55)?

Cambie el tamaño de la ventana a voluntad y el cuadro de diálogo funciona como se esperaba. Ahora, intente cambiar a la 2da pestaña -_-. ¿Por qué se dispara resize cuando se cambia la pestaña? ¿Podría alguien proporcionar información/más detalles si necesito presentar un error?

+0

hallazgo muy interesante confirmó Google Chrome 6.0.472.55 –

+0

Creo que es un error: no se dispara sobre el cambio pestaña en Chrome 6.0.472.55 en Linux (Ubuntu 10.4) – Utaal

+0

no podía reproducirse. Desarrollador Chrome 7.0.517.5 en Mac OS X – esqew

Respuesta

0

Sin un conocimiento práctico de cómo Chrome maneja el cambio de pestañas y la representación de páginas, mi conjetura es tan buena (o mala, dependiendo de cómo la mire) como la del siguiente tipo. Supongo que al volver a distribuir la página o al volver a cargar la página ya renderizada, si se almacena en caché, se desencadena el evento onresize. Esto es lo que sucede cuando se cambia la pestaña. Siguiendo mi teoría, supongo que Chrome no activará el evento de cambio de tamaño en la vista de página inicial porque está diseñado para no hacerlo. Pero, de nuevo, como no sé cómo Chrome maneja el cambio de pestañas internamente, esto es solo especulación (alimento para pensar).

1

¿Qué tal eso? Suena como un error. Supongo que onresize es escuchado por una combinación de comportamientos, probablemente nuevos datos sobre el tamaño de la página que, por cualquier razón, entra cuando se enfoca una pestaña.

En la versión que uso en Windows, 5.0.375.127, no sucede, pero si realmente cambio el tamaño de la ventana, el evento de cambio de tamaño se dispara dos veces.

Sabiendo que está ahí, puedes dar un paso para vencerlo (que Google debería hacer por ti eventualmente). Envuelva una instrucción if alrededor de su controlador que compruebe si hay un cambio real en clientHeight o clientWidth si necesita que ocurra algo solo si se produce el evento (tal como lo entendemos) en realidad.

1

Desde el bug report:

Al utilizar Herramientas de desarrollo en SplitView y el cambio a una pestaña sin Dev Herramientas abrieron en Split, el cambio de tamaño en eventos serán despedidos.

Por lo tanto, si la siguiente pestaña no tiene el mismo tamaño de ventana, resize() se disparará .

Cuestiones relacionadas