刷新iFrame(缓存问题)

Ram*_*din 19 html javascript iframe

我们遇到了一个奇怪的问题,我们不确定究竟是什么导致它.让我详细说明这个问题.假设我们有两个不同的html页面a.html和b.html.还有一个用index.html编写的小脚本:

<html>

<head>
    <script>
    function reloadFrame(iframe, src) {
        iframe.src = src;
    }
    </script>
</head>

<body>
    <form>
        <iframe id="myFrame"></iframe>
        <input type="button" value="Load a.html" onclick="reloadFrame(document.getElementById('myFrame'), 'a.html')">
        <input type="button" value="Load b.html" onclick="reloadFrame(document.getElementById('myFrame'), 'b.html')">
    </form>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

服务器组件不断更新文件a.html和b.html.问题是两个文件的内容在服务器端成功更新.如果我们打开,我们可以看到更新的更改,但客户端获取的旧内容未显示更新的更改.

任何的想法?

Sim*_*lli 24

在a.html和b.html中添加此项

<head>
    <meta http-Equiv="Cache-Control" Content="no-cache" />
    <meta http-Equiv="Pragma" Content="no-cache" />
    <meta http-Equiv="Expires" Content="0" />
</head>
Run Code Online (Sandbox Code Playgroud)

强制禁止缓存检查

  • @Ben - 没有任何迹象表明在这个问题中使用了XHTML.例如,输入也没有结束标记. (3认同)

Pek*_*ica 10

如果您可以向这些HTML文件添加服务器端指令,则可以发送相应的标头以防止缓存:

确保所有浏览器都不会缓存网页(我认为共识是第二个答案是最好的,而不是被接受的答案)

Simone的答案已经涉及Meta标签.

一个便宜的快速技巧是添加一个随机数作为GET参数:

page_1.html?time=102398405820
Run Code Online (Sandbox Code Playgroud)

如果每次请求都改变(例如使用当前时间),每次重新加载都会被强制.


Hom*_*osa 8

尝试以下内容:

<script>
    var frameElement = document.getElementById("frame-id");
    frameElement.contentWindow.location.href = frameElement.src;
</script>
Run Code Online (Sandbox Code Playgroud)

这将强制重新加载iframe,即使它是由浏览器缓存的

  • 有没有记录在任何地方? (2认同)