【问题标题】:JavaScript code works for downloading csv in FireFox but not Microsoft Edge [duplicate]JavaScript 代码适用于在 FireFox 中下载 csv,但不适用于 Microsoft Edge [重复]
【发布时间】:2020-04-11 09:02:08
【问题描述】:

这在 FireFox 中运行良好,但是当我单击 Microsoft Edge 中调用此功能的激活按钮时,什么也没有发生……没有提示下载或打开文件,没有错误……没有日志……什么都没有。你们可以提供的任何帮助将不胜感激。谢谢!!!!

    let val:string='';
    let valList = [] ;
    let valStr:string = '';
    let keysItr = Object.keys(this.policies[0]);
    let keyList = Array.from(keysItr);
    let keyStr = keyList.toString() ;
    keyStr = keyStr.trim() ;
    keyStr = keyStr.concat('\n');

    for(var i = 0 ; i < this.policies.length ; i++ ){

      for (let key of Object.keys(this.policies[i])) {

        val = this.policies[i][key] ;
        if(val == null){
          val = '';
        }
        val = val.toString() ;
        val = val.replace('$','');
        val = val.replace(',','');
        valList.push(val);
        //console.log(val);
      }
      valStr = valStr.concat(valList.toString());
      valStr = valStr.trim() ;
      valStr = valStr.concat('\n');
      valList = [] ;

    }
    let csvStr = keyStr.concat(valStr);

    var element = document.createElement('a');
    element.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csvStr));
    element.setAttribute('download', 'FOOBAR.csv');

    element.style.display = 'none';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);


  }//end fooBar()```

【问题讨论】:

标签: javascript firefox microsoft-edge


【解决方案1】:

已修复。 问题(当我尝试使用 Microsoft 浏览器通过 URI 传递数据(文本)时似乎总是如此)达到或超过 ~5kb。我们可以通过为二进制资源而不是文本资源构建 URI 来绕过这个荒谬的限制。

替换了这段代码:

   element.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csvStr));
   element.setAttribute('download', 'FOOBAR.csv');

   element.style.display = 'none';
   document.body.appendChild(element);

   element.click();

   document.body.removeChild(element);

使用这段代码:

let blob = new Blob(
      [ csvStr ],
      {
      type : "data:text/csv;charset=utf-8"
      }
      );


      const linkElement = document.createElement('a');
      const url = URL.createObjectURL(blob);
      linkElement.setAttribute('href', url);
      linkElement.setAttribute('download', 'policy_information.csv');
      const clickEvent = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
       'cancelable': false
      });
      linkElement.dispatchEvent(clickEvent);```

【讨论】:

  • 感谢您发布此问题的解决方案。您可以在 48 小时后将您的答案标记为已接受的答案,此时可以标记。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 2023-01-14
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2013-10-08
相关资源
最近更新 更多