刷新页面时错误的内容包含IE中的iframe

时间:2014-03-17 10:17:13

标签: javascript html internet-explorer iframe

在测试页面' index.html'其内容: Test link

<h2 id="at"></h2>
<div id="a"></div>
<h2 id="bt"></h2>
<div id="b"></div>
<h2 id="ct"></h2>
<div id="c"></div>
<h2 id="dt"></h2>
<div id="d"></div>

<script>
    var wraps = [document.getElementById('a'), document.getElementById('b'), document.getElementById('c'), document.getElementById('d')],
        titles = [document.getElementById('at'), document.getElementById('bt'), document.getElementById('ct'), document.getElementById('dt')],
        arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
        l,
        i,
        r;

    for (i = 0; i < 4; i++) {
        l = arr.length;
        r = Math.floor(Math.random() * l);
        titles[i].innerHTML = 'iframe ' + arr[r].toUpperCase();
        wraps[i].innerHTML = '<iframe src="' + arr[r] + '.html" frameborder="1" width="600" height="60"></iframe>';
        arr.splice(r, 1);
    }
</script>

其中a-g.html文件包含示例代码。当首次在IE中打开index.html(我在IE 11中测试)时,它会显示正确的内容。然后刷新此页面,这些iframe&#39; src属性发生了变化,但内容没有变化,只是保持与第一次加载相同。

刷新时,此问题仅存在于IE中。

我找到了解决它的两个选项:

1)首先将iframe添加到页面,然后用js设置它的src;

2)在http serer中禁用缓存

但这两个选项并不好,我想知道有没有其他方法可以解决问题。

一些失败的测试:

1)add random string to url

2)disable cache by adding meta tag in iframe's head

1 个答案:

答案 0 :(得分:3)

您可以在iframe的网址末尾添加(伪)随机字符串。

这样的事情:

var randValue = (new Date()).getTime();
wraps[i].innerHTML = '<iframe src="' + arr[r] + '.html?cache=' + randValue + '" frameborder="1" width="600" height="60"></iframe>';

<强>更新

似乎IE正在从其缓存中提供iFrame的内容。 如果您在IE中检查网络面板,则会显示HTTP status code 304

您可能希望查看本文Internet Explorer IFRAME Browser History Lost on Reload。这可能会为您提供解决问题的方法。