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



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



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



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



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

847   10  

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. Чтобы преодолеть эти ограничения, у нас есть два решения:

  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.

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

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

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

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" (!??) и "текст/xsl" в "таблицу стилей" (!??), а затем попытается отобразить XML-документ, как если бы это был документ HTML(5), без сначала работает его процессор XSLT. И ничего вообще не будет отображаться на экране (содержимое которого будет продолжать показывать предыдущую страницу, с которой была ссылка на страницу XML, и будет продолжать вращать значок, как будто документ никогда не был полностью загружен.

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

Так что да, Chrome в настоящее время отображает только XML-файлы (с дополнительным ведущим XSL объявление таблицы стилей), только если он обслуживается как "текст/xml", но не как "приложение/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 ищет заголовок

Content-Type: text / xml

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

убедитесь, что ваш веб-сервер обеспечивает это. Это также объясняет, почему он не работает для файлов file: / / 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 есть следующие атрибуты

version= " 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, и она работает!

Comments

    Ничего не найдено.