1

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 由于默认的 MSXML6 DOM 对象属性“允许 xslt scripting = false”而引发错误。这不是真的 - 请参阅下面的答案。因此问题的其余部分无关紧要

如何触发 IE9 加载上面的文件并仍然允许在 xslt 中运行脚本?

注意:我已经按照 msdn 的建议尝试了 Internet 选项/安全/自定义级别.../脚本/活动脚本 = 启用,但该设置已经正确。

我希望有一个特定的 IE9 处理指令可用,但我想没有。但也许这是一个特殊的样式表属性,它与 IE9 xslt 加载配合使用。
结论也可能是,这只能通过在主 html 文件上运行脚本来实现,其中不进行自动加载,而是将 XML 和 XSLT 加载到具有指定属性(如 AllowXsltScript)的指定 DOM 对象中,并且然后将转换显式加载到浏览器中。

4

3 回答 3

1

我在http://home.arcor.de/martin.honnen/xslt/test2012050301.xml尝试了一个示例,样式表为http://home.arcor.de/martin.honnen/xslt/test2012050301.xsl,它可以工作我和 Windows 7 上的 IE 9 都很好。基于该脚本,即使 IE 9 使用 MSXML 版本 6 执行样式表也是如此。如果您收到错误,肯定有其他原因,或者您的代码一定有某些特殊之处,您将需要发布最少但完整的详细信息,以便我们重现问题。

于 2012-05-03T14:37:39.443 回答
1

我有一个网页,它使用 JavaScript 调用的内置浏览器支持(在 IE9、MSXML6 中)执行客户端 XSLT。JavaScript 使用 Ajax 调用将 XSLT 样式表(静态 .xsl 文件)从服务器加载到 XSLT 处理器对象变量中。要转换的 XML 位于由 JavaScript 创建的 XML 文档对象变量中。XML 文档的内容基于页面上 textarea 元素的值。

XSL 转换在所有目标浏览器(Firefox、Chrome、Safari)的当前版本中工作,除了 IE9,它报告了错误:

“不支持在 DTD 中使用默认命名空间声明属性。”

我尝试了一堆东西都无济于事。最后,凭直觉,我的脖子后面竖起了头发,我插入了这个属性:

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

在网页的 html 元素中。不是在被转换的 XML 文档中,而是在包含调用 XSLT 转换的 JavaScript 的网页中

错误消失了。该网页现在可以在 IE9 中运行。

(该网页还包含一个 XML 声明和一个 XHTML 1.0 Strict DOCTYPE。)

于 2012-07-05T03:36:04.527 回答
0

我被误导了。首先,触发怪癖模式的不是 IE 安全设​​置;这是(缺少的)文档类型。其次,从xslt8690-xslt-processing-failed中可以看出,不触发本地文件怪癖的真正原因是与区域无关的 IE9 安全设置。

所以 DOM 设置没有任何作用——当 IE 加载 xml 或 xslt 时,该allowXsltScript属性似乎自动设置为 true。

于 2012-05-14T09:33:53.380 回答