2009-09-21 16 views
1

基本上我想將XML(使用Content-Type text/xml)發佈到URL並直接在瀏覽器中顯示輸出。這必須在iframe中完成。如何使用JavaScript將XML發佈到iframe

是否可以將XML發佈到iframe?換句話說,Post-Request的Content-Type可以更改爲text/xml嗎?如有必要,PHP4也可用。

的iframe動作的URL必須保持,因爲結果包含了相關的鏈接網頁的HTML頁面...

回答

2

它曾經是可能document.open(mimetype)上的iframe回在Netscape,但現代的瀏覽器不要」不支持這個(而Netscape從來不支持XML)。

在許多瀏覽器中,只要文檔不太長,您就可以將iframe的src設置爲data URI,例如:data:text/xml,%3Celement%3Ehello%3C/element%3E。儘管這在IE中不起作用。所以,你需要至少可以追溯到服務器備份計劃:

<?php 
    header('Content-Type: text/xml'); 
    echo($_REQUEST('xml')); 
?> 

然後,如果XML是足夠短,以適應在一個URI,你可以通過設置它的源:

iframe.src= 'http://www.example.com/echoxml.php?xml='+encodeURIComponent(xml); 

如果XML可能會很長,你需要使用POST請求,這意味着表單提交:

var idoc= iframe.contentDocument || iframe.contentWindow.document; // IE compat 
idoc.open(); 
idoc.write('<form method="post" action="http://www.example.com/echoxml.php">'); 
idoc.write(' <textarea name="xml"></textarea>'); 
idoc.write('</form>'); 
idoc.close(); 
idoc.getElementsByTagName('textarea')[0].value= xml; 
idoc.getElementsByTagName('form')[0].submit(); 

難道這一切值得嗎?除非您使用XSL,否則在大多數瀏覽器中獲得的無格式XML視圖可能會很差。在不顯示XML的較舊/較簡單的瀏覽器中,只會提示您下載XML文件。

允許任何人將任何XML內容注入安全上下文是很危險的。例如。如果他們製作了包含XHTML腳本內容的返回文檔,那麼您很容易遭受跨站點腳本攻擊。

+0

謝謝!問題是,我需要將Login-Data發送到一個返回純HTML或302重定向到HTML頁面的Web服務。憑據只能通過POST-Request和Content-Type XML傳遞。我不知道如何實現這一點。我嘗試了CURL,它工作得很好 - 唯一的缺點是:返回的HTML包含Image-和Stylesheet-Links與相關數據。因爲CURL仍然保持位置欄中原始的腳本路徑,所以相對路徑不起作用:-( – acme

+0

啊,好吧,您想發送一個XML請求主體,這有點不同了。聽起來有點奇怪的是,當瀏覽器永遠不會發送請求時,它會用相對路徑返回HTML ...您必須對返回的HTML進行後處理以修復地址,或者在使用curl後添加一個''元素,這是一點點如果Web服務是本地的,你也可以在客戶端使用XMLHttpRequest來發送XML正文 – bobince

+0

我現在通過解析curl返回的html並在head-標記,它非常醜陋,但至少可以工作 - 顯然似乎是唯一的方法,再次謝謝! – acme

相關問題