使用新的 SVGweb 代码(通过 Ajax)更改 DOM 后
<script type="image/svg+xml">
<svg>
...
</svg>
</script>
需要执行这个:svgweb._onDOMContentLoaded();
但是之前需要在svg-uncompressed.js或者svg.js的核心源码中注释一行
svg-uncompressed.js 来自
if (arguments.callee.done) {
return;
}
到
if (arguments.callee.done) {
//return;
}
svg.js:找到并删除这个:
arguments.callee.done=true;
或替换为
arguments.callee.done=false;
编辑:
另一个适用于 IE9 的修复:
对于 svg.js
从
var a=document.getElementById("__ie__svg__onload");if(a){a.parentNode.removeChild(a);a.onreadystatechange=null}
到
var IEv=parseFloat(navigator.appVersion.split("MSIE")[1]);if(IEv<9){var a=document.getElementById("__ie__svg__onload");if(a){a.parentNode.removeChild(a);a.onreadystatechange=null;a=null;}}
对于 svg-uncompressed.js
从
// cleanup onDOMContentLoaded handler to prevent memory leaks on IE
var listener = document.getElementById('__ie__svg__onload');
if (listener) {
listener.parentNode.removeChild(listener);
listener.onreadystatechange = null;
listener = null;
}
到
// cleanup onDOMContentLoaded handler to prevent memory leaks on IE
var IEv=parseFloat(navigator.appVersion.split("MSIE")[1]);
if (IEv<9) {
var listener = document.getElementById('__ie__svg__onload');
if (listener) {
listener.parentNode.removeChild(listener);
listener.onreadystatechange = null;
listener = null;
}
}