Я использую 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 функция загрузки никогда не запускается, и элемент изображения также не отображает изображение. Я зарегистрировал и элемент BLOB-объекта, и URL-адрес, и оба выглядят нормально (если я вручную открываю URL-адрес BLOB-объекта в Safari, он загружает код SVG). Но он не будет отображаться как изображение, и поэтому я не могу его экспортировать.
Что-то, что я заметил, это то, что когда я проверяю элемент img и открываю src в новой вкладке, он открывается по URL https://www.mysite.nl/mypage/blob:https://www.mysite.nl/2a173f60-8b34-4b1c-894b-4ff6adcfe9fa
Так что по какой-то причине Safari интерпретирует URL-адрес BLOB как относительный, а не абсолютный. Кто-нибудь получил идею, как это исправить?