Jak uruchomić XSLT w chrome?

Mam tutaj dokument XML , który jest obsługiwany z odpowiednim plikiem XSL. Transformacja jest pozostawiona do wykonania po stronie klienta, bez JavaScript.

To działa dobrze w IE (shock horror), ale w Google Chrome, po prostu wyświetla węzły tekstowe dokumentu.

Wiem, że można zrobić xsl po stronie Klienta w Chrome, jak widziałem przykłady, ale jeszcze nie jestem w stanie powtórzyć tego sukcesu samodzielnie

Co robię źle?

Author: Eric, 2010-06-05

10 answers

Druga odpowiedź poniżej Erica jest błędna. Deklaracja przestrzeni nazw, o której wspomniał, nie miała nic wspólnego z tym problemem.

Prawdziwym powodem, dla którego nie działa, jest ze względu na obawy dotyczące bezpieczeństwa (por. wydanie 4197, numer 111905 ).

Wyobraź sobie ten scenariusz:

  1. Otrzymasz wiadomość e-mail od atakującego zawierającą stronę internetową jako załącznik, który pobierzesz.

  2. Otwierasz stronę now-local w swoim przeglądarka.

  3. Lokalna strona internetowa tworzy <iframe> , którego źródłem jest https://mail.google.com/mail/.

  4. Ponieważ jesteś zalogowany do Gmaila, ramka ładuje wiadomości w Twojej skrzynce odbiorczej.

  5. Lokalna strona internetowa odczytuje zawartość ramki za pomocą JavaScript, aby uzyskać dostęp do frames[0].document.documentElement.innerHTML. (Strona internetowa nie byłaby w stanie wykonać tego kroku, ponieważ pochodziłaby z pochodzenia spoza Gmaila; polityka tego samego pochodzenia spowodowałaby odczyt do porażka.)

  6. Lokalna strona internetowa umieszcza zawartość twojej skrzynki odbiorczej w <textarea> i przesyła dane za pośrednictwem formularza do serwera www atakującego. Teraz atakujący ma Twoją skrzynkę odbiorczą , która może być przydatna do spamowania lub identyfikacji kradzieży.

Chrome folia powyższy scenariusz przez wprowadzenie ograniczeń na pliki lokalne otwarte za pomocą Chrome. Aby przezwyciężyć te ograniczenia, mamy dwa rozwiązania:

  1. Spróbuj uruchomić Chrome z --allow-file-access-from-files flaga. Nie testowałem tego osobiście, ale jeśli to zadziała, Twój system będzie teraz również podatny na scenariusze tego rodzaju, o których mowa powyżej.

  2. Prześlij go do hosta i problem rozwiązany.

 107
Author: Pacerier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:34

W momencie pisania tego tekstu wystąpił błąd w chrome , który wymagał atrybutu xmlns do uruchomienia renderingu:

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

To był problem, który napotkałem podczas serwowania pliku xml z serwera.


Jeśli w przeciwieństwie do mnie, przeglądasz plik xml z file:/// url, to rozwiązania --allow-file-access-from-files są tymi, które chcesz

 15
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 01:34:58

Miałem ten sam problem na localhost. Bieganie po Internecie w poszukiwaniu odpowiedzi i zgadzam się, że dodawanie --allow-file-access-from-files działa. Pracuję na Macu, więc dla mnie musiałem przejść przez terminal sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files i wprowadzić swoje hasło (jeśli je posiadasz).

Kolejna mała rzecz - nic nie zadziała, chyba że dodasz do swojego .plik xml odniesienie do twojego .plik xsl w następujący sposób <?xml-stylesheet type="text/xsl" href="<path to file>"?>. Kolejna mała rzecz, o której nie wiedziałem od razu - powinieneś otworzyć swój .plik xml w przeglądarce, Nie .xsl.

 5
Author: Setrino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 17:58:44

Problem oparty na Chrome nie dotyczy przestrzeni nazw xml, którą jest xmlns="http://www.w3.org/1999/xhtml". Bez atrybutu namesspace również nie będzie działać z IE.

