Pertanyaan Bagaimana saya bisa membuat XSLT berfungsi di chrome?


Saya memiliki dokumen XML sini yang disajikan dengan yang sesuai File XSL. Transformasi dibiarkan dijalankan di sisi klien, tanpa JavaScript.

Ini berfungsi dengan baik di IE (shock horror), tetapi di Google Chrome, hanya menampilkan node teks dokumen.

Saya tahu bahwa adalah mungkin untuk melakukan XSL sisi klien di Chrome, karena saya telah melihat contohnya, tetapi saya belum dapat mereplikasi keberhasilan ini sendiri

Apa yang saya lakukan salah?


75
2018-06-05 18:25


asal


Jawaban:


Jawaban lain di bawah ini oleh Eric salah. Pernyataan ruang nama yang dia sebutkan tidak ada hubungannya dengan masalah ini.

Alasan sebenarnya tidak berhasil adalah karena masalah keamanan (lih. masalah 4197, masalah 111905).

Bayangkan skenario ini:

  1. Anda menerima pesan email dari penyerang yang berisi halaman web sebagai lampiran, yang Anda unduh.

  2. Anda membuka halaman web sekarang-lokal di browser Anda.

  3. Halaman web lokal membuat <iframe> sumber siapa https://mail.google.com/mail/.

  4. Karena Anda masuk ke Gmail, bingkai memuat pesan di kotak masuk Anda.

  5. Halaman web lokal membaca isi frame dengan menggunakan JavaScript untuk mengakses frames[0].document.documentElement.innerHTML. (Halaman web online tidak akan bisa melakukan langkah ini karena berasal dari sumber non-Gmail; kebijakan asal yang sama akan menyebabkan pembacaan gagal.)

  6. Halaman web lokal menempatkan isi kotak masuk Anda ke dalam <textarea> dan mengirimkan data melalui formulir POST ke server web penyerang. Sekarang penyerang memiliki kotak masuk Anda, yang mungkin berguna untuk melakukan spam atau mengidentifikasi pencurian.

Chrome menggagalkan skenario di atas dengan menempatkan pembatasan pada file lokal dibuka menggunakan Chrome. Untuk mengatasi pembatasan ini, kami punya dua solusi:

  1. Coba jalankan Chrome dengan --allow-file-access-from-files  bendera. Saya belum menguji ini sendiri, tetapi jika berhasil, sistem Anda sekarang juga akan rentan terhadap skenario jenis yang disebutkan di atas.

  2. Unggah ke host, dan masalah dipecahkan.


107
2018-06-06 12:06



Pada saat penulisan, ada a bug di chrome yang membutuhkan sebuah xmlns atribut untuk memicu render:

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

Ini adalah masalah yang saya hadapi ketika melayani file xml dari server.


Jika tidak seperti saya, Anda sedang melihat file xml dari file:/// url, maka solusinya disebut --allow-file-access-from-files adalah yang kamu inginkan


15
2018-06-05 20:14



Saya memiliki masalah yang sama di localhost. Berlari di Internet mencari jawabannya dan saya menyetujui penambahan itu --allow-file-access-from-files bekerja. Saya bekerja di Mac, jadi bagi saya saya harus melalui terminal sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files dan masukkan kata sandi Anda (jika ada).

Hal kecil lainnya - tidak ada yang akan berfungsi kecuali Anda menambahkan ke file .xml referensi ke file .xsl Anda sebagai berikut <?xml-stylesheet type="text/xsl" href="<path to file>"?>. Hal kecil lainnya yang saya tidak sadari dengan segera - Anda harus membuka file .xml Anda di browser, tidak .xsl.


5
2017-12-15 17:38



Masalahnya berdasarkan Chrome bukan tentang xml namespace yang mana xmlns="http://www.w3.org/1999/xhtml". Tanpa atribut namesspace, itu tidak akan bekerja dengan IE.

Karena pembatasan keamanan, Anda harus menambahkan --allow-file-access-from-files bendera saat Anda memulai chrome. Saya pikir pengguna linux / * nix dapat melakukannya dengan mudah melalui terminal tetapi untuk pengguna windows, Anda harus membuka properti dari Pintasan Chrome dan tambahkan di tujuan target seperti di bawah ini;

