我正在使用XSLTProcessor类来转换我通过AJAX从同一服务器,相同协议检索的XML文件。用于翻译的XSL文件被硬编码为字符串内联,并通过jQuery的$ .parseXML()转换为XML。
然后我这样做:
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl); // created inline via jQuery
result = xsltProcessor.transformToDocument(xml); // xml retrieved via AJAX
Chrome无声地失败。 Firefox在第三行给我这条消息:
SecurityError:操作不安全。
为什么这是一个安全问题的任何想法?我正在运行javascript的这个页面和我是AJAXing的XML文件来自同一个域,都是HTTPS。我是否也必须从服务器中提取XSL文件,而不是将其写入内联?
编辑: 只是为了澄清我无法访问服务器端代码。
我真的只是使用XSL来重命名一些元素。我尝试从与XML相同的服务器路径中提取它,而不是将其写入内联,同样的错误。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="xelement">
<element><xsl:apply-templates select="@*|node()" /></element>
</xsl:template>
<xsl:template match="xsub-element">
<sub-element><xsl:apply-templates select="@*|node()" /></sub-element>
</xsl:template>
</xsl:stylesheet>
如果有一种简单的方法可以在不使用XSL的情况下重命名XML元素,我很乐意使用它。我的目标是重命名元素,而不一定是为了让XSL正常工作。
答案 0 :(得分:0)
此问题与XSLT无关,但与内容有关。您检索页面数据的方式。
您的内容不是来自同一个域。 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源交互。
当涉及到相同的原始政策时,Internet Explorer有两个主要的例外
信任区域:
如果两个域都位于高度可信区域,例如公司域,则不会应用相同的原始限制
端口:
IE并未将端口包含到Same Origin组件中,因此http://company.com:81/index.html和http://company.com/index.html被视为来自同一来源,并且不会应用任何限制。