如何在 Chrome iOS 上打开 Blob URL

IT技术 javascript ios google-chrome
2021-03-19 19:39:37

我想在浏览器窗口中打开 Blob 对象。

此代码适用于除 iOS Chrome 之外的任何地方(当然还有 IE,但我可以解决 IE)。窗口不会重定向到 url(正确或至少与其他浏览器相同)。Chrome iOS 是否有任何已知的解决方法?

var blob = new window.Blob(['Hello, world!'], {type: 'text/plain;charset=utf-8'});
window.URL = window.URL || window.webkitURL;
var url = window.URL.createObjectURL(blob);
window.location.href = url;

我试过<a href="{blobUrl}>而不是,window.location.href但它也不起作用。

4个回答

FileReader 解决了我的问题。

var reader = new FileReader();
var out = new Blob([this.response], {type: 'application/pdf'});
reader.onload = function(e){
  window.location.href = reader.result;
}
reader.readAsDataURL(out);
出于某种原因,这适用于 Chrome IOS 中的 PDF,但不适用于 epub,其中 epub 的应用程序类型是: blob = new Blob([oReq.response], {type: 'application/epub+zip'}); 该代码适用于 Safari 中的两种类型,但不适用于 chrome。:(
2021-04-22 19:39:37
@daerin 你能帮我把它改编成我的代码吗?stackoverflow.com/questions/59011741/...
2021-04-22 19:39:37
oh my... 我生命的这一部分叫做幸福
2021-04-23 19:39:37
大家好,我需要在 Chrome IOS 中管理一个存档文件,可以吗?我试着创建一个像 new Blob([........], {type: 'application/zip'}); 但代码不起作用。
2021-04-27 19:39:37
是否可以在 IOS 的新窗口中打开文件?
2021-05-18 19:39:37

FileReader.readAsBinaryString方法已被弃用。

有点晚了,但我不得不使用FileReader.readAsDataURL做类似的事情——它产生一个 dataUrl。我正在使用 AngularJS $http 服务调用 API 来创建 pdf。希望这有帮助,见下文:

$http.post('/api/pdf', {id: '123'}, {responseType: 'arraybuffer'})
    .success(function (response) {
        var blob = new Blob([response.data], {type: 'application/pdf'});
        var reader = new FileReader();
        reader.onloadend = function(e) {
             $window.open(reader.result);
        }
        reader.readAsDataURL(blob);
    });
嗨,我使用 FileReader.readAsDataURL 和 PDF 流很好地与 Firefox 和 Chrome。几天或几周后,用户报告我它不再适用于 Chrome 或 Vivaldi(相同的引擎),但仍在 Firefox 上工作。也许是对 Chromium 的回归?
2021-04-22 19:39:37
您好,Keano 您的解决方案在 Firefox 上运行良好,但是当我尝试使用 Chrome 时,它​​似乎不起作用。它只显示网址,但未加载 pdf。你能指导我吗?提前致谢。
2021-05-07 19:39:37

我通过将内容类型从 application/json 更改为 application/octet-stream 来修复它。我的 xlsx 文件被下载为 json。

@PostMapping(value = "/export", 产生 = MediaType.APPLICATION_OCTET_STREAM_VALUE)

这些解决方案在 Safari 上都不适合我。我不得不在页面上创建一个链接。

const downloadBlob = (fileName, blob) => {
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.target = '_blank';
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
}

const blob = new Blob([data], { type: 'video/mp4' });
downloadBlob('myfile.mp4', blob)