请先把问题看完,十分感谢。假设:
1.页面加载过程中会在一组iframe框架前N(N>0)行代码运行一个js function(假设为fun())。
2.该组iframe为连续的,比如:<div id="cont"></div>
<div class="left">
<iframe src="1.swf" id="iframe_1"></iframe>
</div>
<div class="middle">
<iframe src="2.swf" id="iframe_2"></iframe>
</div>
<div class="right">
<iframe src="3.swf" id="iframe_3"></iframe>
</div>3.fun()中包含动态加载js(在head下append一个新的script结点,取其中的变量)。问题:当fun()中有appendChild Dom对象的innerHTML中包含图片时(见示例),初次加载没有任何问题,但是刷新(F5或者点浏览器刷新按钮)会有很大的概率(60%)导致上述iframe组加载出乱,即,可能会出现 iframe_2,iframe_1加载了1.swf,iframe_3加载了3.swf.dom加载示例 var doc = document.CreateElement("DIV");
document.getElementById("cont").appendChild(doc);
doc.innerHTML =="<img src=\"1.gif\">";
备注,此问题仅在ie下出现,在360安全浏览器出现概率很高,且仅在静态页(动态页本机调试没有出现此类问题,至于在服务器上没有进行全面测试)。我的临时解决方法,1:把要添加的img先放在层cont里面,然后每次修改它的src。2,将iframe组中的没有iframe直接用document.write在页面上写出来。 以前两种方法经测试均有效(实现一种即可)。问有人了解这方面的缘由吗?或者说说你的看法。(此iframe为第三方的广告代码,请考虑过是否是他的代码问题,但简单测试过似乎没有影响,所以偏向于是自己代码(fun())的问题)。
1.页面加载过程中会在一组iframe框架前N(N>0)行代码运行一个js function(假设为fun())。
2.该组iframe为连续的,比如:<div id="cont"></div>
<div class="left">
<iframe src="1.swf" id="iframe_1"></iframe>
</div>
<div class="middle">
<iframe src="2.swf" id="iframe_2"></iframe>
</div>
<div class="right">
<iframe src="3.swf" id="iframe_3"></iframe>
</div>3.fun()中包含动态加载js(在head下append一个新的script结点,取其中的变量)。问题:当fun()中有appendChild Dom对象的innerHTML中包含图片时(见示例),初次加载没有任何问题,但是刷新(F5或者点浏览器刷新按钮)会有很大的概率(60%)导致上述iframe组加载出乱,即,可能会出现 iframe_2,iframe_1加载了1.swf,iframe_3加载了3.swf.dom加载示例 var doc = document.CreateElement("DIV");
document.getElementById("cont").appendChild(doc);
doc.innerHTML =="<img src=\"1.gif\">";
备注,此问题仅在ie下出现,在360安全浏览器出现概率很高,且仅在静态页(动态页本机调试没有出现此类问题,至于在服务器上没有进行全面测试)。我的临时解决方法,1:把要添加的img先放在层cont里面,然后每次修改它的src。2,将iframe组中的没有iframe直接用document.write在页面上写出来。 以前两种方法经测试均有效(实现一种即可)。问有人了解这方面的缘由吗?或者说说你的看法。(此iframe为第三方的广告代码,请考虑过是否是他的代码问题,但简单测试过似乎没有影响,所以偏向于是自己代码(fun())的问题)。
<script>
window.onbeforeunload=function(){
//判断动态添加的控件,一一删除
}
</script>
你不是说:“初次加载没有任何问题,但是刷新(F5或者点浏览器刷新按钮)会有很大的概率(60%)导致上述iframe组加载出乱”吗?我意思是说,当客户刷新前把所有动态添加的控件全部删除,让页面恢复初始状态,那么刷新时就像初次加载了。或者,你把fun()放在window.onload=function(){fun();}再执行
==============================================
我估计有一下因素:
1、“在一组iframe框架前N(N>0)行代码运行一个js function(假设为fun());动态加载js(在head下append一个新的script结点,取其中的变量)”。这样加载JS会有个未知延时;而此时框架是否存在是未知的;几个未知因素造成一定的概率出问题;所以建议你在页面完全加载后再执行fun();2、页面缓存是否有影响,你自己测试一下;最好屏蔽页面缓存
对的,严格讲不是乱,是串了,第二个显示和第一个一样的内容(或者说src)
页面缓存已屏蔽(no-cache?)且没有做任何压缩处理。那个fun()会对他后面的iframe组构成以上提到的影响。当页面很大(34K,6屏),如果加载完执行js的话页面显示会有影响。
var doc = document.CreateElement("DIV");
document.getElementById("cont").appendChild(doc);
doc.innerHTML =="<img src=\"1.gif\">";直接这样写:
document.getElementById("cont").innerHTML ="<img src=\"1.gif\">";