Как разрешить IE9 MSXML6 выполнять интегрированную обработку XSLT, включая javascript?

IE9 по умолчанию применяет MSXML6, а IE8 применяет MSXML3. Тот факт, что некоторые функции по умолчанию отключены в MSXML6, вызывает проблемы, в частности, при загрузке таких страниц, как

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<root>...</root>

где упомянутая таблица стилей xslt применяет встроенный javascript (например, пользовательские функции расширения).

Можно установить свойства DOM xslt в коде скрипта, например, в Jscript:

var xsltDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
xsltDoc.setProperty("AllowXsltScript", true);
xsltDoc.loadXML(xsltfile);

Но при загрузке указанного выше файла IE9 автоматически загружает файл xslt со значениями свойств по умолчанию. И это приводит к поразительной разнице с IE8: IE8 будет загружать страницу безупречно, но IE9 выдает ошибку из-за свойства объектов DOM MSXML6 по умолчанию «разрешить сценарии xslt = false». Это неправда. См. мой ответ ниже. Таким образом, остальная часть вопроса не имеет значения

Как заставить IE9 загружать указанный выше файл и по-прежнему разрешать запуск скриптов в xslt?

Примечание. Я уже пробовал Свойства обозревателя/Безопасность/Пользовательский уровень.../Сценарии/Активные сценарии = Включить, как было предложено в msdn, но этот параметр уже был правильным.

Я надеюсь, что есть конкретная инструкция по обработке IE9, но я думаю, что ее нет. Но, возможно, есть специальный атрибут таблицы стилей, который взаимодействует с загрузкой xslt в IE9.
Вывод также может заключаться в том, что это возможно только при запуске сценария в основном файле html, где не выполняется автоматическая загрузка, но XML и XSLT загружаются в указанные объекты DOM с указанными свойствами (например, AllowXsltScript), а результат преобразования затем явно загружается в браузер.


person Maestro13    schedule 03.05.2012    source источник
comment
Просто из любопытства: почему вы не используете XSLT-преобразования на стороне сервера?   -  person Tomalak    schedule 03.05.2012
comment
@Tomalak Думаю, я понимаю, на что вы указываете - сервер создает html и отправляет его клиенту IE9? Но это всего лишь локальные вещи, с которыми я работаю, так что да, это хороший совет для любых будущих серверных вещей, которые я хочу сделать.   -  person Maestro13    schedule 03.05.2012
comment
Я бы скорее рекомендовал использовать одну из нескольких XSLT IDE, включая мощный XML-редактор Visual Studio, а также XSLT-выполнение и отладчик.   -  person Dimitre Novatchev    schedule 03.05.2012


Ответы (3)


Я попробовал пример на http://home.arcor.de/martin.honnen/xslt/test2012050301.xml с таблицей стилей http://home.arcor.de/martin.honnen/xslt/test2012050301.xsl, и он отлично работает со мной и IE 9 в Windows 7. На основании этого сценарии включены, даже когда IE 9 использует MSXML версии 6 для выполнения таблицы стилей. Если вы получили сообщение об ошибке, должны быть другие причины или что-то особенное в вашем коде, вам нужно будет опубликовать минимальную, но полную информацию, позволяющую нам воспроизвести проблему.

