2011-10-26 23 views
1
操縱它

我想用JavaScript來做到以下幾點:改變一個iframe的內容類型爲xml,以顯示XML,並通過DOM

  1. 建立一個XML文件
  2. 顯示它在iframe
  3. 操縱通過DOM

我建立一個XML編輯器中的內容時遇到的一個iFrame顯示XML的麻煩。

這是我目前使用的代碼。

function previewContent(what){//changes the content of an iFrame 
    var tsite = document.getElementById('xmlinside').contentDocument; 
    tsite.open(); 
    tsite.contentType('text/xml'); 
    tsite.writeln(what); 
    tsite.close(); 
} 

function makeXML(){ 
    var tester = '<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\ 
    <bookstore>test</bookstore>'; 
    previewContent(tester); 
} 

而不tsite.contentType('text/xml')的IFRAME簡單地顯示test

當我檢查源代碼時,它仍然在HTML中,添加了添加的行<bookstore>test</bookstore>,並且xml版本作爲註釋。

我希望它顯示爲不帶樣式表的瀏覽器。我知道Safari將它顯示爲一個原始的xml文件,如果沒有關聯的格式。這將是完美的。內容類型是否搞亂了?這就是爲什麼我試圖改變它,但這是錯誤的代碼。任何幫助將是偉大的!

回答

0

有幾件事情要記住...

1)如果它通過AJAX加載的內容,您將需要使用應用程序/ XML媒體類型/ MIME和第一個元素必須有一個命名空間...

<div id="root_most_ajax_element" xmlns="http://www.w3.org/1999/xhtml"> 
<p>ajax content</p> 
</div> 

2),因爲它們嚴重依賴於innerHTML的),最特別是在裝載AJAX加載的內容結合從來沒有使用它決不使用innerHTML(和框架,專有的微軟方法不正確註冊DOM,所以你有點看到代碼在那裏,但它不是真的在那裏,因此使你的合作在這一點上完全不可靠。如果使用JavaScript,使用importNode方法加載AJAX加載的內容(而不是使用iframe,則可以將其導入到分隔元素)。

3.)如果沒有從同一個域加載iframe,那麼你不會(也不應該)訪問(X)HTML的HTML,否則如果它從第三方網站加載則不要你可以說操縱文本,並發現他們的信息(電話,電子郵件等,如果他們登錄的東西)。

如果您符合這三個條件,您應該能夠使用代碼,就好像沒有iframe或AJAX參與一樣。