Làm cách nào để làm mới IFrame bằng Javascript?


Câu trả lời:


152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;

2
Nó làm việc cho tôi trong phiên bản này của Chrome:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth

3
FYI - Hiện có (kể từ tháng 1 năm 2013) một lỗi dự án Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ) khiến các bản cập nhật iframe thêm vào lịch sử tài liệu.
Robert Altman

Nếu vào iFrame thay đổi trang, phương pháp này mất điều hướng
Eduardo Cuomo

10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
lyfing

2
này một cách hoàn hảo làm việc cho tôi trong chromedocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar

104

Điều này sẽ giúp:

document.getElementById('FrameID').contentWindow.location.reload(true);

CHỈNH SỬA: Đã sửa tên đối tượng theo nhận xét của @ Joro.


3
Điều này không hoạt động trong IE9. Bạn nên sử dụng contentWindow thay vì contentDocument.
gotqn

1
Cảm ơn vì câu trả lời. Thêm vào đó, Nếu bạn tích cực phải gây ra một refresh đến một trang khác để khác trong iframe sau đó thay vì reload(true)bạn sẽ sử dụng này:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101

15
Điều này không hoạt động với iframe có nguồn gốc khác nhau (giao thức, tên máy chủ hoặc cổng).
michelpm

18

với điều kiện iframe được tải từ cùng một miền, bạn có thể làm điều này, điều này có ý nghĩa hơn một chút:

iframe.contentWindow.location.reload();

7

Hoạt động cho IE, Mozzila, Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);

4

Bạn có thể sử dụng phương pháp đơn giản này

function reloadFrame(iFrame) {

    iFrame.parentNode.replaceChild(iFrame.cloneNode(), iFrame);

}

2

Lấy cái này từ đây

var f = document.getElementById('iframe1');
f.src = f.src;

Nếu vào iFrame thay đổi trang, phương pháp này mất điều hướng
Eduardo Cuomo

2

2017:

Nếu nó trong cùng một miền, chỉ cần:

iframe.contentWindow.location.reload();

sẽ làm việc.


1

Đây là đoạn mã HTML:

<td><iframe name="idFrame" id="idFrame" src="chat.txt" width="468" height="300"></iframe></td>

Và mã Javascript của tôi:

window.onload = function(){
setInterval(function(){
    parent.frames['idFrame'].location.href = "chat.txt";
},1000);}

1

Đặt lại thuộc tính src trực tiếp:

iframe.src = iframe.src;

Đặt lại src với một dấu thời gian để chặn bộ nhớ cache:

iframe.src =  iframe.src.split("?")[0] + "?_=" + new Date().getTime();

Xóa src khi tùy chọn chuỗi truy vấn không thể thực hiện được (URI dữ liệu):

var wasSrc = iframe.src

iframe.onload = function() {
    iframe.onload = undefined;
    iframe.src = wasSrc;
}

1

Nếu bạn sử dụng đường dẫn băm (như mywebsite.com/#/my/url) có thể không làm mới khung khi chuyển đổi băm:

<script>
    window.onhashchange = function () {
        window.setTimeout(function () {
            let frame = document.getElementById('myFrame');
            if (frame !== null) {frame.replaceWith(frame);}
        }, 1000);
    }
</script>

Thật không may, nếu bạn không sử dụng thời gian chờ, JS có thể cố gắng thay thế khung trước khi trang tải xong nội dung (do đó tải nội dung cũ). Tôi không chắc về cách giải quyết khác.


0

Nếu bạn có Nhiều iFrame bên trong trang, thì tập lệnh này có thể hữu ích. Tôi cho rằng có một giá trị cụ thể trong nguồn iFrame có thể được sử dụng để tìm iFrame cụ thể.

var iframes = document.getElementsByTagName('iframe');
var yourIframe = null
for(var i=0; i < iframes.length ;i++){
    var source =  iframes[i].attributes.src.nodeValue;
    if(source.indexOf('/yourSorce') > -1){
        yourIframe = iframes[i];
    }   
}
var iSource = yourIframe.attributes.src.nodeValue;
yourIframe.src = iSource;

Thay thế "/ yourSource" bằng giá trị bạn cần.


0

Nếu URL của iframe của bạn không thay đổi, bạn chỉ có thể tạo lại nó.

Nếu iframe của bạn không có cùng nguồn gốc (lược đồ giao thức, tên máy chủ và cổng), bạn sẽ không thể biết URL hiện tại trong iframe, vì vậy bạn sẽ cần một tập lệnh trong tài liệu iframe để trao đổi thông báo với cửa sổ mẹ của nó ( cửa sổ của trang).

Trong tài liệu iframe:

window.addEventListener('change', function(e) {
  if (e.data === 'Please reload yourself') {
    var skipCache = true; // true === Shift+F5
    window.location.reload(skipCache);
  }
}

Trong trang của bạn:

var iframe = document.getElementById('my-iframe');
var targetOrigin = iframe.src; // Use '*' if you don't care
iframe.postMessage('Please reload yourself', targetOrigin);

-2

Bạn có thể sử dụng cái này:

Js:

function refreshFrame(){
    $('#myFrame').attr('src', "http://blablab.com?v=");
}

Html:

`<iframe id="myFrame" src=""></iframe>`

JS Fiddle: https://jsfiddle.net/wpb20vzx/


1
Câu hỏi không liên quan gì đến thư viện JavaScript phổ biến được gọi là jQuery.
John Weisz

Math.round () sẽ làm gì? Nó trông hoàn toàn vô dụng ở đây.
Davide R.

Xin chào, tôi đã sử dụng Math.round () Vì Một số Trình duyệt có thể cache Url - trang nên làm mới không hoạt động.
Ferhat KOÇER
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.