【问题标题】:Using URL.createObjectURL in Web Worker in IE11在 IE11 的 Web Worker 中使用 URL.createObjectURL
【发布时间】:2020-08-18 18:32:09
【问题描述】:

我必须处理带有纯文本的大型数据集。我通过云将这些数据作为多个块获取,并使用网络工作者来处理和格式化数据。最后,我想把它下载到用户的本地存储中。因此,我使用FileSaver.js 中定义的 Blob 和 saveAs() 来授予跨浏览器兼容性。我想通过 URL.createObjectURL 发送对最终数据的引用,并将 URL 的 DOMString 传递回我的主线程。这在 Chrome 或 Edge 中运行良好,但 IE11 会产生一些问题。如果我 console.log 检索到的 URL,Chrome 和 Edge 会给我以下结果:

blob:"reference to website"/"XXXX-XXXXX-XXXXX-XXXX"

但是如果我在 IE11 中做同样的事情,我会得到以下结果:

blob:"XXXX-XXXXX-XXXXX-XXXX"

这是一个示例代码:https://jsfiddle.net/BoesingaGit/Lvx20uj8/6/ 我在这里不使用网络工作者,因为没有它也存在问题。可悲的是,saveAs 函数在 JSFiddle 中不起作用,但它在我的常规代码中起作用。在 Chrome 中可以下载 url,但在 IE 中不行。如果你看一下控制台,你会发现 Chrome 和 IE 中的 URL 是不同的。我猜这会导致在 IE 中下载失败。 有什么原因,为什么在 IE 中没有引用我的网站?

谢谢。

【问题讨论】:

  • 我建议您提供任何示例代码。它可以帮助我们更好地理解问题。仅对问题的描述并没有给出有关问题原因的想法。感谢您的理解。
  • 感谢您的建议。我添加了一些示例代码。我希望你们现在能更好地理解我的问题。

标签: web blob internet-explorer-11 worker createobjecturl


【解决方案1】:

我检查了问题并对此进行了一些研究。

出于安全原因,我发现 BLOB URL 在 IE 浏览器中不起作用。

要解决此问题,您可以尝试使用msSaveOrOpenBlob() method

示例代码:

    var str = "Hello World";
    blobObject = new Blob([str], {type: "plain/text"});
    $(button).click(function(){
        window.navigator.msSaveOrOpenBlob(blobObject, filename);
    });

参考资料:

  1. Open links made by createObjectURL in IE11

  2. Blob url in internet explorer with angularjs

【讨论】:

  • 感谢您的回答和参考。在我的情况下,解决方法会导致另一个问题。我正在使用网络工作者将数据密集型进程排除在我的主线程之外。解决方法意味着我必须将 blobObject(包含大量数据)发送回我的主线程。这会减慢甚至停止网页。这就是为什么我想使用 URL 仅将引用发送回主线程。
  • 我了解您的问题,但由于某些安全原因,IE 浏览器存在限制,这是我使其在 IE 浏览器中运行的唯一解决方法。感谢您的理解。
猜你喜欢
  • 2019-05-16
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
相关资源
最近更新 更多