jQueryでiframeをリロードする


150

ページに2つのiframeがあり、一方が他方に変更を加えましたが、もう一方のiframeは更新するまで変更を表示しません。このiframeをjQueryで簡単に更新する方法はありますか?

<div class="project">
  <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>

3
iframeドキュメントは別のドメインにありますか?
Pekka

iFrameに表示されるサイトのコードにアクセスできますか?
Matt Asbury

さらにコードを表示-両方のiFrameのhtml、および変更に使用しているJavaScriptコード。あなたがこれまでに含めたものだけを見て問題が何であるかを理解するのは難しいです。
ベン・リー

私はコードにアクセスできますが、iframeは別のドメインにあります
Matt Elhotiby 2010年

@マット、フレームは他のドメインのフレームの内容を変更することはできません。:このクロスドメインスクリプティングの制限を回避するには、この参照方法の例についてはsoftwareas.com/cross-domain-communication-with-iframes
ベン・リー

回答:


174

iframeが別のドメインにない場合は、次のようにすることができます。

document.getElementById(FrameID).contentDocument.location.reload(true);

ただし、iframeは別のドメインにあるため、iframeのcontentDocumentプロパティへのアクセスは拒否されます。同一生成元ポリシー

ただし、コードがiframeの親ページで実行されている場合は、src属性をそれ自体に設定することで、クロスドメインiframeを強制的に再読み込みできます。このような:

// hackishly force iframe to reload
var iframe = document.getElementById(FrameId);
iframe.src = iframe.src;

あなたが別のiframeからのiframeをリロードしようとしている場合、あなたは、運の外にあるものはない可能性。


19
彼の質問は、JavaScriptではなくjQueryでこれを実現する方法でした。正しいjQueryの答えについては、以下のSime Vidasの投稿を参照してください。
FastTrack

2
このスクリプトは私のIE9 では機能しませ(他のバージョンを確認しないでください)。contentDocumentcontentWindowに変更します。すると、IE9で機能します。document.getElementById(FrameID).contentWindow.location.reload(true);
Han He

3
これは私のために動作しませんでした、しかし、私のようなものでした iframe.contentDocument.location=iframe.src; 素晴らしい仕事を代わりに
glitchymeを

3
このjqueryは私にとって魅力のように機能しました: $('#map_iframe').attr('src', $('#map_iframe').attr('src'));
Topher Hunt

234
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });

2
+1はIDへの参照が1つしかないため、一方を変更する可能性は低くなりますが、もう一方は忘れます
Matthew Lock

1
@NicolaeSurduまた、これ:(function (elem) { elem.src = elem.src; }($('#iframe')[0]));
ime Vidas 2013

1
他の変更から1つのiframeをリロードするには、次のように変更します:$( '#iframe'、window.parent.document).attr( 'src'、function(i、val){return val;});
Tillito 2013年

Internet Explorerでは、JavaScriptのようなソリューションdocument.getElementById(FrameID).contentWindow.location.reload(true);が正しく機能していません。この答えはうまくいきます。
BeyazKaplan

54

jqueryを使用することもできます。これは、AlexがJQueryだけを使用して提案したものと同じです。

 $('#currentElement').attr("src", $('#currentElement').attr("src"));

3
このソリューションの利点は、読みやすさです。Vidasの回答ほど効率的ではありませんが、何が起こっているかは明らかです。
Robert Egginton、2016

私も同意します。また、このソリューションの読みやすさを好む傾向があります
Yonatan Naor 2018年

var f = $('#iframeX') ; f.attr( 'src', f.attr( 'src' ))維持および読み取りがより堅牢になる可能性があります
Andreas Dietrich

9

jQueryでiframeをリロードする

iframe内にリンクを作成し、id = "reload"で言ってから、次のコードを使用します

$('#reload').click(function() {
    document.location.reload();
});

そして、あなたはすべてのブラウザで行くのが良いです。

HTMLでiframeをリロードします(Javaスクリプトは必要ありません)。

よりシンプルなソリューションがあります:(FF、Webkit)でjavaScriptなしで動作します

iframeの内側にアンカーを作成するだけです

   <a href="#" target="_SELF">Refresh Comments</a>

このアンカーをクリックすると、iframeが更新されます

ただし 、パラメータをiframeに送信する場合は、次のようにします。

  <a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a>

-> target = "_ SELF"がそれを行うため、ページURLは必要ありません


9

jqueryでこれを使うことができます:

$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));

現在のiframeを更新したい場合は、このソリューションを使用してください。ありがとう!
DaemonHK 2018

5

アレックスの答えを往復させるだけですが、jQuery

var currSrc = $("#currentElement").attr("src");
$("#currentElement").attr("src", currSrc);


3

上記の例はすべて、現在のURLではなく、元のsrcでiframeをリロードするだけだと確信しています。