Ze względu na ograniczenia bezpieczeństwa, musisz dodać flagę --allow-file-access-from-files podczas uruchamiania chrome. Myślę, że użytkownicy Linuksa/*nix mogą to zrobić łatwo przez terminal, ale dla użytkowników windows, musisz otworzyć właściwości skrótu Chrome i dodać go do docelowego miejsca docelowego jako poniżej;

Kliknij Prawym Przyciskiem Myszy - > Properties - > Target

Tutaj wpisz opis obrazka

Oto przykładowa pełna ścieżka z flagami, których używam na moim komputerze;

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

Mam nadzieję, że pokazanie tego krok po kroku pomoże użytkownikom systemu windows w rozwiązaniu problemu, dlatego dodałem ten post.

 4
Author: Levent Divilioglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 16:08:06

Cóż to nie działa jeśli plik XML (zaczynając od standardowego PI:

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

Do odwoływania się do arkusza stylów XSL) jest serwowany jako "application / xml". W takim przypadku Chrome nadal pobierze wspomniany arkusz stylów XSL, ale nic nie zostanie renderowane, ponieważ po cichu zmieni typy dokumentów z "application/xml" na "Document" (!??) i "text / xsl" do "Stylesheet" (!??), a następnie spróbuje renderować dokument XML tak, jakby był dokumentem HTML(5), nie uruchamiając go wcześniej procesor XSLT. I nic w ogóle nie będzie wyświetlane na ekranie (którego zawartość będzie nadal wyświetlać poprzednią stronę, z której strona XML była odwołana, i będzie nadal obracać ikonę, tak jakby dokument nigdy nie został całkowicie załadowany.

Możesz doskonale używać konsoli Chrome, która pokazuje, że wszystkie zasoby są załadowane, ale są nieprawidłowo interpretowane.

Więc tak, Chrome obecnie renderuje tylko pliki XML (z opcjonalną deklaracją wiodącego arkusza stylów XSL), tylko wtedy, gdy jest on obsługiwany jako "text / xml", ale nie jako "application / xml", jak powinien Dla renderowanego po stronie klienta XML z deklaracją XSL.

Dla plików XML serwowanych jako "text/xml" lub "application/xml", które nie zawierają deklaracji arkusza stylów XSL, Chrome powinien nadal używać domyślnego arkusza stylów do renderowania go jako drzewa DOM lub przynajmniej jako źródła tekstu. Ale nie, i tu znowu próbuje renderować to tak, jakby to był HTML, a błędy od razu na wielu skryptach (w tym domyślnym wewnętrzne), które próbują uzyskać dostęp do " dokumentu.body " do obsługi zdarzeń onLoad i wprowadzania do niego obsługi javascript.

Przykład strony, która nie działa zgodnie z oczekiwaniami (dokumentacja Common Lispu) w Chrome, ale działa w IE obsługującym XSLT po stronie klienta:

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

Ta strona indeksu powyżej jest wyświetlana poprawnie, ale wszystkie linki będą prowadzić do dokumentów XML z podstawową deklaracją XSL do istniejący dokument arkusza stylów XSL i można czekać w nieskończoność, myśląc, że rozdziały mają problemy do pobrania. Aby odczytać dokument, wystarczy otworzyć konsolę i odczytać kod źródłowy na karcie Zasoby.

 3
Author: verdy_p,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-17 12:55:17

Z tego co wiem, Chrome szuka nagłówka

Content-Type: text / xml

Potem działa - - - Inne iteracje zawiodły.

Upewnij się, że twój serwer WWW to zapewnia. Wyjaśnia również, dlaczego nie działa w plikach XML file://URI.

 2
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-12 23:53:39

Sprawdź http://www.aranedabienesraices.com.ar

Ta strona jest zbudowana z XML / XSLT client-side. Działa na IE6-7-8, FF, o, Safari i Chrome. Czy poprawnie wysyłasz nagłówki HTTP? Szanujesz politykę tego samego pochodzenia?

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-07 13:17:33

Próbowałem umieścić plik w wwwroot . Tak więc podczas uzyskiwania dostępu do strony w Chrome, jest to Adres localhost / yourpage.xml .

 0
Author: MiddleKay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 09:34:17

To, co mówi Eric, jest poprawne.

W xsl, dla znacznika xsl: stylesheet mają następujące atrybuty

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

Działa dobrze w chrome.

 0
Author: P Subramanian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-07 02:14:55

Zacząłem testować i natrafiłem na problem z zabezpieczeniami lokalnego pliku / Chrome. Bardzo prostym obejściem jest umieszczenie pliku XML i XSL w folderze publicznym Dropbox i uzyskanie linków do obu plików. Umieść link do transformacji XSL w głowicy XML. Użyj łącza XML w Chrome i działa!

 0
Author: Mark Whitener,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 22:14:01