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); 

    } 
関連する問題