Как разрешить 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 по умолчанию "allow xslt scripting = false". Это не правда - см. Мой ответ ниже. Остальная часть вопроса, таким образом, незначительна

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Я попробовал пример на 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 для выполнения таблицы стилей. Если вы получаете сообщение об ошибке, должны быть другие причины или что-то особенное в вашем коде, вам нужно будет опубликовать минимальные, но полные сведения, позволяющие нам воспроизвести проблему.

Другие вопросы по тегам