Проблема, с которой я столкнулся, заключается в том, что я пытаюсь встроить iframe в элемент svg, используя jquery, и не могу получить нарисованный iframe.Вот пример переполнения стека, очень похожий на тот, который я хочу, за исключением того, что я хотел бы просто отобразить HTML-фрагмент:
Возможно встроить видео YouTube в SVG?
мой код jquery выглядит следующим образом:
function showTextToolbar(selectedGroup){
console.log("here");
var x = +$($(selectedGroup).children().get(0)).attr("x");
var y = +$($(selectedGroup).children().get(0)).attr("y") - 30;
console.log(x);
console.log(y);
var newFOSvg = svgEditor.canvas.addSvgElementFromJson({
"element": "foreignobject",
"id": "textTool",
"attr":{
"x":x,
"y":y,
"width":"360",
"height":"30"
}
});
var newIframeSvg = svgEditor.canvas.addSvgElementFromJson({
"element": "iframe",
"attr":{
"width":"360",
"height":"30",
"src":"http://www.google.com",
"xmlns":"http://www.w3.org/1999/xhtml"
}
});
newFOSvg.appendChild(newIframeSvg);
canv.getElem("svgcontent").appendChild(newFOSvg);
}
По сути, этот код использует несколько моих предварительно созданных функций (addSvgElementFromJson), чтобы добавить элементы в корень SVG, который уже присутствует вхолст.Я просто использую фиктивную ссылку, чтобы увидеть, появится ли рамка.Во время выполнения, когда я вызываю функцию, ошибок нет, и раздел svg обновляется правильно, но ничего не отображается.
Вот svg, обновленный с помощью iframe и нескольких других объектов:
<svg width="600" height="800" xmlns="http://www.w3.org/2000/svg">
<g>
<title>Layer 1</title>
<g id="0ea5f198be28b719853b18c7390003e7">
<rect id="svg_1" width="350" height="50" fill="#ffffff" stroke="#22C" stroke-width="0.5" x="20" y="40"/>
</g>
</g>
<foreignobject height="30" width="360" y="10" x="20">
<iframe xmlns="http://www.w3.org/1999/xhtml" src="http://www.google.com" height="30" width="360"/>
</foreignobject>
</svg>
Мне кажется, что iframe вставлен правильно, но на моем холсте svg ничего не отображается.Буду признателен за любую помощь.
Обновление: перемещая элемент чужого объекта внутри начальной группы, я могу получить его для рисования, но он пуст.Iframe по-прежнему не отображается.Кроме того, создав фиктивную страницу со встроенным iframe, я могу видеть содержимое iframe:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Frameset//EN">
<html>
<body>
<iframe src="test.svg" width="600" height="600"></iframe>
</body>
</html>
И test.svg содержит:
<svg width="600" height="800" xmlns="http://www.w3.org/2000/svg">
<g>
<title>Layer 1</title>
<g id="0ea5f198be28b719853b18c739002923" name="text_free">
<rect y="40" x="20" stroke-width="0.5" stroke="#22C" fill="#ffffff" height="50" width="350" name="border"/>
<text y="60" x="40" xml:space="preserve" text-anchor="left" font-family="serif" font-size="12" name="data" opacity="100" stroke-width="0" stroke="#000000" fill="#000000"></text>
</g>
<g id="0ea5f198be28b719853b18c7390003e7" name="text_free">
<rect y="90" x="20" stroke-width="0.5" stroke="#22C" fill="#ffffff" height="50" width="350" name="border"/>
<text y="110" x="40" xml:space="preserve" text-anchor="left" font-family="serif" font-size="12" name="data" opacity="100" stroke-width="0" stroke="#000000" fill="#000000"></text>
</g>
<foreignObject height="500" width="500" y="200" x="70">
<iframe xmlns="http://www.w3.org/1999/xhtml" src="http://www.google.com" height="500" width="500"/>
</foreignObject>
</g>
</svg>