【发布时间】: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