如何删除HTML中的SVG

likeajin 2011-04-27 09:26:22
如题,我在HTML中用embed标签引入了一个SVG文档,现在想在HTML的unload事件中删除这个SVG文档,主要原因是IE这个王八蛋。我刷HTML时,HTML中的SVG并没有被unload,就导致了每刷新一次HTML,IE占用内存就增加一次,一直不停……
...全文
465 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
likeajin 2011-04-27
  • 打赏
  • 举报
回复
谢谢楼上,这个我试过了,没用,关键就是svg文档没有删除,svg文档也有unload事件,我在事件中设置了一个弹出,在刷新HTML时firefox,opera,chrome都能够正常弹出,就IE不行。我的理解就是加载HTML时把svg文档也加载到内存中,那三个浏览器在刷新HTML时先从内存中删除HTML文档和svg文档,然后再加载HTML文档、再加载svg文档。现在问题就是在卸载HTML文档时IE不会主动去卸载HTML中的svg文档,所以内存就一直在增加,我就想找个方法手动去卸载掉那个svg文档,但是又查不到资料……也不知道理解的对不对……
rainsilence 2011-04-27
  • 打赏
  • 举报
回复
var embeds = document.getElementsByTagName("embed");

while(embeds.length > 0) {
embeds[0].parentNode.removeChild(embeds[0]);
}
rainsilence 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 likeajin 的回复:]

莫非真是loveajin(这个哥们也喜欢阿金? : ) )所说的,我在svg里写了个函数,把最前面定义的变量全部指向null,再刷新时内存基本不增加,不过第一次还是加了些,虽然量不大,不过后面到是基本不增加了,OYE,再测试测试
[/Quote]

呵呵。。的确是个好方法。。。
likeajin 2011-04-27
  • 打赏
  • 举报
回复
莫非真是loveajin(这个哥们也喜欢阿金? : ) )所说的,我在svg里写了个函数,把最前面定义的变量全部指向null,再刷新时内存基本不增加,不过第一次还是加了些,虽然量不大,不过后面到是基本不增加了,OYE,再测试测试
rainsilence 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 likeajin 的回复:]

谢谢楼上,我把代码贴出来,麻烦你帮我看看,谢谢。
svg:
XML code

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg
xmlns="h……
[/Quote]

在Html的unload或者beforeunload里调用。。。
IE有个bug,可能你remove了,内存仍然没有释放。
toury 2011-04-27
  • 打赏
  • 举报
回复
试试window.onbeforeunload()
likeajin 2011-04-27
  • 打赏
  • 举报
回复
悲剧,还是谢谢你,先试试你的建议吧……
loveajin 2011-04-27
  • 打赏
  • 举报
回复
表示帮不到你……不过建议你试试在html中调用svg的函数,在svg里写个函数释放掉svg里对象、函数的引用变量,可能是这个问题。另外,在IE中貌似svg的unload事件不能触发吧,我是个菜菜,我没捕获过svg的unload事件……
likeajin 2011-04-27
  • 打赏
  • 举报
回复
谢谢楼上,我把代码贴出来,麻烦你帮我看看,谢谢。
svg:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
onload="init(evt);" onmousemove="findNearest(evt);" onunload="unload();">
<style type="text/css"><![CDATA[
svg{
fill:none;
stroke:black;
stroke-width:1;
}
]]>
</style>
<script type="text/javascript" xlink:href="svg.js"></script>
<rect x="-1" y="-1" width="105%" height="105%" fill="none" pointer-events="all"></rect>
<g id="content">
</g>
</svg>

SVG中引用的javascript:

var Ext,myExt,SVG={},doc,root,ns;
/**
* 查找最近的点,并获取描述
* @param {} e
*/
findNearest=function(e){
var el=e.target,
child=el.firstChild,
desc;
while(child){
if(child.nodeName=='desc'){
try{
alert(getText(child));
desc=Ext.decode(getText(child));
}
catch(ex){alert(ex.message);}
break;
}
child=child.nextSibling;
}
};
/**
* svg文档加载初始化,主要为svg文档与html文档建立起联系
* @param {} e
*/
init=function(e){
doc=e.target.ownerDocument;
root=doc.documentElement;
ns=root.namespaceURI;
doc.window=window;
var parent=window.parent;
Ext=parent.Ext;
myExt=parent.myExt;
Ext.applyIf(Number.prototype,parent.Number.prototype);
Ext.applyIf(Date.prototype,parent.Date.prototype);
};
unload=function(evt){
alert('unloadSVG');
};
/**
* 加载数据
*/
loadData=function(cfg,w,h){
……
};
loveajin 2011-04-27
  • 打赏
  • 举报
回复
楼主,好像没有这种情况啊,我引用svg也用embed标签,但是不会在刷新的时候增加IE占用的内存……不知道你的svg结构是什么样的

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