См. https://bugzilla.mozilla.org/show_bug.cgi?id=612118 ( SVGLocatable.getBBox () завершается ошибкой, если только элемент SVG, к которому он применяется, не присоединен и не обработан ).
Вы должны поместить свой элемент в SVG, и style.display должен быть не- "none" .
См. Также Ошибка SVG 'getBBox' на вкладке jQueryUI
Я могу обойти проблему, разместив текст в невидимой области ( [- 1000; -1000] ):
function SVGlibText(x, y, text) {
this.value = document.createElementNS(SVGlibBase.svgNS, "text");
this.value.setAttribute("x", x);
this.value.setAttribute("y", y);
this.value.textContent = text;
}
SVGlibText.prototype.moveTo = function(x, y) {
this.value.setAttribute("x", x);
this.value.setAttribute("y", y);
return this;
}
SVGlibText.prototype.getW = function() {
return this.value.getBBox().width;
}
SVGlibText.prototype.getH = function() {
return this.value.getBBox().height;
}
var text = new SVGlibText(-1000, -1000, "Hello world!");
ширина / высота:
var textW = text.getW();
var textH = text.getH();
и размещение текста в нужном месте после вычисления с шириной / высотой (для определения положения текста требуется ширина / высота):
text.moveTo(off, off + textH);