У меня есть код, который извлекает сценарий svg-изображения с сервера через Ajax. Я могу вернуть текст изображения в браузер, но я не могу найти способ вставить его в DOM, который фактически отобразит его. Может кто-нибудь помочь с этим? Svg выглядит так:
<svg id="chart" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)">
<script type="application/ecmascript">
<![CDATA[
...lots of code, changes on each Ajax request
//]]>
</script>
<script type="application/ecmascript" xlink:href="js-on-server-1.js"/>
<script type="application/ecmascript" xlink:href="js-on-server-2.js"/>
</svg>
Я пробовал разные вещи. Если я это сделаю:
// xmlhttp.onreadystatechange:
addImage(xmlhttp.responseXML, "somewhere");
...
function addImage(txt, dst_id) {
var scr = document.createElement("div");
if("textContent" in scr)
scr.textContent = txt; // everybody else
else
scr.text = txt; // IE
document.getElementById(dst_id).appendChild(scr);
}
Затем Opera и Chrome ничего не делают, и F/F жалуется на "[object XMLDocument]". Если я изменил "responseXML" на "responseText", Opera/Chrome корректно отобразит весь текст svg (а не изображение) в нужном месте, и F/F все еще дает то же предупреждение. Я также попытался назначить ответ на innerHTML, но это ничего не делает. Есть идеи? Спасибо.
ИЗМЕНИТЬ
В ответ на ответ Phrogz'z ниже - я добавил два простых файла svg. Первый - это "стандартный" простой svg, отображающий круг. Второй - это скрипт svg, отображающий прямоугольник. Вы должны иметь возможность просматривать их непосредственно в любом браузере, кроме IE8-. Если я отредактирую код Phrogz'z для использования файла окружности (замените "stirling4.svg" на имя этого файла), то он будет работать, но если я хочу вместо этого скриптовый прямоугольник, это не так. Протестировано на F/F, Opera, Chromium, но все равно не работает (мой) Chromium.
Файл 1, круг:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
Файл 2, прямоугольник:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)">
<script type="application/ecmascript">
<![CDATA[
var svgDocument;
var svgns = "http://www.w3.org/2000/svg";
function init(evt) {
if(window.svgDocument == null)
svgDocument = evt.target.ownerDocument;
var lbox = svgDocument.createElementNS(svgns, "rect");
lbox.setAttributeNS(null, "x", 10);
lbox.setAttributeNS(null, "y", 10);
lbox.setAttributeNS(null, "width", 30);
lbox.setAttributeNS(null, "height", 30);
lbox.setAttributeNS(null, "stroke", "#8080ff");
lbox.setAttributeNS(null, "stroke-width", 2);
lbox.setAttributeNS(null, "fill-opacity", 0);
lbox.setAttributeNS(null, "stroke-opacity", 1);
lbox.setAttributeNS(null, "stroke-dasharray", 0);
svgDocument.documentElement.appendChild(lbox);
}
//]]>
</script>
</svg>
Предположительно, ответ заключается в том, чтобы получить script в заголовок