我的网页上有多个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之间似乎总是出现这个问题(至少对我而言)。
我尝试了很多不同的配置来试图解决这个问题。所以,我正在寻找新的建议。
有什么想法吗?
答案 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());
请注意,设置名称可能没有任何影响(要进行测试;我只能告诉设置名称只能解决问题)