2011-01-23 18 views
6

我想生成一個CSV文件作爲一些用戶交互的結果,然後提示用戶下載它。我怎樣才能做到這一點?如何在Google Chrome擴展程序中生成要下載的文件?

我不認爲這是可能的直JS,但也許鉻給我一些提升的特權?

+0

我在ASP.NET做到了這一點。你在使用什麼技術? –

+0

@Jon:Chrome擴展程序是用JS編寫的...不要以爲我有其他選擇。 – mpen

回答

2

Chrome並未提供任何幫助,但我認爲您應該能夠使用downloadify js庫在後臺使用Flash組件觸發文件保存對話框。

+0

當我嘗試演示時,似乎會讓Firefox崩潰。儘管Chrome並沒有崩潰......所以,我想我可以忍受這一點。 – mpen

5

您現在可以使用HTML5 File API下載文件。它仍處於開發階段,但您可以使用BlobBuilder和重定向您的使用,以下載文件:

var bb = new BlobBuilder(); 
bb.append(csvContents); 
var blob = bb.getBlob(); 
location.href = window.webkitURL.createObjectURL(blob); 

有關文件API的更多信息,的HTML5Rocks有很大的教程:

http://www.html5rocks.com/tutorials/file/filesystem/

+0

Chrome 10是否支持? – mpen

+0

是的,在Chrome 10中,他們將其更改爲「window.webkitURL.createObjectURL」。我編輯了我的答案以反映這一點。這種方法唯一的問題(即將得到解決)是你無法控制文件名。在你的檢查員中試用。 –

+0

「不允許加載本地資源:blob:null/6b2c341a-ad40-48b2-9755-1b7134832d39」。我可以將其複製到我的地址欄並下載文件,但Chrome爲什麼不允許它? – mpen

1

我最近需要做同樣的事情 - 生成文件並在Chrome擴展中強制執行下載。在這裏,您是代碼片段這樣做,使用ES6和推薦的方法:

let docContent = ... /* your content */; 
let doc = URL.createObjectURL(new Blob([docContent], {type: 'application/octet-binary'})); 
chrome.downloads.download({ url: doc, filename: filename, conflictAction: 'overwrite', saveAs: true }); 

您還可以在manifest.json聲明一個適當的特權:

"permissions" : ["downloads"] 
相關問題