在 SVG 中进行 Ajax 更新会破坏 getBBox,有解决方法吗?
我有一个 SVG 页面,其中包含一些复杂的图表;我正在尝试添加通过按需 Ajax 调用插入更多复杂性的代码。这大部分工作正常,但插入的节点行为不正常。特别是 getBBox() 在某些元素上失败,在 Firefox 中,错误是这样的:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMSVGLocatable.getBBox]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost:1555/svg-scripts.js :: addBackground :: line 91" data: no]
问题似乎与此有关: https://bugzilla.mozilla.org/show_bug.cgi?format=multiple& ;id=612118 但就我而言,对象肯定已渲染,我可以看到它们。
任何见解或解决方法表示赞赏。不幸的是,我无法轻松地指出一个示例,因为这依赖于服务器交互。
I have an SVG page with some complex diagrams; I'm trying to add code that inserts even more complexity via an Ajax call on demand. This is mostly working, but the inserted nodes don't behave properly. In particular getBBox() fails on some elements, in Firefox the error is something like this:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMSVGLocatable.getBBox]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost:1555/svg-scripts.js :: addBackground :: line 91" data: no]
The problem seems to be related to this one:
https://bugzilla.mozilla.org/show_bug.cgi?format=multiple&id=612118
but in my case the objects are definitely rendered, I can see them.
Any insight or workarounds appreciated. Unfortunately I can't easily point to an example since this relies on a server interaction.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=612118 (SVGLocatable.getBBox() 会失败,除非附加并呈现它所应用的 SVG 元素)。
您必须将元素放入 SVG,并且 style.display 必须为非“none”。
另请参阅 SVG 'getBBox' 在 jQueryUI 选项卡中失败
我的解决方法问题通过将文本放置在不可见区域([-1000; -1000]):
获取宽度/高度:
并在计算宽度/高度后将文本放置到必要的位置(其中需要宽度/高度以确定文本的位置):
See https://bugzilla.mozilla.org/show_bug.cgi?id=612118 (SVGLocatable.getBBox() fails unless the SVG element it is applied to is attached and rendered).
You must put your element to SVG and style.display must be non-"none".
See also SVG 'getBBox' fails in a jQueryUI tab
I workaround issue by placing text at invisible area ([-1000; -1000]):
getting width/height:
and placing text to necessary position after calculation with width/height (which require width/height in order to determine position of text):
,也会出现
NS_ERROR_FAILURE
错误消息如果您尝试计算直接附加到 HTML DOM 并且没有父级
的
。示例(您可以在 Scratchpad 中运行代码,在 Firefox 中运行SVGElement
的边界框 SVGSVGElementShift+F4
):text
直接附加到body
这会失败,因为
< ;html>
不允许。text
附加到svg
这有效。
The
NS_ERROR_FAILURE
error message, oralso occurs if you try to calculate the bounding box of an
SVGElement
which is attached directly to the HTML DOM and does not have a parentSVGSVGElement
. Examples (you can run the code in Scratchpad,Shift+F4
in Firefox):text
directly attached tobody
This fails because
<html><body><g></g></body></html>
is not allowed.text
attached tosvg
This works.