16

JavaScriptでiframeを更新する方法について、StackOverflowで多くの回答を見つけました。

例えば:

彼らはうまく働きます。ただし、iframeのページが最近変更された場合、更新ではこの変更は表示されません。指定されたiframeを強制的に更新して、新しいバージョンが表示されるようにする方法はありますか?

4

3 に答える 3

22

同一生成元の場合、iframeを使用してページ全体を強制的にリロードできます

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

↪jsFiddleで例を見る

↪MozillaDeveloperwikiの詳細情報


のページに送信されるHTTPヘッダーを制御できる場合は、そもそもページをキャッシュしないようにブラウザに指示iframeすることもできます。
さらに、ほとんどのWebページは、処理コードがないクエリ文字列のパラメータを完全に無視するため、クエリ文字列にランダムな値またはタイムスタンプを追加して、ブラウザがそれを「新しい」ページとして認識し、認識しないようにすることができます。キャッシュされたコピーを使用します。

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 &timestamp=...; otherwise, append ?timestamp=...
}

古いブラウザのサポートが重要な場合は、new Date().getTime()代わりに使用してください。Date.now()

于 2012-11-20T16:33:03.843 に答える
9

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;

あなたが現在持っているコードを見ることができれば、解決策を提供するのは簡単でしょう。

お役に立てば幸いです。

于 2012-11-20T16:23:26.567 に答える
3

私は何年もの間これに苦労しました。上記の方法の多くは、iframeがWebページと同じドメインにある場合に機能します。

ただし、iframeが別のドメインからのものである場合、これらのメソッドは機能しません(CORSポリシーのため)。

src属性の種類を変更しても機能しますが、iframeが適切に再描画されません。これは、iframeを使用してページにGoogleマップを埋め込んでいる場合に特に顕著になります。

私が最終的に発見したのは、次のことを行う必要があるということです。

1)iframeのソース属性を保存します

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() + '\">');
于 2019-07-03T16:18:21.883 に答える