Frage Wie kann ich XSLT in Chrome arbeiten lassen?


Ich habe ein XML-Dokument Hier das ist mit einem entsprechenden serviert XSL-Datei. Die Transformation wird clientseitig ohne JavaScript ausgeführt.

Dies funktioniert in IE (Schock Horror), aber in Google Chrome zeigt nur die Textknoten des Dokuments.

Ich weiß, dass es möglich ist, Client-seitiges XSL in Chrome zu verwenden, wie ich Beispiele davon gesehen habe, aber ich bin noch in der Lage, diesen Erfolg selbst zu replizieren

Was mache ich falsch?


75
2018-06-05 18:25


Ursprung


Antworten:


Die andere Antwort von Eric ist falsch. Die von ihm erwähnte Namespace-Deklaration hatte nichts mit dem Problem zu tun.

Der wahre Grund, warum es nicht funktioniert ist aufgrund von Sicherheitsbedenken (vgl. Problem 4197, Ausgabe 111905).

Stellen Sie sich dieses Szenario vor:

  1. Sie erhalten eine E-Mail-Nachricht von einem Angreifer mit einer Webseite als Anhang, die Sie herunterladen.

  2. Sie öffnen die jetzt lokale Webseite in Ihrem Browser.

  3. Die lokale Webseite erstellt ein <iframe> wessen Quelle ist https://mail.google.com/mail/.

  4. Da Sie bei Google Mail angemeldet sind, lädt der Frame die Nachrichten in Ihrem Posteingang.

  5. Die lokale Webseite liest den Inhalt des Frames mit Hilfe von JavaScript frames[0].document.documentElement.innerHTML. (Eine Onlinewebseite kann diesen Schritt nicht ausführen, da sie nicht von Google Mail stammt. Die Richtlinie für denselben Ursprung würde dazu führen, dass der Lesevorgang fehlschlägt.)

  6. Die lokale Webseite platziert den Inhalt Ihres Posteingangs in ein <textarea> und sendet die Daten über einen Formular-POST an den Webserver des Angreifers. Jetzt Der Angreifer hat deinen Posteingang, die zum Spammen oder zur Identifizierung von Diebstahl nützlich sein können.

Chrome überlagert das obige Szenario durch Einschränkungen für lokale Dateien mit Chrome geöffnet. Um diese Einschränkungen zu überwinden, haben wir zwei Lösungen:

  1. Versuchen Sie Chrome mit dem --allow-file-access-from-files  Flagge. Ich habe das selbst nicht getestet, aber wenn es funktioniert, ist Ihr System jetzt auch anfällig für Szenarien der oben genannten Art.

  2. Laden Sie es auf einen Host hoch, und das Problem wurde behoben.


107
2018-06-06 12:06



Zu der Zeit des Schreibens gab es a Fehler in Chrom was benötigt ein xmlns Attribut um das Rendering auszulösen:

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

Dies war das Problem, mit dem ich beim Bereitstellen der XML-Datei konfrontiert wurde von einem Server.


Wenn nicht wie ich, Sie sehen sich die XML-Datei an von einem file:/// url, dann die Lösungen erwähnen --allow-file-access-from-files sind diejenigen, die Sie wollen


15
2018-06-05 20:14



Ich hatte das gleiche Problem auf localhost. Im Internet surfen auf der Suche nach der Antwort und ich genehmige das Hinzufügen --allow-file-access-from-files funktioniert. Ich arbeite am Mac, also musste ich durch das Terminal gehen sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files und gib dein Passwort ein (falls du eines hast).

Eine andere kleine Sache - nichts wird funktionieren, wenn Sie der .xml-Datei den Verweis auf Ihre .xsl-Datei wie folgt hinzufügen <?xml-stylesheet type="text/xsl" href="<path to file>"?>. Eine andere kleine Sache, die ich nicht sofort erkannt habe - Sie sollten Ihre .xml-Datei im Browser öffnen, nicht die .xsl.


5
2017-12-15 17:38



Das Problem basiert auf Chrom geht es nicht um XML-Namespace welches ist xmlns="http://www.w3.org/1999/xhtml". Ohne das Attribut namespace funktioniert es auch nicht mit IE.

Wegen der Sicherheitseinschränkung müssen Sie das hinzufügen --allow-file-access-from-files Flagge, wenn Sie den Chrom starten. Ich denke, dass Linux / * nix Benutzer dies einfach über das Terminal tun können, aber für Windows Benutzer müssen Sie das öffnen Eigenschaften des Chrome-Verknüpfung und füge es wie unten beschrieben zum Ziel hinzu.

Rechtsklick -> Eigenschaften -> Ziel

enter image description here

