1

我对嵌入标签中的 SVG 有一个小问题。我用 javascript 的 SVG 文件路径更新了 embed 标记的源。然后我必须更新 viewbox 属性以正确调整 SVG 的大小。

问题是 SVG 标签不可用,因为 javascript 执行速度太快。

一个例子 :

//Creation and insertion by JQuery
var EmbedTag = $("<embed id='zoomSVG' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto);

//This doesn't work : svgDoc is null
//SVG document recovery
var svgDoc = document.getElementById('zoomSVG').getSVGDocument();

This work :
setTimeout(function(){
   //SVG document recovery
   var svgDoc = document.getElementById('zoomSVG').getSVGDocument();
},100);

我不想使用 setTimeout 函数,因为超时值取决于硬件。有时 100 毫秒可以正常工作,但我必须找到一个通用的解决方案。

嵌入标签插入后,我可以通过 javascript 重新加载 DOM 吗?嵌入对象的加载完成后,嵌入标签是否存在现有事件?

谢谢你的帮助

4

3 回答 3

0

从嵌入的 onload 调用代码,例如

var EmbedTag = $("<embed id='zoomSVG' onload='init()' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto);

然后在 init 中实现您的代码(或任何您想调用的代码)

于 2013-02-22T09:34:38.193 回答
0

使用标签的 »onload« 事件来延迟您的功能,直到它被加载,而不是应该可用。

于 2013-02-22T09:34:22.883 回答
0

首先,您创建元素,然后尝试在 DOM 中再次找到它。

其次,javascript 不能阻止直到发生某些事情,而是使用回调。

像这样的东西:

var svgDoc = false;
// Create an element
var EmbedTag = $("<embed id='zoomSVG' type='image/svg+xml' width='500px' height='500px' />");
// Append it to the dom
EmbedTag.appendTo(zoomGalleryHisto);

// Load the svg file
$.get('file.svg', function() {
    // And then add it to the created element
    EmbedTag.attr('src', 'file.svg');
    svgDoc = EmbedTag.getSVGDocument();
});
于 2013-02-22T09:45:42.233 回答