IE8将来自缓存的动态iframe内容重新加载到错误的iframe中

时间:2011-12-23 00:17:51

标签: javascript windows internet-explorer iframe internet-explorer-8

我的网页上有多个iframe。每个iframe都在调用一些javascript,它会动态地将新的iframe写入父窗口的文档中。

这适用于首页加载。但是,如果页面在IE8(及更早版本)中刷新,则动态生成的iframe之一将从缓存加载到父页面上的一个硬编码插槽中。请参阅以下示例:

http://www.risingspiral.com/ie8-iframe-refresh/

在IE8中进行刷新(可能需要几次尝试),Spot 2_将从缓存加载到spot3.html的iframe中。 spot3.html根本不会被调用。

我已经针对此处描述的IE动态iframe刷新问题进行了保护:

http://buildingonmud.blogspot.com/2010/06/ie-iframe-refresh-and-back-button.html

但似乎仍有问题。同样有趣的是,iframes spot2.html和spot3.html之间似乎总是出现这个问题(至少对我而言)。

我尝试了很多不同的配置来试图解决这个问题。所以,我正在寻找新的建议。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我遇到了非常类似的问题,一旦加载后动态生成的iframe卡在第一个src上,即使父页面在每次重新加载时更改了iframe的src属性,iframe仍会加载第一个。

经过几个小时的战斗,我发现这只是< IE8刷新错误,如果页面导航到使用链接或通过在地址栏中输入URL,一切都按预期工作。因此,只要您不刷新页面,或通过再次输入地址来刷新页面,您就可以了。


更新

似乎可以通过再次设置iframe的SRC属性来解决问题,例如

 iframe.src = iframe.src;

这似乎迫使< IE8实际上尊重给定的URL。

答案 1 :(得分:0)

老问题但问题仍然存在。我现在面对它。问题是我无法控制何时加载iframe,因为它是由异步插入页面的脚本生成的。

经过一些黑客攻击后,我选择在超时后刷新帧。这是我找到的最佳解决方案。

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ 
   var ieversion=new Number(RegExp.$1);
   if (ieversion<=8){
        setTimeout(function(){
              iframeReload();
        }, 1000);

        function iframeReload() {
            $("iframe").each(function(index) {
                $(this)[0].src = $(this)[0].src;
            });
        }
   }
}

答案 2 :(得分:0)

我有同样的问题并通过每次创建具有不同ID的iframe来修复它(仅在IE11上测试,但希望这可以解决所有版本上的问题):

iframe.id = iframe.name = "iframe$" + Math.floor(Math.random() * new Date().getTime());

请注意,设置名称可能没有任何影响(要进行测试;我只能告诉设置名称只能解决问题)