2016-01-08 66 views
0

我需要導出HTML報告在各種不同的瀏覽器到Excel(僅最好在客戶端上)。我已經花了很多時間來解決這個問題,並且我正在爲IE10 +和FF/Chrome開發針對瀏覽器的解決方案。我正在尋求一種跨瀏覽器的解決方案,因爲我對瀏覽器特定的代碼感到畏懼。導出HTML到Excel中的IE11 - 「拒絕訪問」

var saveData = (function() { 
    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    a.style = "display: none"; 
    return function (data, fileName) { 
    var html = data, 
    blob = new Blob([html], { type: "text/xml" }), 
    url = window.URL.createObjectURL(blob); 
    a.href = url; 
    a.download = fileName; 
    a.click(); 
    window.URL.revokeObjectURL(url); 
    }; 
}()); 

var fileName = "download.xls" 
saveData($('#TablesContainer').html(), fileName); 

http://codepen.io/mhodges44/pen/dGWZvN

該解決方案是工作在FF/Chrome和IE中的大部分工作,但我得到的a.click()執行以下錯誤:「SCRIPT5:訪問被拒絕。」我在IE11中以編程方式觸發點擊事件之前,所以我不知道它爲什麼拒絕執行。它是否與XSS安全性有關的文件下載或什麼?

請不要用迴應:因爲他們不是跨瀏覽器兼容「window.open(‘數據應用......’)」的解決方案或navigator.msSaveBlob()解決方案。

最壞的情況,我剛剛離開了特定瀏覽器的代碼,但希望有我還沒有看到一個解決方案或思路。

謝謝你們!

+1

爲什麼不直接使用FileSaver.js?或者你在爲自己的體驗滾動自己的解決方案 –

+0

我已經看過FileSaver.js。說實話,我們的項目非常龐大,所以我儘量避免在庫之後添加庫。特別是因爲這個問題在我們的應用程序中是一個非常小的用例。如果沒有使用第三方庫有一個簡單的解決方案,它將是首選。否則我肯定會對它開放。 – mhodges

+1

IE瀏覽器有相當沉重的安全,在錨隱藏觸發點擊是不,不,但這是一個非的問題,因爲IE不支持錨標記上的下載屬性。 – Musa

回答

0
if window.navigator and window.navigator.msSaveOrOpenBlob 
     blob = new Blob([ data ], type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
     window.navigator.msSaveOrOpenBlob blob 
else 
     blob = new Blob([ data ], type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
     objectUrl = URL.createObjectURL(blob) 
     window.open objectUrl 
+0

我結束了使用filesaver.js。我提取出了我需要的代碼部分,並且導出文件的代碼本身是1行。我想要一個不需要我手動檢測瀏覽器並運行不同代碼的解決方案。不過謝謝 – mhodges