Como posso fazer o XSLT funcionar no chrome?

Author: Eric, 2010-06-05

10 answers

A outra resposta do Eric está errada. A declaração de namespace que ele mencionou não teve nada a ver com o problema.

A verdadeira razão pela qual não funciona é devido a preocupações de segurança (cf. questão 4197, edição 111905 ).

Imagine este cenário:

  1. Você recebe uma mensagem de E-mail de um atacante contendo uma página web como um anexo, que você descarrega.

  2. Você abre a página web agora-local na sua navegador.

  3. A página web local cria um <iframe> cuja fonte é https://mail.google.com/mail/.

  4. Como você está conectado ao Gmail, a moldura carrega as mensagens em sua caixa de entrada.

  5. A página web local lê o conteúdo da moldura usando JavaScript para acessar frames[0].document.documentElement.innerHTML. (Uma página web on-line não seria capaz de realizar este passo, porque viria de uma origem Não-Gmail; a mesma política de origem faria com que a leitura para falhar.)

  6. A página web local coloca o conteúdo da sua caixa de entrada em um <textarea> e submete os dados através de um formulário POST para o servidor web do atacante. Agora O atacante tem a sua caixa de entrada , que pode ser útil para spamming ou identificar roubo.

O cromado filtra o cenário acima por colocar restrições nos ficheiros locais abertos usando o Chrome. Para superar essas restrições, temos duas soluções:

  1. Tente correr o cromo com o --allow-file-access-from-files bandeira. Eu não testei isso pessoalmente, mas se funcionar, seu sistema agora também será vulnerável a cenários do tipo mencionado acima.

  2. Envia-o para um servidor, e problema resolvido.

 107
Author: Pacerier, 2017-05-23 11:54:34

No momento da escrita, havia um bug no chrome que exigia um atributo xmlns para despoletar a renderização:

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

Este era o problema em que eu estava a correr ao servir o ficheiro xml de um servidor.


Se ao contrário de mim, Você está vendo o arquivo xml a partir de um file:/// url , Então as soluções que mencionam --allow-file-access-from-files são as que você quer

 15
Author: Eric, 2016-07-12 01:34:58
 5
Author: Setrino, 2012-12-15 17:58:44

O problema baseado em Chrome não é sobre o espaço de nomes xml que é xmlns="http://www.w3.org/1999/xhtml". Sem o atributo namesspace, ele não vai funcionar com IE também.

Devido à restrição de segurança, você tem que adicionar a bandeira {[[2]} Quando você iniciar o cromado. Eu acho que os usuários do linux/*nix podem fazer isso facilmente através do terminal, mas para os usuários do windows, você tem que abrir as propriedades do atalho Chrome e adicioná-lo no destino de destino como abaixo;

Botão Direito - > Propriedades - > Alvo

enter image description here

Aqui está um caminho cheio de amostras com as bandeiras que eu uso na minha máquina;

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

Espero que mostrar este passo-a-passo vai ajudar os usuários do windows para o problema, é por isso que eu adicionei este post.

 4
Author: Levent Divilioglu, 2016-07-11 16:08:06

Bem, não funciona se o ficheiro XML (a começar pelo padrão PI:

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

Para referenciar a folha de estilo XSL) é servido como"application/xml". Nesse caso, o Chrome ainda irá baixar a folha de estilo XSL referenciada, mas nada será renderizado, uma vez que irá alterar silenciosamente os tipos de documentos de "application/xml" para "Document" (!??) e "text / xsl" em "Stylesheet" (!??), e então vai tentar renderizar o documento XML como se fosse um documento HTML (5), sem executar primeiro o processador XSLT. E nada será exibido na tela (cujo conteúdo continuará a mostrar a página anterior da qual a página XML foi referenciada, e continuará girando o ícone, como se o documento nunca tivesse sido completamente carregado.

Você pode usar perfeitamente a consola Chrome, que mostra que todos os recursos estão carregados, mas eles são interpretados incorretamente.

Por isso, sim, o Chrome só desenha actualmente ficheiros XML (com a sua 'stylesheet' XSL ' opcional Declaração), apenas se for servido como" text/xml", mas não como" application/xml " como deveria ser para XML renderizado do lado do cliente com uma declaração XSL.

Para os ficheiros XML servidos como" text/xml "ou" application/xml "e que não contenham uma declaração de 'stylesheet' XSL, o Chrome deverá ainda usar uma 'stylesheet' predefinida para o tornar uma árvore DOM, ou pelo menos como a sua fonte de texto. Mas não é, e aqui novamente tenta rendê-lo como se fosse HTML, e bugs imediatamente em muitos scripts (incluindo um padrão interno 1) que tentam acessar ao " documento.corpo " para lidar com eventos onLoad e injetar algum tratador javascript nele.

Um exemplo de site que não funciona como esperado (a documentação comum Lisp) no Chrome, mas funciona no IE que suporta XSLT do lado do cliente:

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

Esta página de índice acima é apresentada correctamente, mas todas as ligações irão conduzir para os documentos XML com uma declaração XSL básica para um documento de stylesheet XSL existente, e você pode esperar indefinidamente, pensando que os capítulos têm problemas a serem baixados. Tudo o que você pode fazer para ler o docuemntation é abrir a consola e ler o código fonte na página Recursos.

 3
Author: verdy_p, 2011-05-17 12:55:17

O mais perto que posso dizer, o Chrome está à procura do cabeçalho

Content-Type: text / xml

Então funciona ... outras iterações falharam.

Certifique-se que o seu servidor web está a fornecer isto. Ele também explica por que ele falha para arquivos XML file://URI.

 2
Author: John, 2011-05-12 23:53:39

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

Este site é construído com o lado cliente XML/XSLT. Funciona em IE6-7-8, FF, o, Safari e cromado. Está a enviar os cabeçalhos HTTP correctamente? Está a respeitar a mesma política de origem?

 1
Author: , 2010-06-07 13:17:33

Tentei colocar o ficheiro na wwwroot . Assim, ao acessar a Página no Chrome, este é o endereço localhost / yourpage.xml .

 0
Author: MiddleKay, 2013-03-04 09:34:17
O que o Eric diz está correcto.

No xsl, para o XSL:a marca stylesheet tem os seguintes atributos

Version= " 1.0 " xmlns: xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"

Funciona bem no cromado.
 0
Author: P Subramanian, 2014-12-07 02:14:55
Comecei a testar isto e encontrei o ficheiro local / problema de segurança cromada. Uma solução muito simples é colocar o arquivo XML e XSL em, digamos, pasta pública Dropbox e obter links para ambos os arquivos. Coloque o link para a transformação XSL na cabeça XML. Use o link XML no Chrome e ele funciona!
 0
Author: Mark Whitener, 2015-01-15 22:14:01