2010-03-22 44 views
13

我正在寫一些Javascript代碼,在客戶端生成一個XML文檔(通過Google Earth plugin)。我希望用戶能夠單擊頁面上的按鈕,並提示將該XML保存到新文件。如果我生成XML服務器端,這很容易,只需使按鈕打開鏈接。但XML是在客戶端生成的。如何動態創建一個文檔以便在Javascript中下載?

我想出了一些半工作的黑客,其中部分原因是this StackOverflow question。但既不完全工作。這裏是嵌入代碼演示HTML:

<html><head><script> 
function getData() { return '<?xml version="1.0" encoding="UTF-8"?><doc>Hello</doc>'; } 
function dlDataURI() { 
    window.open("data:text/xml;charset=utf-8," + getData()); 
} 
function dlWindow() { 
    var w = window.open(); 
    w.document.open(); 
    w.document.write(getData()); 
    w.document.close(); 
} 
</script><body> 
<div onclick="dlDataURI()">Click for Data URL</div> 
<div onclick="dlWindow()">Click for Window</div> 
</body></html> 

的dlDataURI()版本的Firefox在Chrome在IE的偉大工程,不良(不能保存),而不是在所有。 Window()版本在Firefox和IE中運行正常,在Chrome中效果不佳(無法保存,HTML內嵌XML)。這兩個版本都沒有提示用戶下載,它總是打開一個試圖顯示XML的新窗口。

有沒有一種很好的方式來做我想要的客戶端Javascript?我想在今天的瀏覽器上工作,理想的是Firefox,MSIE 8和Chrome。

更新與樣品Downloadify代碼

window.onload = function() { 
    Downloadify.create("dlify", { 
    data: getData(), 
    filename: "data.xml", 
    swf: 'media/downloadify.swf', 
    downloadImage: 'images/download.png', 
    width: 100, height: 30});}; 
+0

這個新堆棧溢出的問題有很多,不需要閃存的答案。大多數涉及在DOM中構建'data:'URL。 https://stackoverflow.com/questions/19721439/download-json-object-as-a-file-from-browser – Nelson 2018-01-15 17:55:16

回答

5

據我見過的最好的是Downloadify通過Doug Neiner,它需要Flash,但工作得非常好:

「一個微小的JavaScript + Flash庫,支持在瀏覽器中動態生成和保存文件,而無需與服務器交互。「

檢查這個video

+1

正確的,在我的答案中的API封裝。尼斯。 – spender 2010-03-22 01:32:29

+0

感謝您的指點,這是一個偉大的小圖書館。免費軟件許可證,相對容易使用。羞愧它需要Flash,但如果Javascript無法應對,我並不感到驚訝。注意:下載由Flash保存到磁盤,它不通過瀏覽器的下載管理器。我將用一段代碼片段更新我的問題,演示這個庫如何工作。 – Nelson 2010-03-24 02:24:11

+2

上面的URL已死。看起來你可以在這裏找到github上的downloadify:https://github.com/dcneiner/Downloadify – 2011-02-10 19:48:10

相關問題