我在 Stack Overflow 上找到了很多关于如何使用 JavaScript 刷新 iframe 的答案。
例如:
他们工作正常。但是,如果 iframe 中的页面最近发生了更改,则刷新不会显示此更改。有什么方法可以强制对指定的 iframe 进行硬刷新,以便显示新版本?
我在 Stack Overflow 上找到了很多关于如何使用 JavaScript 刷新 iframe 的答案。
例如:
他们工作正常。但是,如果 iframe 中的页面最近发生了更改,则刷新不会显示此更改。有什么方法可以强制对指定的 iframe 进行硬刷新,以便显示新版本?
如果iframe
是same-origin,您可以使用强制重新加载整个页面
iframe.contentWindow.location.reload(true);//The argument "true" will force all loaded resources, such as images, to be re-checked for expiry at the server
↪ Mozilla Developer wiki 上的更多信息
iframe
,您还可以指示浏览器一开始就不要缓存它。if(iframe.src.indexOf('timestamp') > -1){ // Check if we still have a timestamp in the URL from a previous refresh
iframe.src = iframe.src.replace(/timestamp=[^&]+/, 'timestamp=' + Date.now()); // And if so, replace it instead of appending so the URL doesn't grow too long.
}else{ // Else we will append the timestamp
iframe.src += (iframe.src.indexOf('?') > -1 ? "&" : "?") + 'timestamp=' + Date.now();// If the URL contains a ?, append ×tamp=...; otherwise, append ?timestamp=...
}
如果对旧版浏览器的支持很重要,请使用new Date().getTime()
而不是。Date.now()
使用 URL 重新加载 iFrame,但给它一个唯一的 ID...
var rand = Math.floor((Math.random()*1000000)+1);
var iframe = document.getElementById('youriframe');
iframe.src = "http://www.yourpage.com/yourpage.html?uid="+rand;
如果我们可以看到您当前拥有的代码,那么为您提供解决方案会更容易。
希望它有所帮助。
我为此挣扎了很久。如果您的 iframe 与您的网页位于同一域中,则上述许多方法都有效。
但是,如果您的 iframe 来自另一个域,则这些方法不起作用(由于 CORS 策略)。
更改 src 属性类型的作品,但不会导致 iframe 的正确重绘。如果您使用 iframe 在页面中嵌入 Google 地图,这一点尤其明显。
我最终发现的是,您需要:
1)保存iframe的source属性
2) 从 DOM 中移除 iframe
3) 在步骤 1 中保存的源属性末尾添加一个随机查询参数。
4) 将 iframe 添加回 DOM(具有唯一源属性)。
//save the source of the iframe minus the unique identifier
tempElementSrc = $('#the-iframe').attr('src').substring(0,$('#the-iframe').attr('src').lastIndexOf('&', $('#the-iframe').attr('src')));
//remove the iframe
$('#the-iframe').remove();
//readd the iframe with the new source including random query string
$('#container-id').append('<iframe width=\"100%\" id=\"iframe-id\" src=\"' + tempElementSrc + '&' + Date.now() + '\">');