2014-02-24 50 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