2011-07-27 1468 views
5

Tenemos una aplicación Ruby on Rail que permite al usuario guardar una cantidad de códigos incrustados de video en un modelo de datos. El formulario permite al usuario ingresar cualquier cantidad de códigos insertados, presionar enviar y guardar todo en la base de datos. La aplicación luego redirige al usuario a una página que tiene una lista de todos los códigos incrustados.Video incrustado que no se renderiza en Chrome en la primera carga después de guardarlo en un modelo Rails

Este flujo de trabajo funciona bien para IE, Safari y Firefox.

En Chrome, sin embargo, la primera vez que se carga la página, ninguno de los videos aparece en la página. Veo el siguiente error en la consola, una vez para cada video:

Se negó a ejecutar un script de JavaScript. Código fuente de script encontrado dentro de la solicitud.

En las cargas de página subsiguientes, los videos se cargan bien y ese error no se muestra.

Cuando veo la fuente, la página se vuelve a cargar para la operación de fuente de vista, por lo que no puedo decir si la fuente está llegando como se esperaba.

Cuando Inspeccionar elemento en el bloque en el que el vídeo debe ser, veo lo siguiente:

<iframe src="" width="400" height="225" frameborder="0"> 
    <html> 
    <head></head> 
    <body></body> 
    </html> 
</iframe> 

Esto ocurre tanto para los códigos embed estilo de marco flotante, así como para el código de la etiqueta "viejo estilo" para los videos de YoutTube y Vimeo.

relacionadas:

Respuesta

6

Es la forma en Chrome evita que XSS (cross-site scripting), como su referencia anteriormente.

Cuando envía los códigos incrustados y los redirige a otra página para mostrarlos, Chrome ve que los códigos incrustados enviados (a través de HTTP POST)) y los códigos incrustados respondidos son los mismos, por lo que impide cargarlos y muestra error en la consola.

Cuando actualiza la página, no se envía más HTTP POST (porque la redirigió antes), por lo que debería mostrarse correctamente.

Tengo el mismo problema, y ​​lo resolví recargando automáticamente la página después de que se redirigiera.

+0

De hecho, hay potencialmente un error en Chrome. Sin embargo, no estoy seguro de cuál es el estado del error. –

+1

Estado de error de Chrome: http: // code.google.com/p/chromium/issues/detail?id=98787 –

+1

Una solución del informe de estado de error: agregue 'X-XSS-Protection: 0' al encabezado de respuesta. – nickvane

1

que volver a cargar los marcos flotantes a través de Javascript (jQuery) como workarround ..

Por lo tanto, almacenar la otra parte src causa de cromo se elimina ..

añadí la URL dos veces más src y Src2, y vuelve a cargar luego con src2.

También di todos los iframes que necesitan volver a cargar una clase especial 'webkitIframeHack'.

<script type="text/javascript"> 
$(function(){ 
    if ($.browser.webkit) { 
     $("iframe.webkitIframeHack").each(function(){ 
      $(this).attr('src', $(this).attr('src2')); 
     }); 
    }; 
}); 
</script> 

(no puedo usar HTML5 Data- * atributos, creo que sería más equipada ..)

Cuestiones relacionadas