Wirecloud использует iframe для отображения html виджетов. Похоже, это создает проблемы для некоторых расширенных функций SVG, которые требуют ссылок на внутренние определения (см. также это обсуждение).
Код js, создающий svg, отлично работает в одностраничном приложении или представлении django. Сообщений об ошибках нет.
Весь код слишком велик, чтобы публиковать его здесь, но ключевые важные элементы:
var canvas = document.getElementById("canvas");
var svgns = "http://www.w3.org/2000/svg";
var svg = document.createElementNS(svgns, 'svg');
затем типичное определение (например, градиент):
var defs = document.createElementNS(svgns, "defs");
var linearGradient = document.createElementNS(svgns, "linearGradient");
и, наконец, использование определения
arc.setAttribute('style', "fill:url(about:srcdoc#linearGradient);");
Это ссылка (здесь на #linearGradient), которая не связана должным образом при создании объекта svg (при проверке созданной графики атрибут fill имеет значение null)
Обычно в svg вы просто используете url(#reference). Пробовали "about:blank" и "about:srcdoc" в качестве обходных путей, как было предложено в другом месте на SO но почему-то они не работают (хром/фаерфокс)
Кажется, это проблема с svg / iframe (не специфичным для wirecloud), но я не пытался визуализировать svg в iframe вне wirecloud, чтобы подтвердить это.
Если нет обходного пути, это ограничит тип графики SVG, которая может быть отображена в виджете wirecloud программно с использованием javascript. Возможно, сработают некоторые другие способы встраивания svg (получение его с сервера), но это не оптимальный дизайн для интерактивных виджетов, или, может быть, iframe альтернативный :-)