bug原形:
在IE6或IE7下运行安装了swfaddress2.3的html页面,用查看http请求的工具,发现<body>以下的页面内容会重复加载。
如图所示:
把swfaddress-2.3.js,与swfaddress-2.2.js对比,发现一个明显的不同。
在定义下面这个变量时,2.3版是在body的innerHTML里增加iframe
var _load = function() {
if (!_loaded) {
_loaded = true;
//IE版本小于8时
if (_msie && _version < 8) {
var iframe = '<iframe id="' + ID + '" src="javascript:false;" width="0" height="0"></iframe>';
_d.body.innerHTML = iframe + _d.body.innerHTML;
_iframe = _d.getElementById(ID);
......
......
而2.3版之前是把iframe作为body的一个新的子节点
if(_1d.isIE()){
document.body.appendChild(document.createElement("div")).innerHTML="<iframe "+_45+" src=/""+ (_2c["html"]?_24.replace(//.js(/?.*)?$/,".html")+"?"+_2d():"javascript:false;")+"/"></iframe>";
......
......
而IE6,IE7对于innerHTML解析不是很完善,它会重复加载。
所以要解决这个bug,只能仿照2.3版之前那样的写法,把iframe作为一个子节点写在body内容最后。
_d.body.appendChild(document.createElement("div")).innerHTML = iframe ;
bug修改后,如图所示: