Javascript 在IE11–中导出HTML到Excel&引用;“访问被拒绝”;

Javascript 在IE11–中导出HTML到Excel&引用;“访问被拒绝”;,javascript,excel,internet-explorer-11,access-denied,Javascript,Excel,Internet Explorer 11,Access Denied,我需要导出一个HTML报告到excel在各种不同的浏览器(最好只在客户端)。我在这个问题上花了很多时间,我有针对IE10+和FF/Chrome的浏览器特定解决方案。我所寻求的是一个跨浏览器的解决方案,因为我对特定于浏览器的代码感到畏缩 var saveData = (function () { var a = document.createElement("a"); document.body.appendChild(a); a.style = "display: none";

我需要导出一个HTML报告到excel在各种不同的浏览器(最好只在客户端)。我在这个问题上花了很多时间,我有针对IE10+和FF/Chrome的浏览器特定解决方案。我所寻求的是一个跨浏览器的解决方案,因为我对特定于浏览器的代码感到畏缩

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

此解决方案在FF/Chrome中工作,主要在IE中工作,但我在a.click()执行时遇到以下错误:“SCRIPT5:访问被拒绝”。我以前在IE11中以编程方式触发过单击事件,因此我不确定它为什么拒绝执行。它是否与XSS安全性和文件下载有关

请不要使用“window.open('data:application…)”解决方案或navigator.msSaveBlob()解决方案进行响应,因为它们不兼容跨浏览器

最糟糕的情况是,我只留下特定于浏览器的代码,但希望有一个解决方案我没有看到或想到


谢谢大家

为什么不直接使用FileSaver.js呢?或者,您是在为体验而推出自己的解决方案吗?我已经看过FileSaver.js。老实说,我们的项目相当庞大,所以我尽量避免一个接一个地添加库。特别是因为这个问题在我们的应用程序中是一个非常小的用例。如果有一个不使用第三方库的简单解决方案,它将是首选。否则我肯定会接受。IE具有相当高的安全性,触发对隐藏锚的单击是不允许的,但这不是问题,因为IE不支持锚标记上的下载属性。正如良好的OOP实践所建议的那样,我将封装您打算使用的FileSaver.js库中的功能。。除非是指项目大小,否则您指的是“总文件大小”,在这种情况下,为了跨浏览器的适用性(以及复制相关部分)而大量使用他们的代码可能是一个好主意。谢谢各位。我所说的项目规模只是整个应用程序——涉及的文件数量之多。添加另一个小用例库并不是世界末日,但如果可以的话,我希望避免这样做。我将解析这些文件,看看是否我无法找出它们在做什么,并提取出我需要的内容。我最终使用了filesaver.js。我提取了我需要的代码部分,导出文件的代码本身只有一行。我想要一个不需要我手动检测浏览器并运行不同代码的解决方案。谢谢
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