Saya memiliki dokumen XML di sini yang disajikan dengan file XSL yang sesuai . Transformasi dibiarkan dijalankan di sisi klien, tanpa JavaScript.
Ini berfungsi dengan baik di IE (horor kejutan), tetapi di Google Chrome, hanya menampilkan node teks dokumen.
Saya tahu bahwa XSL sisi klien dapat dilakukan di Chrome, seperti yang telah saya lihat contohnya, tetapi saya belum dapat mereplikasi kesuksesan ini sendiri
Apa yang saya lakukan salah?
xslt
google-chrome
Eric
sumber
sumber
Jawaban:
Jawaban lain di bawah ini oleh Eric salah. Deklarasi namespace yang dia sebutkan tidak ada hubungannya dengan masalah tersebut.
Alasan sebenarnya mengapa ini tidak berfungsi adalah karena masalah keamanan (lih. Masalah 4197 , masalah 111905 ).
Bayangkan skenario ini:
Anda menerima pesan email dari penyerang yang berisi halaman web sebagai lampiran, yang Anda unduh.
Anda membuka halaman web sekarang-lokal di browser Anda.
Halaman web lokal membuat
<iframe>
yang sumbernya adalah https://mail.google.com/mail/ .Karena Anda masuk ke Gmail, bingkai memuat pesan di kotak masuk Anda.
Halaman web lokal membaca konten frame dengan menggunakan JavaScript untuk mengakses
frames[0].document.documentElement.innerHTML
. (Halaman web online tidak dapat melakukan langkah ini karena berasal dari sumber non-Gmail; kebijakan asal yang sama akan menyebabkan kegagalan pembacaan.)Halaman web lokal menempatkan konten 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 mengirim spam atau mengidentifikasi pencurian.Chrome menggagalkan skenario di atas dengan membatasi file lokal yang dibuka menggunakan Chrome. Untuk mengatasi batasan ini, kami punya dua solusi:
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 seperti yang disebutkan di atas.Unggah ke host, dan masalah terpecahkan.
sumber
xmlns
atribut. Ini mungkin telah berubah di versi chrome yang lebih baru.--allow-file-access-from-files
berfungsi dengan baik.Pada saat penulisan, ada bug di chrome yang membutuhkan
xmlns
atribut untuk memicu rendering:<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >
Ini adalah masalah yang saya hadapi saat menyajikan file xml dari server .
Jika tidak seperti saya, Anda melihat file xml dari
file:///
url , maka solusi yang disebutkan--allow-file-access-from-files
adalah yang Anda inginkansumber
Masalah berdasarkan Chrome bukan tentang namespace xml yang
xmlns="http://www.w3.org/1999/xhtml"
. Tanpa atribut namesspace, itu juga tidak akan berfungsi dengan IE.Karena batasan keamanan, Anda harus menambahkan
--allow-file-access-from-files
bendera saat Anda memulai chrome. Saya pikir linux / * nix pengguna dapat melakukannya dengan mudah melalui terminal tapi untuk pengguna windows, Anda harus membuka sifat dari shortcut Chrome dan menambahkannya dalam tujuan target sebagai berikut;Klik Kanan -> Properties -> Target
Berikut adalah contoh path lengkap dengan flag yang saya gunakan di mesin saya;
Saya harap menampilkan langkah demi langkah ini akan membantu pengguna windows untuk masalah ini, inilah mengapa saya menambahkan posting ini.
sumber
Saya memiliki masalah yang sama di localhost. Berkeliaran di Internet mencari jawabannya dan saya setuju bahwa menambahkan
--allow-file-access-from-files
bekerja. Saya bekerja di Mac, jadi bagi saya, saya harus melalui terminalsudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
dan memasukkan kata sandi Anda (jika Anda punya).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 tidak segera saya sadari - Anda harus membuka file .xml di browser, bukan .xsl.sumber
Yah itu tidak berfungsi jika file XML (dimulai dengan PI standar:
<?xml-stylesheet type="text/xsl" href="..."?>
untuk mereferensikan lembar gaya XSL) disajikan sebagai "application / xml". Dalam hal ini, Chrome masih akan mengunduh lembar gaya XSL yang direferensikan, tetapi tidak ada yang akan dirender, karena Chrome akan diam-diam mengubah jenis dokumen dari "application / xml" menjadi "Document" (! ??) dan "text / xsl" menjadi " Stylesheet "(! ??), dan kemudian akan mencoba untuk membuat dokumen XML seolah-olah itu adalah dokumen HTML (5), tanpa menjalankan prosesor XSLT-nya terlebih dahulu. Dan Tidak ada sama sekali yang akan ditampilkan di layar (yang isinya akan terus menampilkan halaman sebelumnya dari mana halaman XML direferensikan, dan akan terus memutar ikon, seolah-olah dokumen tidak pernah dimuat sepenuhnya.
Anda dapat menggunakan konsol Chrome dengan sempurna, yang menunjukkan bahwa semua sumber daya dimuat, tetapi mereka salah ditafsirkan.
Jadi ya, Chrome saat ini hanya merender file XML (dengan deklarasi lembar gaya XSL terdepan opsional), hanya jika disajikan sebagai "text / xml", tetapi tidak sebagai "application / xml" seperti yang seharusnya untuk XML yang dirender sisi klien dengan Deklarasi XSL.
Untuk file XML yang disajikan sebagai "teks / xml" atau "aplikasi / xml" dan tidak berisi deklarasi lembar gaya XSL, Chrome harus tetap menggunakan lembar gaya default untuk merendernya sebagai pohon DOM, atau setidaknya sebagai sumber teksnya. Tetapi tidak, dan di sini lagi mencoba untuk membuatnya seolah-olah itu HTML, dan bug langsung pada banyak skrip (termasuk yang internal default) yang mencoba 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 di atas ditampilkan dengan benar, tetapi semua tautan akan diarahkan ke dokumen XML dengan deklarasi XSL dasar ke dokumen lembar gaya XSL yang ada, dan Anda dapat menunggu tanpa batas waktu, karena mengira bab-bab tersebut memiliki masalah untuk diunduh. Yang dapat Anda lakukan untuk membaca dokumen ini adalah membuka konsol dan membaca kode sumber di tab Resources.
sumber
Sejauh yang saya tahu, Chrome sedang mencari header
Jenis Konten: teks / xml
Kemudian berhasil --- iterasi lain gagal.
Pastikan server web Anda menyediakan ini. Ini juga menjelaskan mengapa gagal untuk file: // URI xml files.
sumber
Kunjungi http://www.aranedabienesraices.com.ar
Situs ini dibuat dengan sisi klien XML / XSLT. Ia bekerja di IE6-7-8, FF, O, Safari dan Chrome. Apakah Anda mengirim header HTTP dengan benar? Apakah Anda menghormati kebijakan asal yang sama?
sumber
xmlns
atribut.Saya mencoba meletakkan file di wwwroot . Jadi saat mengakses halaman di Chrome, ini adalah alamat localhost / yourpage.xml .
sumber
Apa yang Eric katakan 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.
sumber
Saya mulai menguji ini dan menemukan file lokal / masalah keamanan Chrome. Solusi yang sangat sederhana adalah meletakkan file XML dan XSL di, katakanlah, folder publik Dropbox dan dapatkan tautan ke kedua file tersebut. Letakkan link ke transformasi XSL di kepala XML. Gunakan tautan XML di Chrome DAN BERHASIL!
sumber
Setelah 8 tahun situasinya berubah sedikit.
Saya tidak dapat membuka sesi baru Google Chrome tanpa parameter lain dan mengizinkan skema 'file:'.
Di macOS saya melakukan:
Tanpa argumen ini saya tidak dapat menguji stylesheet XSL di lokal.
sumber