天涯 · Notion 使用教程:如何在 ...· 1 年前 · |
温柔的香烟 · Zenvo TS1/TSR/Arash ...· 1 年前 · |
正直的荔枝 · 要做全优生的它实力到底如何?动态试驾腾势 ...· 1 年前 · |
坏坏的针织衫 · 阿沛·阿旺晋美:永记毛主席的恩情_西藏自治区 ...· 1 年前 · |
我们遇到了一个奇怪的问题,我们不确定到底是什么原因造成的。让我来详细说明一下这个问题。假设我们有两个不同的html页面a.html和b.html。还有一个用index.html编写的小脚本:
<html>
<script>
function reloadFrame(iframe, src) {
iframe.src = src;
</script>
</head>
<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>
服务器组件不断地更新文件a.html和b.html。问题是两个文件的内容都在服务器端成功更新。如果我们打开,我们可以看到更新的更改,但客户端获取的是较旧的内容,没有显示更新的更改。
有什么想法吗?
在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>
强制不进行缓存检查
对于这个问题,一种可能的解决方案是向a.html和b.html的调用传递一个“缓存参数”。例如
HTML
<input type="button" value="Load a.html" onclick="cacheSafeReload('a.html');">
Javascript
function cacheSafeReload(urlBase) {
var cacheParamValue = (new Date()).getTime();
var url = urlBase + "?cache=" + cacheParamValue;
reloadFrame(document.getElementById('myFrame'), url);
}
如果您可以将服务器端指令添加到这些HTML文件中,则可以发送适当的标头以防止缓存:
Making sure a web page is not cached, across all browsers (我认为共识是第二个答案是最好的,而不是公认的答案)
Simone的答案已经涉及到Meta标签。
一个便宜的快速技巧是添加一个随机数作为GET参数:
page_1.html?time=102398405820
如果每次请求都会发生变化(例如使用当前时间),那么每次都会强制重新加载。
尝试如下所示:
<script>
var frameElement = document.getElementById("frame-id");
frameElement.contentWindow.location.href = frameElement.src;
</script>
这将强制重新加载iframe,即使它已由浏览器缓存
霍梅罗·巴博萨的解决方案效果很好。在我的例子中,页面上有不同数量的iframe,所以我执行了以下操作:
$('.some_selector').each(function () {
var $randid = Math.floor(Math.random() * 101);
$(this).attr({'id': 'goinOnaSafari-' + $randid});
var $frame = document.getElementById('goinOnaSafari-' + $randid);
$frame.contentWindow.location.href = $frame.src;
});
我想把 Vishwas comment 作为一个单独的答案,扩展 Pekka’s answer
//ensure iframe is not cached
function reloadIframe(iframeId) {
var iframe = document.getElementById(iframeId);
var d = new Date();
if (iframe) {
iframe.src = iframe.src + '?ver=' + d.getTime();
//alternatively frameElement.contentWindow.location.href = frameElement.src; //This will force the iframe to be reloaded even if it was cached by the browser
坏坏的针织衫 · 阿沛·阿旺晋美:永记毛主席的恩情_西藏自治区人民政府 1 年前 |