乐闻世界logo
搜索文章和话题

重新加载刷新 iframe 的最佳方式是什么?

6 个月前提问
3 个月前修改
浏览次数185

6个答案

1
2
3
4
5
6

要重新加载或刷新iframe,通常有几种方法可以做到,但是哪一种是“最佳”方式可能取决于具体的使用场景和需求。下面是一些常用的方法,以及它们的一个示例:

1. 使用 JavaScript 设置 src 属性

你可以通过JavaScript设置iframesrc属性为其当前的URL来刷新该iframe。这种方法简单直接。

javascript
function refreshIframe() { var iframe = document.getElementById('myIframe'); iframe.src = iframe.src; }

优点

  • 易于理解和实现。
  • 适用于大多数浏览器和情境。

缺点

  • 如果iframesrc属性是一个会引起POST请求的URL,这种方法可能导致重新提交表单。

2. 使用 location.reload()

你还可以通过直接调用iframe内容窗口的location.reload()方法来刷新iframe

javascript
function refreshIframe() { var iframe = document.getElementById('myIframe'); if (iframe.contentWindow) { iframe.contentWindow.location.reload(true); } }

优点

  • 直接调用location.reload()可以确保页面是从服务器重新加载的,不会从浏览器缓存中加载。

缺点

  • 如果页面有通过POST方式传递的数据,重新加载可能会导致数据重新提交。

3. 改变 src 属性的查询字符串

有时候,你可能想要避免POST数据的重新提交,可以通过修改src属性的查询字符串参数来达到刷新的目的。

javascript
function refreshIframe() { var iframe = document.getElementById('myIframe'); var currentSrc = iframe.src; var newSrc = currentSrc.split('?')[0]; iframe.src = newSrc + '?' + new Date().getTime(); }

优点

  • 通过改变URL来避免提交POST数据。
  • URL的变化会强制浏览器从服务器上重新加载页面,而不是显示缓存的版本。

缺点

  • 如果iframe的URL中已经有查询字符串,这种方法需要更复杂的处理来保持原有的参数不变。

综合考虑

在选择最合适的方法时,你需要考虑几个因素:

  • 如果你的iframe是包含表单的页面,要防止重新提交表单。
  • 是否需要绕过浏览器缓存。
  • iframe的URL是否已经包含查询字符串。

在实际应用中,我通常会先评估这些因素,并选择最适合当前情况的方法。例如,如果我在开发一个用于显示实时数据的仪表板,并且数据是通过GET请求获取的,我可能会选择第三种方法来避免浏览器缓存,并确保用户总是看到最新的数据。

2024年6月29日 12:07 回复

document.getElementById('some_frame_id').contentWindow.location.reload();

注意,在 Firefox 中,window.frames[]不能通过 id 进行索引,而是通过名称或索引进行索引

2024年6月29日 12:07 回复

document.getElementById('iframeid').src = document.getElementById('iframeid').src

它将重新加载iframe,甚至跨域!使用 IE7/8、Firefox 和 Chrome 进行测试。

注意:正如 @user85461 所提到的,如果 iframe src URL 中包含哈希(例如),则此方法不起作用http://example.com/#something

2024年6月29日 12:07 回复

如果使用 jQuery,这似乎有效:

shell
$('#your_iframe').attr('src', $('#your_iframe').attr('src'));
2024年6月29日 12:07 回复

将空字符串附加到srciFrame 的属性也会自动重新加载它。

shell
document.getElementById('id').src += '';
2024年6月29日 12:07 回复

window.frames['frameNameOrIndex'].location.reload();

2024年6月29日 12:07 回复

你的答案