Я получил эту ошибку в сафари при попытке конвертировать SVG в base64 URL с помощью кода:Префикс пространства имен NS1 для HREF на% TagElement% не определена, setAttributeNS
$svgCopy = $('svg').clone()
html = $('<div>').append($svgCopy).html()
imgSrc = 'data:image/svg+xml;base64,' + btoa(html)
imgEl.src = imgSrc
Проблема заключается в том, что при установке атрибутов с NS (setAttributeNS) сафари наборы NS \ d + пространство имен и не устанавливает XMLNS: NS \ d + атрибут в SVG, так это выглядит, как
<use NS1:href="#source" />
при копировании таких г в Chrome - вы не имеете такую проблему, потому что этот SVG элемент будет выглядеть так:
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#source" />
И в результате (по копии svg) мы получаем недопустимый файл.
UPD: @Robert с setAttributeNS
все в порядке:
el.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#source')
Без надлежащего назвать это не будет работать в Chrome.
FWIW в Safari 9.1.2 с тем, что я делаю, я получаю 'ns1' (в нижнем регистре) и добавлен регистронезависимом' i' к NS заменить: 'HTML = html.replace (/ NS \ d +: href/gi, 'xlink: href') '. Работает как шарм, спасибо огромное @extempl! –