person Martin Honnen    schedule 03.05.2012
comment
на самом деле ответ, который вы дали на один из моих других вопросов, привел к этому: для вопрос У меня возникла проблема со ссылкой, которую вы указали на пример ответа - person Maestro13; 03.05.2012
comment
Я думаю, что протестировал этот пример для работы с IE 9 в Windows 7, и теперь я проверил его снова, для меня он работает нормально, он не выдает ошибку. В своем ответе на комментарий Томалака вы, кажется, указываете, что работаете с локальными файлами, а не с теми, которые обслуживаются через HTTP, как мои примеры. Так ли это? Я не уверен, какой параметр IE изменить, чтобы локальные файлы обрабатывались так же, как файлы, загруженные через HTTP. - person Martin Honnen; 03.05.2012
comment
Ну, я пробовал и удаленный, и локальный, и оба не работают. Таким образом, вопрос, похоже, сводится к тому, почему моя версия IE9 + настройки не работают, а ваши работают .... Кстати, никакой ошибки не было - просто пустая страница. Когда я активировал инструменты разработчика (F12), я обнаружил, что появилось сообщение об ошибке XSLT8690: XSLT processing failed., исследование привело меня к выводу в моем вопросе, что причиной являются настройки MSXML6 по умолчанию. Кстати, ваш новый пример работает в моей версии IE9... как и первый, так что я еще раз проверю, что произошло после всех этих возни... - person Maestro13; 03.05.2012
comment
Должно быть, я коснулся чего-то, что вызвало автоматический режим документа = причуды. И я заметил ранее, что когда вы запускаете режим IE9 (ошибка), затем переключаетесь на IE8 или compat view, а затем возвращаетесь, ошибка больше не возникает; это было только для новых вкладок, но не больше из-за автоматических причуд. Так что я даже не могу воспроизвести ошибку прямо сейчас :-( - person Maestro13; 03.05.2012
comment
Я хочу разобраться в этом, поэтому я попытаюсь снова коснуться настроек, пытаясь воссоздать, но мне интересно две вещи: (1) можете ли вы проверить, автоматически ли ваш браузер IE9 переходит в режим причуд? (2) знаете ли вы, что запускает режим причуд - и какая (отсутствующая?) настройка, которая должна была быть у меня раньше, предотвращает это? - person Maestro13; 04.05.2012
comment
ОК, не уверен, что это покрывает это, но из другого вопроса, который я поднял ( html1113 ) Кажется, теперь я знаю, что происходит. Помимо сбоя (которого я до сих пор не понимаю) моей версии IE9, не переключающейся в режим причуд автоматически, вывод в моем вопросе выше кажется неверным: это не настройка сценария DOM, которая вызывает проблемы; это тип документа или метатег, который необходимо использовать для принудительного режима документа. - person Maestro13; 05.05.2012
comment
См. другой ответ для окончательного вердикта. - person Maestro13; 14.05.2012

У меня есть веб-страница, которая выполняет XSLT на стороне клиента, используя встроенную поддержку браузера (в IE9, MSXML6), вызываемую JavaScript. JavaScript использует вызов Ajax для загрузки таблицы стилей XSLT (статический файл .xsl) с сервера в переменную объекта процессора XSLT. Преобразуемый XML находится в переменной объекта XML-документа, созданной JavaScript. Содержимое документа XML основано на значении элемента textarea на странице.

Преобразование XSL работало в текущих версиях всех целевых браузеров (Firefox, Chrome, Safari), кроме IE9, который сообщил об ошибке:

«Использование атрибута объявления пространства имен по умолчанию в DTD не поддерживается».

Я пробовал кучу вещей безрезультатно. Наконец, по наитию, с вставшими на затылок волосами, я вставил атрибут:

xmlns="http://www.w3.org/1999/xhtml"

в элементе html веб-страницы. Не в XML-документе, который преобразовывался, а в веб-странице, содержащей код JavaScript, вызывающий XSLT-преобразование.

Ошибка ушла. Веб-страница теперь работает в IE9.

(Веб-страница также содержит объявление XML и XHTML 1.0 Strict DOCTYPE.)

person Graham Hannington    schedule 05.07.2012

Я ошибся. Во-первых, не настройки безопасности IE запускают необычный режим; это (отсутствует) тип документа. Во-вторых, как видно из xslt8690 -xslt-processing-failed, настоящая причина того, что причуды не срабатывают для локального файла, — это параметр безопасности IE9, не связанный с зоной.

Таким образом, параметр DOM не играет никакой роли - когда IE загружает xml или xslt, свойство allowXsltScript автоматически устанавливается в значение true.

person Maestro13    schedule 14.05.2012