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

caf*_*ffo 229 javascript iframe

我想重新加载一个<iframe>使用JavaScript.我发现到目前为止最好的方法是将iframe的src属性设置为自身,但这不是很干净.有任何想法吗?

Ed.*_*Ed. 213

document.getElementById('some_frame_id').contentWindow.location.reload();
Run Code Online (Sandbox Code Playgroud)

要小心,在Firefox中,window.frames[]不能通过id索引,而是通过名称或索引

  • 如果它不在同一个域中,则不起作用. (96认同)
  • 实际上,这种方法在Chrome中对我不起作用.没有'contentWindow'属性.虽然可以使用document.getElementById('some_frame_id').location.reload(); 适用于FF和Chrome的方法是document.getElementById('iframeid').src = document.getElementById('iframeid').src (23认同)
  • `frames [1] .location.href.reload()`和`window.frames ['some_frame_id'].location.href.reload()`也可以用 (6认同)
  • @MikeBevz 也可以使用 Jquery 选择器访问 location.reload 吗? (2认同)
  • 绝对可以,但是使用相同的域来源策略== a (2认同)

小智 187

document.getElementById('iframeid').src = document.getElementById('iframeid').src
Run Code Online (Sandbox Code Playgroud)

它将重新加载iframe,甚至跨域!经过IE7/8,Firefox和Chrome测试.

  • `document.getElementById('iframeid').src + ='';`也可以:http://jsfiddle.net/Daniel_Hug/dWm5k (65认同)
  • 请注意,如果iframe src中有一个哈希值(例如``http:// example.com/#thing``),则不会重新加载帧.我已经使用了在哈希之前向URL添加像``?v2``这样的一次性查询参数的方法. (8认同)
  • 之前它曾与Chrome配合使用,但现在已停止使用Chrome 19 ... (3认同)
  • 如果iframe的源已被*更改*,因为它被添加到页面,你到底做了什么? (3认同)
  • 这会导致 iframe 滚动回顶部。 (2认同)

小智 60

如果使用jQuery,这似乎工作:

$('#your_iframe').attr('src', $('#your_iframe').attr('src'));
Run Code Online (Sandbox Code Playgroud)

我希望stackoverflow不会太难看.

  • @Seagrass我想你的意思是:`var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;` (11认同)
  • 这,没有jQuery:```var iframe = document.getElementById("your_iframe"); iframe.src = src; ``` (6认同)

scu*_*ffe 13

window.frames['frameNameOrIndex'].location.reload();
Run Code Online (Sandbox Code Playgroud)

  • 只有当您拥有iframe的相同域时,它才有效 (12认同)

Yoh*_* AI 13

添加空白空间也会自动重新加载iFrame.

document.getElementById('id').src += '';
Run Code Online (Sandbox Code Playgroud)


big*_*lep 8

由于原始策略相同,因此在修改指向其他域的iframe时无效.如果您可以定位较新的浏览器,请考虑使用HTML5的跨文档消息传递.您可以在此处查看支持此功能的浏览器:http://caniuse.com/#feat=x-doc-messaging.

如果您无法使用HTML5功能,那么您可以按照此处列出的技巧进行操作:http://softwareas.com/cross-domain-communication-with-iframes.该博客条目也很好地定义了问题.


Lia*_*m M 7

我只是在chrome中遇到这个问题,唯一可行的方法是移除和更换iframe。例:

$(".iframe_wrapper").find("iframe").remove();
var iframe = $('<iframe src="' + src + '" frameborder="0"></iframe>');
$.find(".iframe_wrapper").append(iframe);
Run Code Online (Sandbox Code Playgroud)

非常简单,其他答案未涵盖。


Pat*_*lph 5

src在我的情况下,简单地替换iframe 元素的属性并不令人满意,因为在加载新页面之前,人们会看到旧内容。如果您想提供即时的视觉反馈,这会更有效:

var url = iframeEl.src;
iframeEl.src = 'about:blank';
setTimeout(function() {
    iframeEl.src = url;
}, 10);
Run Code Online (Sandbox Code Playgroud)