2014-02-24 51 views
2

我正在使用XSLTProcessor类来转换通过AJAX从相同服务器,相同协议检索到的XML文件。用于翻译的XSL文件被硬编码为串联的字符串,并通过jQuery的$ .parseXML()转换为XML。XSLTProcessor:操作不安全?

那么我这样做:

var xsltProcessor = new XSLTProcessor(); 
xsltProcessor.importStylesheet(xsl); // created inline via jQuery 
result = xsltProcessor.transformToDocument(xml); // xml retrieved via AJAX 

铬静静地失败。 Firefox在第三行给我这个消息:

SecurityError: The operation is insecure.

任何想法为什么这是一个安全问题?此页面我正在运行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工作。

+1

XSLT可能使用'document'函数从不同来源加载XML吗? –

+1

你能告诉我们你的XSLT吗? – JLRishe

+0

上面添加了XSLT。 – user2867288

回答

0

此问题与XSLT不相关,但与内容有关。您将数据检索到您的页面的方式。

您的内容不在同一个域中。 同源策略限制从一个来源加载的文档或脚本如何与另一个来源的资源进行交互。

Internet Explorer有两个主要的例外,当谈到同源策略

信任区域

如果这两个域在高度信任的区域如企业域,则同一产地的限制是不施加

端口

IE不包括端口到同源部件,叔因此,http://company.com:81/index.htmlhttp://company.com/index.html被视为来自同一来源,并且不受任何限制。

+0

内容来自同一个域名。 XML和XSL都存储在同一台服务器上,并且带有JavaScript的内容页面也来自同一个域下的服务器。我希望解决方案是这样简单的。 – user2867288

+0

请检查http://en.wikipedia.org/wiki/Same_origin_policy作为http以https将不起作用,请检查来自同源策略的所有内容。我很确定这是你遇到的问题。 – Rumplin

+0

这绝对听起来像我遇到的问题,但我没有看到任何相同的人的冲突。一切都从https中拉出,我们的服务器甚至不允许http连接。 – user2867288