2

我目前正在修復Web應用程序上數據表的CSV導出。 當您點擊導出按鈕時,它目前能夠導出除Chrome之外的所有需要​​的瀏覽器。 我一直在試圖弄清楚一段時間,而我正在抵抗拉我的頭髮。在Chrome瀏覽器中CSV表導出不工作 - JavaScript/AngularJS

下面的代碼是我的服務,直到最近工作。任何幫助是極大的讚賞。

svc.downloadContent = 
(target, fileName, content) => { 
    if (!browserSvc.canDownloadFiles()) return; 

    // IE10 
    if (window.navigator.msSaveOrOpenBlob) { 
    const blob = new Blob([content], {type: 'text/csv'}); 
    window.navigator.msSaveOrOpenBlob(blob, fileName); 
    // IE9 
    } else if (env.browser === 'Explorer') { 
    const frame = document.createElement('iframe'); 
    document.body.appendChild(frame); 
    angular.element(frame).hide(); 

    const cw = frame.contentWindow; 
    const cwDoc = cw.document; 
    cwDoc.open('text/csv', 'replace'); 
    cwDoc.write(content); 
    cwDoc.close(); 
    cw.focus(); 
    cwDoc.execCommand('SaveAs', true, fileName); 

    document.body.removeChild(frame); 
    // Sane browsers 
    } else { 
    const blob = new Blob([content], {type: 'text/csv'}); 

    const url = URL.createObjectURL(blob); 

    const a = angular.element(target); 
    const download = a.attr('download'); 
    // If not already downloading ... 
    if (!download) { 
     a.attr('download', fileName); 
     a.attr('href', url); 

     // This must run in the next tick to avoid 
     // "$digest already in progress" error. 
     //$timeout(() => target.click()); 
     try { 
     target.click(); 
     // Clear attributes to prepare for next download. 
     a.attr('download', ''); 
     a.attr('href', ''); 
     } catch (e) { 
     console.error('csv-svc.js: e =', e); 
     } 
    } 
    } 

回答

1

在發佈我的問題幾分鐘後,我設法弄清楚了這一點。我需要爲Chrome添加其他功能。不過,我會發布修復並留下來,希望它可以幫助別人在未來。

else if (env.browser === 'Chrome') { 

    const blob = new Blob([content], {type: 'text/csv'}); 

    const url = URL.createObjectURL(blob); 
    const link = document.createElement('a'); 
    link.href = url; 
    link.style = 'visibility:hidden'; 
    link.download = fileName; 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 

    } 
相關問題