2010-08-07 18 views
5

Estoy reuniendo algunas páginas de demostración, y una de las cosas que quiero demostrar implica buscar fragmentos de HTML dinámicamente con el procesamiento posterior. código jQuery sencilla por lo tanto tengo la siguiente manera:Accediendo a las URL relativas a través de "ajax" desde "file: //" contenido

$('#target').load('./content_fragment.html', function() { 
    $(this).doSomething(); 
}); 

estoy haciendo todo esto desde file: // URL porque todo es parte de una presentación que (tal vez) ejecutar desde una unidad flash o una alguna cosa. Por lo tanto, "content_fragment.html" es simplemente otro archivo local, al igual que la página principal que contiene ese código.

Ahora todo esto funciona muy bien desde Firefox o Safari, y otros usos de URL relativos funcionan bien en Chrome (iframe URL "src", imágenes, secuencias de comandos, css, etc), pero Chrome simplemente no va a pagar atención a esas solicitudes ".load()". Si cierro el contenido y lo despliego en un servidor web, y luego lo consigo a través de su URL "http:", entonces Chrome funciona bien. Cuando no funciona, no veo ningún error en la consola de Chrome; simplemente no busca el contenido. Lo probé con Chrome en Linux y XP, con resultados idénticos. (Y Safari o Firefox al mismo archivo: // Las URL siempre hacen lo que espero y cargan el contenido.)

Así que mi pregunta es, ¿esta rareza es solo una peculiaridad de Chrome, o hay algo inherentemente cuestionable sobre XMLHttpRequests y file: // URLs? En otras palabras, ¿Chrome está haciendo lo derecho, lo que significa que los otros navegadores están rotos?

+0

Es por seguridad, no quiere que el código malvado vaya a su HD. – tcooc

Respuesta

12

Puede añadir --allow-file-access-from-files a la línea de comandos al iniciar Chrome para desactivar esta característica de seguridad :)

¿Es un error? Tal vez, tal vez no, lo que está sucediendo es que no trata file:// como un único dominio, las solicitudes a un archivo diferente se tratan como un dominio diferente y, por lo tanto, están bloqueadas por el SOP rules. Es una elección de los desarrolladores de Chrome/Chromium, supongo que si es la correcta depende de tu punto de vista.

Hay mucha discusión sobre esto en la sección de problemas de Chrome en el código de Google, puede encontrar la discusión de interés, here y here.

+1

Eres una increíble fuente de conocimiento. ¡Gracias! Hice algunos google pero no pude encontrar nada relevante. Estoy de acuerdo en que si esto es "correcto" o "incorrecto" es una cuestión de opinión, y siempre que pueda controlar el comportamiento no me importa :-) – Pointy

1

tenían el mismo problema en Safari + Firefox:

La alerta en el código de abajo no se ejecuta:

$ .getScript ('script.js', function() {alert ("script cargado y ejecutado. ");})

Cargando un archivo externo en lugar de script.js se ejecutará.

Cuestiones relacionadas