【问题标题】:BLOB URL not working in SafariBLOB URL 在 Safari 中不起作用
【发布时间】:2019-02-03 05:58:24
【问题描述】:

我正在使用 D3 生成图形并希望将其导出为图像,该图像在除 Safari 之外的所有浏览器中都可以正常工作。代码生成一个D3 SVG,在一个BLOB中使用,用作图像,添加到可以导出的画布中。

var blob = new Blob([source], { type: 'image/svg+xml;charset=utf-8' });
var url = window.URL.createObjectURL(blob);

// Put the svg into an image tag so that the Canvas element can read it in.
var img = d3.select('body').append('img')
 .attr('width', width)
 .attr('height', height)
 .node();

img.onload = function(){
  // Some method which is never called
}
img.src = url;

在 Safari 中,永远不会触发 onload 函数,并且图像元素也不会显示图像。我记录了 blob 元素和 URL,看起来都很好(如果我在 safari 中手动打开 blob URL,它会下载 SVG 代码)。但它不会将其显示为图像,因此我无法导出它。

我注意到,当我检查 img 元素并在新选项卡中打开 src 时,它会在 URL https://www.mysite.nl/mypage/blob:https://www.mysite.nl/2a173f60-8b34-4b1c-894b-4ff6adcfe9fa 上打开

因此出于某种原因,Safari 将 BLOB URL 解释为相对而不是绝对 URL。有人知道如何解决这个问题吗?

【问题讨论】:

    标签: javascript url safari blob


    【解决方案1】:

    Safari 不喜欢 Blob 的 MIME 类型。

    正确的是image/svg+xml charset 标头是无用的,虽然我不确定它是否真的被允许在那里,但它无论如何都没用。

    所以从你的type 选项中删除;charset=utf-8 部分,你会没事的:

    var blob = new Blob(['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><rect y="0" width="100" height="100" rx="15" ry="15" x="0"></rect></svg>'], {
      type: 'image/svg+xml' // this is the only MIME for SVG
    });
    document.body.appendChild(
      new Image()
    ).src = URL.createObjectURL(blob);

    【讨论】:

    • 我刚注意到我忘了标记这个回复,谢谢你,删除字符集解决了我的问题。但是,我不认为这是一个重复的问题,即使解决方案是相同的,因为我的问题专门针对桌面浏览器,而他专门针对移动版本。
    • @A.Bos 这些问题是重复的。我不确定,但这可能是 webkit 问题,这意味着您不仅可以在 ios 或桌面 Safari 版本上体验它,甚至可以在基于相同 webkit 代码库的其他浏览器上体验它。但我关闭了另一个作为这个的欺骗。
    • 感谢@Kaiido 从对我们有用的类型中删除 ;charset=utf-8 !互联网上一定有一些糟糕的代码建议这样做。天哪!
    猜你喜欢
    • 2017-09-23
    • 2016-01-04
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2015-06-25
    • 2019-01-08
    相关资源
    最近更新 更多