ページに2つのiframeがあり、一方が他方に変更を加えましたが、もう一方のiframeは更新するまで変更を表示しません。このiframeをjQueryで簡単に更新する方法はありますか?
<div class="project">
<iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>
ページに2つのiframeがあり、一方が他方に変更を加えましたが、もう一方のiframeは更新するまで変更を表示しません。このiframeをjQueryで簡単に更新する方法はありますか?
<div class="project">
<iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>
回答:
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をリロードしようとしている場合、あなたは、運の外にあるものではない可能性。
document.getElementById(FrameID).contentWindow.location.reload(true);
iframe.contentDocument.location=iframe.src;
素晴らしい仕事を代わりに
$('#map_iframe').attr('src', $('#map_iframe').attr('src'));
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });
(function (elem) { elem.src = elem.src; }($('#iframe')[0]));
document.getElementById(FrameID).contentWindow.location.reload(true);
が正しく機能していません。この答えはうまくいきます。
jqueryを使用することもできます。これは、AlexがJQueryだけを使用して提案したものと同じです。
$('#currentElement').attr("src", $('#currentElement').attr("src"));
var f = $('#iframeX') ; f.attr( 'src', f.attr( 'src' ))
維持および読み取りがより堅牢になる可能性があります
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は必要ありません
jqueryでこれを使うことができます:
$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));
クロスドメインの場合は、ロケーションハッシュが変更されても、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()ボタンが期待どおりに機能し続けます。タイマーがないのもいいですね。
$('IFRAME#currentElement').get(0).contentDocument.location.reload()
これは簡単なJavaScriptで可能です。
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();
}
解決しました!機能する唯一のソリューション(少なくとも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;
}
お役に立てれば。
runat="server"
はないため、適用されません。2.なぜすべて大文字なのIFRAME
か?3.ディメンション属性値には単位がありません。4. frameborder
非推奨