Я пытаюсь найти кросс-браузерный способ сериализации документа SVG, содержащего CDATA.
Мой код хорошо работает в Chrome и Firefox, но в Internet Explorer CDATA сериализуется как текст, а не как раздел CDATA.,Вот моя реализация:
var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
var xml = new DOMParser().parseFromString('<xml></xml>', "application/xml");
var cdata = xml.createCDATASection('Some data & some more');
svg.appendChild(cdata);
log("Node Type: " + cdata.nodeName)
log("SVG: " + new XMLSerializer().serializeToString(svg));
// Utility function for output
function log(s) {
var output = document.getElementById('output');
if (output) {
output.innerHTML += new Option(s).innerHTML + '<br>';
} else {
console.log(s);
}
}
<div id="output"></div>
В Chrome и Firefox вывод XMLSerializer выглядит так, как ожидалось:
<svg xmlns="http://www.w3.org/2000/svg"><![CDATA[Some data & some more]]></svg>
Но в Internet Explorer CDATAзаписанный как простой текстовый узел:
<svg xmlns="http://www.w3.org/2000/svg">Some data & some more</svg>
Я попытался добавить перенос данных раздела CDATA в "", но это не работает, потому что оно будет экранировано. Могу ли я что-нибудь сделать, чтобы Internet Explorer правильно записал раздел CDATA?
Примечание. Фрагмент не работает в Internet Explorer, если встроенв Stackoverflow, но работает как отдельный файл.