Hier ist ein vollständiger Beispielpfad mit den Flags, die ich auf meinem Rechner verwende;

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

Ich hoffe, dass diese Schritt-für-Schritt-Anleitung den Windows-Benutzern hilft, das Problem zu beheben. Deshalb habe ich diesen Beitrag hinzugefügt.


4
2017-07-11 16:08



Nun, es funktioniert nicht, wenn die XML-Datei (beginnend mit dem Standard-PI:

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

zum Referenzieren des XSL Stylesheets) wird als "application / xml" geliefert. In diesem Fall lädt Chrome immer noch das referenzierte XSL-Stylesheet, aber es wird nichts gerendert, da die Dokumenttypen automatisch von "application / xml" in "Document" (! ??) und "text / xsl" in "" geändert werden. Stylesheet "(! ??) und versucht dann, das XML-Dokument so darzustellen, als wäre es ein HTML (5) -Dokument, ohne zuerst seinen XSLT-Prozessor auszuführen. Und überhaupt wird nichts auf dem Bildschirm angezeigt (dessen Inhalt wird weiterhin die vorherige Seite anzeigen, von der die XML-Seite referenziert wurde, und wird das Symbol weiter drehen, als ob das Dokument nie vollständig geladen wäre.

Sie können die Chrome-Konsole perfekt verwenden, die anzeigt, dass alle Ressourcen geladen, aber falsch interpretiert werden.

Also ja, Chrome rendert derzeit nur XML-Dateien (mit seiner optionalen führenden XSL-Stylesheet-Deklaration), nur wenn es als "text / xml" geliefert wird, aber nicht als "application / xml", wie es für clientseitig gerenderten XML mit einem XSL-Deklaration

Für XML-Dateien, die als "text / xml" oder "application / xml" bereitgestellt werden und keine XSL-Stylesheet-Deklaration enthalten, sollte Chrome dennoch ein Standard-Stylesheet verwenden, um es als DOM-Struktur oder zumindest als Textquelle darzustellen. Aber das tut es nicht, und auch hier versucht es, es so darzustellen, als ob es HTML wäre, und Bugs sofort in vielen Skripten (einschließlich eines internen Standard), die versuchen, auf "document.body" zuzugreifen, um onLoad-Ereignisse zu behandeln und etwas Javascript einzufügen Handler darin.

Ein Beispiel für eine Website, die nicht wie erwartet funktioniert (Common Lisp-Dokumentation) in Chrome, aber in IE funktioniert, die clientseitige XSLT unterstützt:

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

Diese Indexseite oben wird korrekt angezeigt, aber alle Links führen zu XML-Dokumenten mit einer grundlegenden XSL-Deklaration zu einem vorhandenen XSL-Stylesheet-Dokument, und Sie können unbegrenzt warten, da Sie denken, dass die Kapitel Probleme beim Herunterladen haben. Sie können die Dokumentation nur lesen, indem Sie die Konsole öffnen und den Quellcode auf der Registerkarte Ressourcen lesen.


3
2018-05-17 12:55



Soweit ich das beurteilen kann, sucht Chrome nach dem Header

Inhaltstyp: text / xml

Dann funktioniert es --- andere Iterationen sind fehlgeschlagen.

Stellen Sie sicher, dass Ihr Webserver dies bereitstellt. Es erklärt auch, warum es für Datei: // URI XML-Dateien fehlschlägt.


2
2018-05-12 23:53



Prüfen http://www.aranedabienesraices.com.ar 

Diese Seite wurde mit XML / XSLT Client-Seite erstellt. Es funktioniert auf IE6-7-8, FF, O, Safari und Chrome. Senden Sie HTTP-Header korrekt? Respektieren Sie die gleiche Herkunftspolitik?


1
2018-06-07 13:17



Ich habe versucht, die Datei in die wwwroot. Wenn Sie also in Chrome auf die Seite zugreifen, ist dies die Adresse localhost / yourpage.xml.


0
2018-03-04 09:34



Was Eric sagt, ist richtig.

In der XSL, für das XSL: Stylesheet-Tag haben die folgenden Attribute

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

Es funktioniert gut in Chrom.


0
2017-12-07 02:14



Ich habe mit dem Testen begonnen und bin in das lokale Datei- / Chrome-Sicherheitsproblem geraten. Eine sehr einfache Problemumgehung besteht darin, die XML- und XSL-Datei beispielsweise in den öffentlichen Dropbox-Ordner zu stellen und Links zu beiden Dateien zu erhalten. Fügen Sie die Verknüpfung zur XSL-Transformation in den XML-Kopf ein. Verwenden Sie den XML-Link in Chrome UND IT-ARBEITEN!


0
2018-01-15 22:14