2009-02-27 15 views
8

Tengo la siguiente javascript llamada para solicitar un enfoque cuando se carga la página.Problema de foco de objeto con los navegadores de Chrome y Safari

Este código funciona 100% OK con Firefox e IE7, pero Chrome y Safari no parecen mover el foco en absoluto. ¿Cómo hacer que funcione con todos los navegadores?

document.getElementById("MyFlashFile").focus(); 
+0

Esto todavía no está funcionando en la versión actual de Chrome para Windows (versión 28.0.1500.72 m) ninguna de las soluciones provisionales funciona bien. – Josh

Respuesta

0

asegurar que este código está siendo llamado después de la página entera ha sido prestado. Probablemente se llame por encima del código HTML al que hace referencia, por lo que el elemento aún no existirá.

Varios frameworks de JavaScript tienen utilidades para decirle cuando el DOM is ready.

4

Lamentablemente, no hay forma de asegurarse de que puede establecer el foco en un archivo flash que funcione en todos los navegadores. IE y Firefox han resuelto este problema (en su mayor parte), pero Chrome y Safari están basados ​​en Webkit, que no tiene solución.

Si alguna vez nota en YouTube u otro sitio de video/flash que lo primero que ve es algo que lo atraiga a hacer clic en el reproductor, eso se debe a este problema.

Un desarrollador propuso una solución inteligente, pero implica la incorporación de algo de ActionScript en su archivo flash, esto puede ser una molestia si está construyendo un reproductor genérico.

Gary Bishop: Fixing Firefox Flash Foolishness

Otro tipo de solución es configurar el embed a opaco. He escuchado que esto funciona en algunas situaciones, pero arruinará cursores en áreas de texto. Tampoco he tenido mucha suerte con esto, pero puedes intentarlo.

Puede encontrar más información sobre el error de no foco en bugzilla.

+0

Adam, consulta la solución de Cláudio Silva a continuación. Funcionó para mí :). – Anvaka

4

Parece que hay un error en Chrome: "window.document.getElementById ('swfID') de enfoque() no funciona para objetos flash"

http://code.google.com/p/chromium/issues/detail?id=27868

I' he intentado encontrar una solución, pero yo no era capaz de encontrar uno; (

Saludos, cristiano

16

Se Me llevó horas buscar en Internet, pero finalmente encontré una solución que funciona en las últimas versiones de IE, Firefox, Chrome y Safari. El siguiente código resuelve el problema para siempre:

<head> 
    <script type="text/javascript" src="swfobject.js"></script> 
    <script> 
    function setFocusOnFlash() { 
     var f=swfobject.getObjectById('myFlashObjectId'); 
     if (f) { f.tabIndex = 0; f.focus(); } 
    } 
    </script> 
</head> 
<body onload="setFocusOnFlash()"> 

este ejemplo se supone que el flash está incrustado usando la biblioteca SWFObject. De lo contrario, debe establecer la variable f en la etiqueta Object o Embed que contiene la película flash.

Editado el 5 de mayo 2012: Bueno, por desgracia, parece que la tabIndex solución ya no funciona para todas las combinaciones de navegador (Chrome/Safari) y el sistema operativo. Por ejemplo, actualmente falla Chrome 18 en Windows.

Consulte el enlace a continuación, proporcionado por Christian Junk, para obtener el estado de la resolución del problema.

+0

Esto no funciona para mí. ¿Cuál es la ID especificada para getObjectById()? La ID proporcionada a swfObject a través de attributes.id o el segundo argumento de la llamada swfobject.embedSWF()? – BadmintonCat

+0

Silva ¡Su solución es increíble! He estado buscando una solución a este problema para MESES. Finalmente lo encontré. Gracias por la publicacion. -Chris – cnanders

+0

También no funciona para mí. Como prueba, intenté poner una alerta en la declaración 'if'. La alerta sí se muestra, pero el flash no está enfocado. También intenté crear una página simple con solo un cuadro de texto (sin flash), y estableciendo el foco en ese cuadro de texto, que DID trabajó allí, pero no para la página flash. También intenté usar 'document.getElementById' en lugar de' swfobject.getObjectById', que aún tenía el mismo resultado. Así que parece que hay algo más que está mal, ya que sabemos que la función 'focus()' funciona y se llama a IS. Todo esto funciona con IE y FF, pero no para Chrome o Safari. ¿Alguna sugerencia? – Travesty3

1

Además de Cláudio Silva respuesta, debe configurar wmode="opaque"

Cuestiones relacionadas