Klik kanan -> Properties -> Target

enter image description here

Berikut ini contoh jalur lengkap dengan bendera yang saya gunakan di komputer saya;

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

Saya harap menunjukkan langkah-demi-langkah ini akan membantu pengguna Windows untuk masalah ini, inilah mengapa saya telah menambahkan posting ini.


4
2017-07-11 16:08



Yah itu tidak berfungsi jika file XML (dimulai oleh standar PI:

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

untuk referensi stylesheet XSL) disajikan sebagai "application / xml". Dalam hal ini, Chrome akan tetap mengunduh stylesheet XSL yang direferensikan, tetapi tidak akan ada yang dirender, karena secara diam-diam akan mengubah jenis dokumen dari "application / xml" menjadi "Document" (! ??) dan "text / xsl" menjadi " Stylesheet "(! ??), dan kemudian akan berusaha merender dokumen XML seolah-olah itu adalah dokumen HTML (5), tanpa menjalankan terlebih dahulu prosesor XSLT-nya. Dan Tidak ada sama sekali yang akan ditampilkan di layar (yang kontennya akan terus menampilkan halaman sebelumnya dari mana halaman XML direferensikan, dan akan terus berputar ikon, seolah-olah dokumen itu tidak pernah benar-benar dimuat.

Anda dapat menggunakan konsol Chrome dengan sempurna, yang menunjukkan bahwa semua sumber daya dimuat, tetapi tidak diartikan dengan benar.

Jadi ya, Chrome saat ini hanya merender file XML (dengan deklarasi stylesheet XSL terkemuka), hanya jika disajikan sebagai "teks / xml", tetapi tidak sebagai "aplikasi / xml" sebagaimana mestinya untuk XML sisi klien yang diberikan dengan Deklarasi XSL.

Untuk file XML yang berfungsi sebagai "teks / xml" atau "aplikasi / xml" dan yang tidak berisi deklarasi stylesheet XSL, Chrome harus tetap menggunakan stylesheet default untuk menjadikannya sebagai pohon DOM, atau setidaknya sebagai sumber teksnya. Tapi itu tidak, dan di sini lagi itu mencoba untuk membuatnya seolah-olah itu adalah HTML, dan bug segera pada banyak skrip (termasuk yang internal default) yang mencoba untuk mengakses ke "document.body" untuk menangani kejadian onLoad dan menyuntikkan beberapa javascript pawang di dalamnya.

Contoh situs yang tidak berfungsi seperti yang diharapkan (dokumentasi Common Lisp) di Chrome, tetapi berfungsi di IE yang mendukung XSLT sisi klien:

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

Halaman indeks ini di atas ditampilkan dengan benar, tetapi semua tautan akan mengarahkan ke dokumen XML dengan deklarasi XSL dasar ke dokumen stylesheet XSL yang sudah ada, dan Anda dapat menunggu tanpa batas waktu, sambil berpikir bahwa bab-bab tersebut memiliki masalah untuk diunduh. Yang dapat Anda lakukan untuk membaca dokumentasi adalah membuka konsol dan membaca kode sumber di tab Sumber.


3
2018-05-17 12:55



Sedekat yang saya tahu, Chrome mencari tajuk

Content-Type: text / xml

Kemudian ia bekerja --- iterasi lain gagal.

Pastikan server web Anda menyediakan ini. Ini juga menjelaskan mengapa gagal untuk file: // file xml URI.


2
2018-05-12 23:53



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

Situs ini dibangun dengan sisi klien XML / XSLT. Ini berfungsi pada IE6-7-8, FF, O, Safari, dan Chrome. Apakah Anda mengirim tajuk HTTP dengan benar? Apakah Anda menghormati kebijakan asal yang sama?


1
2018-06-07 13:17



Saya mencoba meletakkan file di wwwroot. Jadi ketika mengakses halaman di Chrome, ini adalah alamatnya localhost / yourpage.xml.


0
2018-03-04 09:34



Apa yang dikatakan Eric benar.

Di xsl, untuk xsl: tag stylesheet memiliki atribut berikut

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

Ini berfungsi dengan baik di krom.


0
2017-12-07 02:14