$('#frameId').attr('src', function () { return $(this).contents().get(0).location.href });

現在のURLを使用して再読み込みする必要があります。


2

クロスドメインの場合は、ロケーションハッシュが変更されても、srcを同じURLに戻すだけでは、常にリロードがトリガーされるとは限りません。

Twitterボタンのiframeを手動で作成しているときにこの問題に遭遇しました。URLを更新しても更新されません。

Twitterのようなボタンの形式は次のとおりです。 .../tweet_button.html#&_version=2&count=none&etc=...

TwitterはURLにドキュメントフラグメントを使用しているため、ハッシュ/フラグメントを変更してもソースはリロードされず、ボタンターゲットには新しいajaxでロードされたコンテンツが反映されませんでした。

リロードを強制するためのクエリ文字列パラメータを追加できます(例: "?_=" + Math.random() しかし、特にTwitterのアプローチがキャッシュを有効にしようとしたこの例では、帯域幅を浪費します。

ハッシュタグでのみ変更されるものをリロードするには、要素を削除するか、を変更してsrc、スレッドが終了するまで待ってから、再度割り当てる必要があります。ページがまだキャッシュされている場合は、ネットワークヒットは必要ありませんが、フレームの再読み込みがトリガーされます。

 var old = iframe.src;
 iframe.src = '';
 setTimeout( function () {
    iframe.src = old;
 }, 0);

更新:このアプローチを使用すると、不要な履歴アイテムが作成されます。代わりに、毎回iframe要素を削除して再作成します。これにより、このback()ボタンが期待どおりに機能し続けます。タイマーがないのもいいですね。


2

Alexの答えを往復させるだけですが、jQueryを使用します。

var e = $('#myFrame');
    e.attr("src", e.attr("src"));

または、小さな関数を使用できます。

function iframeRefresh(e) {
    var c = $(e);
        c.attr("src", c.attr("src"));
}

お役に立てば幸いです。



1

これは簡単なJavaScriptで可能です。

  • iFrame1で、bodyタグのonloadで呼び出されるJavaScript関数を作成します。設定したサーバー側の変数をチェックするので、iframe1で特定のアクションを実行しない限り、iframe2でJavaScript関数を実行しようとしません。これは、ボタンを押すことで発生する関数として設定することも、iframe1で設定することもできます。
  • 次に、iframe2には、下にリストする2番目の関数があります。iframe1の関数は基本的に親ページに移動し、window.frames構文を使用してiframe2でJavaScript関数を起動します。必ずではなく、iframe2 のid/ を使用しnameてくださいsrc
//function in iframe1
function refreshIframe2()
{
    if (<cfoutput>#didValidation#</cfoutput> == 1)
    {   
         parent.window.frames.iframe2.refreshPage();
    }
}

//function in iframe2
function refreshPage()
{   
    document.location.reload();
}

1

//ページ上のすべてのiframeを更新する

var f_list = document.getElementsByTagName('iframe');

 for (var i = 0, f; f = f_list[i]; i++) {
                            f.src = f.src;
                        }

0
    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];

クロスブラウザソリューションは次のとおりです。

    ifrX.src = ifrX.contentWindow.location

これは特に、<iframe>が<form>のターゲットである場合に役立ちます。


なぜjQueryですか?シンプルなjsが利用可能な場合
bortunac

0

解決しました!機能する唯一のソリューション(少なくともASP.NET/IE/FF/Chrome)を共有するために、stockoverflowに登録します!アイデアは、divのinnerHTML値を現在のinnerHTML値で置き換えることです。

HTMLスニペットは次のとおりです。

<div class="content-2" id="divGranite">
<h2>Granite Purchase</h2>
<IFRAME  runat="server" id="frameGranite" src="Jobs-granite.aspx" width="820px" height="300px" frameborder="0" seamless  ></IFRAME>
</div>

そして私のJavaScriptコード:

function refreshGranite() {           
   var iframe = document.getElementById('divGranite')
   iframe.innerHTML = iframe.innerHTML;
}

お役に立てれば。


この回答の複数のエラー:1. ASP.NETコンポーネントでrunat="server"はないため、適用されません。2.なぜすべて大文字なのIFRAMEか?3.ディメンション属性値には単位がありません。4. frameborder非推奨
Raptor

0

使用する必要があります

[0] .src

iframeのソースを見つけるには、そのURLが親の同じドメインにある必要があります。

setInterval(refreshMe, 5000);
function refreshMe() {
    $("#currentElement")[0].src = $("#currentElement")[0].src;   
}

0

あなたはこのようにそれを行うことができます

$('.refrech-iframe').click(function(){
        $(".myiframe").attr("src", function(index, attr){ 
            return attr;
        });
    });

-5

以下の解決策は確実に機能します:

window.parent.location.href = window.parent.location.href;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.