Как я могу заставить XSLT работать в chrome?

У меня есть XML-документ здесь это подается с соответствующим xsl-файл. Преобразование остается для выполнения на стороне клиента без JavaScript.

Это отлично работает в IE (shock horror), но в Google Chrome просто отображает текстовые узлы документа.

Я знаю, что можно сделать xsl на стороне клиента в Chrome, как я видел примеры этого, но я еще не могу повторить этот успех сам

Что я делаю не так?

10 ответов


другой ответ ниже Эрика ошибочен. Объявление пространства имен, которое он упомянул, не имело ничего общего с проблемой.

реальная причина, по которой он не работает, это из-за проблем безопасности (ср. МФ. вопрос 4197, вопрос 111905).

представьте себе такой сценарий:

  1. вы получаете сообщение электронной почты от злоумышленника, содержащее веб-страницу в качестве вложения, которое вы скачать.

  2. откройте теперь локальную веб-страницу в браузере.

  3. локальная веб-страница создает <iframe> чей источник https://mail.google.com/mail/.

  4. поскольку вы вошли в Gmail, фрейм загружает сообщения в папку "Входящие".

  5. локальная веб-страница считывает содержимое фрейма с помощью JavaScript для доступа frames[0].document.documentElement.innerHTML. (Интернет-страница не будет можно выполнить этот шаг, потому что он будет исходить из источника, отличного от Gmail; политика того же источника приведет к сбою чтения.)

  6. локальная веб-страница помещает содержимое вашего почтового ящика в <textarea> и отправляет данные через сообщение формы на веб-сервер злоумышленника. Теперь у злоумышленника есть ваш почтовый ящик, что может быть полезно для спама или выявления кражи.

Chrome фольгирует вышеуказанный сценарий putting ограничения на локальные файлы открыть с помощью Chrome. Чтобы преодолеть эти ограничения, у нас есть два решения:

  1. попробуйте запустить Chrome с помощью --allow-file-access-from-files флаг. Я не тестировал это сам, но если это сработает, ваша система также будет уязвима для сценариев, упомянутых выше.

  2. загрузить его на хост, и проблема решена.


на момент написания было!--5-->ошибка в chrome которых требуется xmlns атрибут для запуска рендеринга:

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

Это была проблема, с которой я столкнулся при обслуживании xml-файла С сервера.


если в отличие от меня, вы просматриваете xml-файл С file:/// URL-адресом, то решений упомянув --allow-file-access-from-files являются те, которые вы хотите


у меня была такая же проблема на localhost. Бегая по Интернету в поисках ответа, и я одобряю это добавление --allow-file-access-from-files строительство. Я работаю на Mac, поэтому для меня мне пришлось пройти терминал sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files и введите свой пароль (если он у вас есть).

еще одна мелочь-ничего не будет работать, если вы не добавите к своему .xml-файл ссылка на ваш .xsl-файл следующим образом <?xml-stylesheet type="text/xsl" href="<path to file>"?>. Еще одна маленькая вещь, которую я не сразу понял - вы должны открыть свой .XML-файл в браузере, нет .элемент xsl.


задачи Chrome не про пространство имен xml что это xmlns="http://www.w3.org/1999/xhtml". Без атрибута namesspace он также не будет работать с IE.

из-за ограничения безопасности, вы должны добавить --allow-file-access-from-files флаг при запуске chrome. Я думаю, что пользователи linux/*nix могут легко сделать это через терминал, но для пользователей windows вам нужно открыть свойства на Chrome shortcut и добавьте его в цель пунктом ниже;

Щелкните Правой Кнопкой Мыши - > Свойства - > Target

enter image description here

вот пример полного пути с флагами, которые я использую на своей машине;

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

Я надеюсь, что этот шаг за шагом поможет пользователям windows для этой проблемы, поэтому я добавил этот пост.


Ну это не работает, если XML-файл (начиная со стандартного PI:

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

для ссылки на таблицу стилей XSL) используется как "application / xml". В этом случае Chrome по-прежнему будет загружать ссылочную таблицу стилей XSL, но ничего не будет отображаться, так как она будет молча изменять типы документов из "application/xml" в "Document" (!??) и "text / xsl" в "таблицу стилей" (!??), а затем попытается отобразить XML-документ, как если бы это был документ HTML(5), без запуск первого процессора XSLT. И ничего вообще не будет отображаться на экране (содержимое которого будет продолжать показывать предыдущую страницу, с которой ссылалась страница XML, и будет продолжать вращать значок, как будто документ никогда не был полностью загружен.

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

Итак, да, Chrome в настоящее время отображает только XML-файлы (с дополнительным ведущим XSL объявление таблицы стилей), только если оно подается как "text/xml", но не как "application/xml", как это должно быть для XML на стороне клиента с объявлением XSL.

для XML-файлов, обслуживаемых как "text / xml" или "application/xml" и не содержащих объявление таблицы стилей XSL, Chrome все равно должен использовать таблицу стилей по умолчанию для отображения ее в виде дерева DOM или, по крайней мере, в качестве источника текста. Но это не так, и здесь снова он пытается отобразить его, как если бы это был HTML, и ошибки сразу на многих скрипты (включая внутренний по умолчанию), которые пытаются получить доступ к " документу.тело " для обработки событий onLoad и внедрения в него некоторого обработчика javascript.

пример сайта, который работает не так, как ожидалось (общая документация Lisp) в Chrome, но работает в IE, который поддерживает клиентскую сторону XSLT:

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

эта страница индекса выше отображается правильно, но все ссылки будут XML-документы с базовым объявлением XSL для существующего документа таблицы стилей XSL, и вы можете ждать бесконечно, думая, что главы имеют проблемы для загрузки. Все, что вы можете сделать, чтобы прочитать docuemntation, это открыть консоль и прочитать исходный код на вкладке ресурсы.


насколько я могу судить, Chrome ищет заголовок

тип содержимого: text / xml

тогда он работает - - - другие итерации не удалось.

убедитесь, что ваш веб-сервер обеспечивает это. Это также объясняет, почему это не удается для файла: / / URI xml-файлов.


проверить http://www.aranedabienesraices.com.ar

этот сайт построен с клиентской стороны XML / XSLT. Он работает на IE6-7-8, FF, O, Safari и Chrome. Правильно ли вы отправляете заголовки HTTP? Вы уважаете политику того же происхождения?


Я попытался поместить файл в wwwroot в. Поэтому при доступе к странице в Chrome, это адрес localhost / yourpage.в XML.


Эрик говорит правильно.

в xsl, для тега xsl:stylesheet имеют следующие атрибуты

версия= " 1.0 " xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"

Он отлично работает в Chrome.


Я начал тестировать это и столкнулся с проблемой безопасности локального файла / Chrome. Очень простой обходной путь-поместить XML и XSL-файл, скажем, в общую папку Dropbox и получить ссылки на оба файла. Поместите ссылку на преобразование XSL в головку XML. Используйте ссылку XML в Chrome, и она работает!