[紧急求助]js对iframe加载的影响

anjing5566 2010-05-27 11:08:45
请先把问题看完,十分感谢。

假设:
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())的问题)。



...全文
656 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
badboyzl 2010-07-13
  • 打赏
  • 举报
回复
蛋疼~~
xk1126 2010-06-04
  • 打赏
  • 举报
回复
学习了
wang_zhilin 2010-06-04
  • 打赏
  • 举报
回复
学习。。。顶
anjing5566 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 theforever 的回复:]

在HTML里禁止网页使用缓存可能有用。
[/Quote]

恩,这个已经禁止过了。没有效果
mahsky 2010-06-04
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
楼主可以试一下把SWF换成图片,或者是其它一些SWF。
有时SWF的问题也可能会导致这种现象。
  • 打赏
  • 举报
回复
呵呵,看来不贴全代码还真是不好猜啊
  • 打赏
  • 举报
回复
在HTML里禁止网页使用缓存可能有用。
anjing5566 2010-06-02
  • 打赏
  • 举报
回复
内存泄漏?不太像。

不过内存问题的可能性比较大
打字员 2010-05-29
  • 打赏
  • 举报
回复
加载iframe的时候用appendChild插入元素改变了DOM的结构;

刷新之后可能内存中还是存在上一次JS加载的控件,所以页面的DOM结构发生了变化,并不像是重新生成的。

所以在重新加载页面的时候,首先判断要加载的控件是否存在,如果是存在则先删除。

你这个问题让我想到了IE下的“内存泄露”。

不过没试验过,以上只是个人猜想
  • 打赏
  • 举报
回复
不用
var doc = document.CreateElement("DIV");
document.getElementById("cont").appendChild(doc);
doc.innerHTML =="<img src=\"1.gif\">";

直接这样写:
document.getElementById("cont").innerHTML ="<img src=\"1.gif\">";
anjing5566 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 toury 的回复:]

引用 3 楼 anjing5566 的回复:

楼上能说稍微详细点吗?

先讨论是哪部分导致的问题,然后有什么根本的解决方法,3ks


你不是说:“初次加载没有任何问题,但是刷新(F5或者点浏览器刷新按钮)会有很大的概率(60%)导致上述iframe组加载出乱”吗?我意思是说,当客户刷新前把所有动态添加的控件全部删除,让页面恢复初始状态,那么刷新时就像初次加载了。

或者,你……
[/Quote]

页面缓存已屏蔽(no-cache?)且没有做任何压缩处理。

那个fun()会对他后面的iframe组构成以上提到的影响。当页面很大(34K,6屏),如果加载完执行js的话页面显示会有影响。
anjing5566 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sundotlei 的回复:]

用js动态给iframe 赋src 试试.

跟在 类似于 doc.innerHTML =="<img src=\"1.gif\">"; 代码后面.

应该是缓存引起的.
[/Quote]


不能动态给iframe赋值,应为这个iframe是第三方的广告代码。

不想误导大家转向广告系统是否有问题,特意隐去了这方面的说明,用普通的src代替。

iframe里面加载的是一个flash广告文件(swf格式)

现在的问题是,不是想简单地解决问题了事,事实上我用的那两个临时解决方法到目前为止一直有用。但对于这种状况的成因不是很了解。希望共同探讨一下。
anjing5566 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 net_lover 的回复:]

你说iframe 加载的src是乱的?不是原先设置的src的内容?
[/Quote]

对的,严格讲不是乱,是串了,第二个显示和第一个一样的内容(或者说src)
toury 2010-05-27
  • 打赏
  • 举报
回复
偷懒的办法:
<script>
window.onbeforeunload=function(){
//判断动态添加的控件,一一删除
}
</script>
anjing5566 2010-05-27
  • 打赏
  • 举报
回复
发现上面代码写错了几个地方,请大家略过...
leemiki 2010-05-27
  • 打赏
  • 举报
回复
飘过,赚点积分,O(∩_∩)O哈哈~
sundotLei 2010-05-27
  • 打赏
  • 举报
回复
用js动态给iframe 赋src 试试.

跟在 类似于 doc.innerHTML =="<img src=\"1.gif\">"; 代码后面.

应该是缓存引起的.
toury 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 anjing5566 的回复:]

楼上能说稍微详细点吗?

先讨论是哪部分导致的问题,然后有什么根本的解决方法,3ks
[/Quote]

你不是说:“初次加载没有任何问题,但是刷新(F5或者点浏览器刷新按钮)会有很大的概率(60%)导致上述iframe组加载出乱”吗?我意思是说,当客户刷新前把所有动态添加的控件全部删除,让页面恢复初始状态,那么刷新时就像初次加载了。

或者,你把fun()放在window.onload=function(){fun();}再执行
==============================================
我估计有一下因素:
1、“在一组iframe框架前N(N>0)行代码运行一个js function(假设为fun());动态加载js(在head下append一个新的script结点,取其中的变量)”。这样加载JS会有个未知延时;而此时框架是否存在是未知的;几个未知因素造成一定的概率出问题;所以建议你在页面完全加载后再执行fun();

2、页面缓存是否有影响,你自己测试一下;最好屏蔽页面缓存
孟子E章 2010-05-27
  • 打赏
  • 举报
回复
你说iframe 加载的src是乱的?不是原先设置的src的内容?
加载更多回复(1)

87,997

社区成员

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

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