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 objects属性“允许xslt = false”。,这不是真的--见下面的答案。因此,问题的其余部分是微不足道的。
如何触发IE9来加载上面的文件,并且仍然允许在xslt中运行脚本?
注意:我已经按照msdn上的建议尝试了Internet选项/Security/Custom./ Scripting /Active Scripting= Enable,但该设置已经正确。
我希望有一个特定的IE9处理指令可用,但我想没有,但也许这是一个特殊的样式表属性,配合IE9 IE9加载。
结论还可能是,只有在主html文件上运行脚本才能做到这一点,在该文件中不进行自动加载,但是XML和XSLT被加载到具有指定属性(如AllowXsltScript)的指定DOM对象中,然后将转换的输出显式加载到浏览器中。
发布于 2012-05-14 09:33:53
我被误导了。首先,触发古怪模式的不是IE安全设置,而是(缺少) doctype。其次,正如在xslt8690-xslt-processing-failed中所看到的,不触发本地文件异常的真正原因是与区域无关的IE9安全设置。
因此,DOM设置不起任何作用--当IE加载xml或xslt时,allowXsltScript属性似乎自动设置为true。
发布于 2012-05-03 14:37:39
我在http://home.arcor.de/martin.honnen/xslt/test2012050301.xml上尝试了一个例子,样式表是http://home.arcor.de/martin.honnen/xslt/test2012050301.xsl,在Windows 7上,它对我和IE9都很好。基于此,即使IE9使用MSXML 6来执行样式表,也可以启用脚本。如果您得到一个错误,一定有其他原因,或一定有一些特殊的东西,您的代码,您将需要张贴最小但完整的细节,让我们重现问题。
发布于 2012-07-05 03:36:04
我有一个网页,它使用内置浏览器支持(在IE9,MSXML6中)执行JavaScript调用的客户端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声明和一个XHTML1.0严格的DOCTYPE。)
https://stackoverflow.com/questions/10432821
复制相似问题