2013-01-06 104 views
0

我想使用jquery或javascript來獲取Iframe的原始內容(意思是每個字符)。這聽起來很簡單,但我仍然努力尋找正確的方式。獲取Iframe的原始內容

現在它只是iframe中的XML內容。 下面的代碼:

$(function() { 

    var xmlContent = $("#CFrame").contents().find("*").text(); 

    // The magic 
    $('#SResult').xslt({xml: xmlContent, xslUrl: 'stylesheet/designSS.xsl'}); 
}); 

HTML頁面

<form id="searchForm" method="GET" target="ContentFrame" action="http://125.235.8.210:380/search" onSubmit="processContent()"> 
     ..... 
    </form> 
</div> 
<div id="SResult"> 
</div> 
<iframe id="CFrame" name="ContentFrame" frameborder="1" height="2000px" width="1000px" scrolling="no" src="stylesheet/test.xml"></iframe> 
</body> 

感謝,

+1

您的iframe是指向存儲在您的域中的內容,還是指向某個遠程網站?另外,爲什麼要將XML文檔加載到iframe中? – Blender

+0

有一個表單(發送到遠程應用程序)的目標是這個iframe,表單的返回內容是虛擬的xml。然後,我將使用樣式表將這個xml轉換爲包含在主頁的div中的html。 – MikeNQ

回答

0

如果你的XML駐留在你的域名,你是AJAX更好,特別是在利用jQuery library,該方法解析它爲你,併爲即時操縱做好準備。

如果沒有您的域名,然後you can't access it via AJAX除非遠程server and your client's browser both support CORS.

你有選擇的,雖然生活:

  • 如果遠程服務器的API支持JSONP,用它來代替XML的。然後你可以使用jQuery來檢索JSONP數據或者滾動你自己的腳本加載器。
  • 或者使用您的服務器爲您代理XML。服務器不限於同源策略。在您的服務器上創建一個API,將您的表單數據轉發到遠程服務器並檢索遠程頁面 - 就像您的服務器是瀏覽器一樣。然後將結果轉發給您。
+0

JSONP不受支持,在服務器端進行更改也是不成問題的。有沒有辦法將表單目標設置爲div或Iframe之外的其他內容。這可能有助於避免跨域規則? – MikeNQ

+0

@MikeNQ JSONP通常是這樣。除此之外,那麼你運氣不好。服務器代理將是這項工作的最佳選擇。 – Joseph

1

聲明:我會回答你的問題,無論它是否是一個優雅的解決方案。約瑟夫似乎把這當成了問題。我會說他可能是對的。

嘗試使用mimetype text/xml獲取框架不起作用。瀏覽器將繼續並將XML轉換爲HTML。這就是爲什麼它聽起來不那麼簡單。這種方式實際上是不可能的。

我向您介紹瞭解決此問題的簡單解決方法。

<html> 
<head> 
<script> 
function getXmlContents() { 
    /* 
    Note: Because of security reasons, the contents of a document can be accessed from another document only if the two documents are located in the same domain. 
    http://www.w3schools.com/jsref/prop_frame_contentdocument.asp 

    */ 
    var iframeDocument = document.getElementById('greetingFrame').contentDocument; 
    if (iframeDocument == null) 
     return undefined; 
    var xmlContainer = iframeDocument.getElementById('xmlContainer'); 
    if (xmlContainer == null) 
     return undefined; 
    return xmlContainer.innerText == null ? xmlContainer.textContent : xmlContainer.innerText; 
}; 
</script> 
</head> 
<body> 
<iframe id="greetingFrame" src="helloworld.html" onload="alert(getXmlContents())"> 
</iframe> 
</body> 
</html> 

的XML的內容被包裹的HTML(的helloworld.html)內:

<html> 
<body> 
<script id="xmlContainer" type="text/xml"> 
    <?xml version="1.0" encoding="UTF-8"?> 
    <title> 
    Hello world 
    </title> 
</script> 
</body> 
</html> 

我在瀏覽器,Firefox和IE成功地測試此。

當然,您將不得不將XML文檔封裝在HTML腳本標籤中,如上所述。例如,如果您希望呈現XML,則也可以使用其他標記包裝XML,但是您必須使用html編碼對XML進行編碼。這需要在服務器端完成。一個非常簡單的(php/ruby​​/python/etc)腳本就足夠了。