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

4
我有一个页面上有多个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

但仍然存在问题。有趣的是,问题似乎总是发生在 iframe spot2.html 和 spot3.html 之间(至少对我来说是这样)。

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

有任何想法吗?


我也刚遇到了这个问题。需要修复!或者你已经想出了解决方案吗? - Ryan
3个回答

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;
            });
        }
   }
}

0

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

在与此斗争了几个小时后,我发现这只是< IE8刷新bug,如果使用链接导航到页面或通过将URL输入地址栏进行导航,则一切都按预期工作。因此,只要您不刷新页面,或者通过再次输入地址来刷新它,您应该没问题。


更新:

问题似乎已经通过重新设置iframe的SRC属性来解决,例如:

 iframe.src = iframe.src;

这似乎强制<IE8实际尊重给定的URL。


0

我曾经遇到过同样的问题,通过每次使用不同的ID创建iframe来解决它(仅在IE11上测试过,但希望这可以解决所有版本的问题):

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

请注意,设置名称可能没有任何效果(需要进行测试;我只能告诉您仅设置名称并不能解决问题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接