Pregunta ¿Cómo puedo hacer que XSLT funcione en Chrome?


Tengo un documento XML aquí que se sirve con un correspondiente Archivo XSL. La transformación se deja para que se ejecute en el lado del cliente, sin JavaScript.

Esto funciona bien en IE (shock horror), pero en Google Chrome, simplemente muestra los nodos de texto del documento.

Sé que es posible hacer XSL del lado del cliente en Chrome, como he visto ejemplos de él, pero aún no he podido replicar este éxito yo mismo

¿Qué estoy haciendo mal?


75
2018-06-05 18:25


origen


Respuestas:


La otra respuesta a continuación por Eric es incorrecta. La declaración del espacio de nombres que mencionó no tuvo nada que ver con el problema.

La verdadera razón por la que no funciona es debido a preocupaciones de seguridad (cf. número 4197, número 111905)

Imagina este escenario:

  1. Recibe un mensaje de correo electrónico de un atacante que contiene una página web como archivo adjunto, que descarga.

  2. Abre la página web ahora local en su navegador.

  3. La página web local crea un <iframe> cuya fuente es https://mail.google.com/mail/.

  4. Como ha iniciado sesión en Gmail, el marco carga los mensajes en su bandeja de entrada.

  5. La página web local lee los contenidos del marco utilizando JavaScript para acceder frames[0].document.documentElement.innerHTML. (Una página web en línea no podría realizar este paso porque vendría de un origen que no es de Gmail, la misma política de origen haría que fallara la lectura).

  6. La página web local coloca los contenidos de su bandeja de entrada en un <textarea> y envía los datos a través de un formulario POST al servidor web del atacante. Ahora el atacante tiene tu bandeja de entrada, que puede ser útil para enviar spam o identificar robos.

Chrome frustra el escenario anterior por poner restricciones en los archivos locales abierto usando Chrome. Para superar estas restricciones, tenemos dos soluciones:

  1. Intenta ejecutar Chrome con el --allow-file-access-from-files  bandera. No lo he probado yo mismo, pero si funciona, su sistema ahora también será vulnerable a los escenarios del tipo mencionado anteriormente.

  2. Subirlo a un host, y el problema resuelto.


107
2018-06-06 12:06



En el momento de escribir, había un error en cromo que requería una xmlns atributo para activar la representación:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >

Este era el problema que me estaba encontrando al servir el archivo xml de un servidor.


Si a diferencia de mí, estás viendo el archivo xml a partir de una file:/// url, entonces las soluciones que mencionan --allow-file-access-from-files son los que quieres


15
2018-06-05 20:14



Tuve el mismo problema en localhost. Corriendo por Internet buscando la respuesta y apruebo esa adición --allow-file-access-from-files trabajos. Trabajo en Mac, así que para mí tuve que pasar por la terminal sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files e ingrese su contraseña (si tiene una).

Otra cosa pequeña: nada funcionará a menos que agregue a su archivo .xml la referencia a su archivo .xsl de la siguiente manera <?xml-stylesheet type="text/xsl" href="<path to file>"?>. Otra pequeña cosa de la que no me di cuenta de inmediato: debería abrir su archivo .xml en el navegador, no el .xsl.


5
2017-12-15 17:38



El problema basado en Cromo no se trata de la espacio de nombres xml cual es xmlns="http://www.w3.org/1999/xhtml". Sin el atributo namespace, tampoco funcionará con IE.

Debido a la restricción de seguridad, debe agregar el --allow-file-access-from-files bandera cuando comienzas el cromo. Creo que los usuarios de linux / * nix pueden hacerlo fácilmente a través del terminal, pero para los usuarios de Windows, deben abrir el propiedades del Accesos directos de Chrome y agréguelo al destino deseado como se muestra a continuación;

Click derecho -> Propiedades -> Target

enter image description here

Aquí hay una ruta completa de muestra con las banderas que uso en mi máquina;

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

Espero que mostrar este paso paso a paso ayude a los usuarios de Windows a resolver el problema, esta es la razón por la que agregué esta publicación.


4
2017-07-11 16:08



Bueno, no funciona si el archivo XML (comenzando por el PI estándar:

<?xml-stylesheet type="text/xsl" href="..."?>

para hacer referencia a la hoja de estilos XSL) se sirve como "aplicación / xml". En ese caso, Chrome seguirá descargando la hoja de estilo XSL referenciada, pero no se procesará nada, ya que cambiará silenciosamente los tipos de documento de "application / xml" a "Document" (! ??) y "text / xsl" a " Stylesheet "(! ??), y luego intentará procesar el documento XML como si fuera un documento HTML (5), sin ejecutar primero su procesador XSLT. Y Nada se mostrará en la pantalla (cuyo contenido continuará mostrando la página anterior desde la que se hizo referencia a la página XML, y continuará girando el ícono, como si el documento nunca se hubiera cargado por completo).

Puede usar perfectamente la consola de Chrome, que muestra que todos los recursos están cargados, pero se interpretan incorrectamente.

Así que sí, Chrome actualmente solo renderiza archivos XML (con su declaración de hoja de estilo XSL principal opcional), solo si se sirve como "texto / xml", pero no como "aplicación / xml" como debería para el XML renderizado del lado del cliente con un Declaración XSL.

Para los archivos XML servidos como "texto / xml" o "aplicación / xml" y que no contienen una declaración de hoja de estilo XSL, Chrome aún debe usar una hoja de estilo predeterminada para representarlo como un árbol DOM, o al menos como su fuente de texto. Pero no es así, y una vez más intenta renderizarlo como si fuera HTML, y bugs inmediatamente en muchos scripts (incluido uno interno predeterminado) que intentan acceder a "document.body" para manejar eventos onLoad e inyectar algunos javascript controlador en ello.

Un ejemplo de sitio que no funciona como se esperaba (la documentación de Common Lisp) en Chrome, pero funciona en IE que admite XSLT del lado del cliente:

http://common-lisp.net/project/bknr/static/lmman/toc.html

Esta página de índice de arriba se muestra correctamente, pero todos los enlaces conducirán a documentos XML con una declaración XSL básica a un documento de hoja de estilo XSL existente, y puede esperar indefinidamente, pensando que los capítulos tienen problemas para descargarse. Todo lo que puede hacer para leer la documentación es abrir la consola y leer el código fuente en la pestaña Recursos.


3
2018-05-17 12:55



Lo más cerca que puedo decir, Chrome está buscando el encabezado

Tipo de contenido: texto / xml

Entonces funciona --- otras iteraciones han fallado.

Asegúrese de que su servidor web esté proporcionando esto. También explica por qué falla para file: // URI xml files.


2
2018-05-12 23:53



Comprobar http://www.aranedabienesraices.com.ar 

Este sitio está construido con XML / XSLT del lado del cliente. Funciona en IE6-7-8, FF, O, Safari y Chrome. ¿Estás enviando encabezados HTTP correctamente? ¿Estás respetando la misma política de origen?


1
2018-06-07 13:17



Traté de poner el archivo en el wwwroot. Entonces, cuando se accede a la página en Chrome, esta es la dirección localhost / yourpage.xml.


0
2018-03-04 09:34