JsとjQueryにいくつかのコードがあるページがあり、非常にうまく機能します。しかし残念ながら、私のサイトはすべて非常に古く、フレームを使用しています。そのため、フレーム内にページを読み込んだときに、$(document).ready()
が起動しません。
私のフレームセットは次のようになります:
<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize>
<frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0">
<frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">
</frameset>
私のページはmain
フレームに読み込まれます。私は何をすべきか?
私は別のコメントで言及された方法を試しました:
$("#frameName").ready(function() {
// Write you frame on load javascript code here
} );
そしてそれは私にとってはうまくいきませんでした。
これはしました:
$("#frameName").load( function() {
//code goes here
} );
イベントはそれほど速くは発生しませんが、画像とcssも読み込まれるまで待機します。
私はこれが古いトピックであることを知っています。しかし、このページにアクセスする人を助けるために、ここに私の解決策があります:
$($("#frameName")[0].contentWindow.document).ready(function() {
// Write you frame onready code here
});
フレームに対してonload
イベントを発生させる場合は、次の手順に従います。
id
とname
を各<frame>
タグに割り当てます。 id
属性とname
属性の両方の値が同じであることを確認してください。
次のコードを使用して、フレームのonload
イベントを発生させます。
$("frameName").ready(function() {
// Write your frame onload code here
}
以下も私のために働いた:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
$(window.parent.frames[0].document).ready(function() {
// Do stuff
});
</script>
[0]はそれがドキュメントの最初のフレームであることを示し、[1]は2番目のフレームであることを示します。これは、マークアップを制御できず、ドキュメントの準備ができている場合に特に便利です。
これは、iframeのDOMContentLoadedで発生したのと同様の問題だと思います。
私が書いた それについてのブログ投稿 。
私はこの投稿で長い間働いてきました...これが私の解決策です。
test.html
<!DOCTYPE HTML>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>');
$('#frame_content').attr('src', 'test2.html');
$('#frame_content').load(function()
{
if('${"#header"}' != '') {
$("#header", frame_content.document).remove();
}
});
if($('#frame_content').complete) $('#frame_content').trigger("load");
</script>
</head>
</html>
test2.html
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<div id="header">You will never see me, cause I have been removed!</div>
</body>
</html>
Info.aspxページ内にjQueryコードを配置しようとしましたか?
それが最善の解決策かどうかはわかりませんが、$(document).ready()
を削除して本体を保持すると、すべてが完全に機能します。
何をしようとしているのかわかりませんが、フレーム外で動作するさらに古いクラシックaspアプリがあり、最近jQuery機能を追加したところ、うまく機能しています。 $(document).ready()はフレーム内で正常に機能しますが、別のフレームでDOMを参照する場合は、フレームのonloadイベントを使用して、フレームのDOMがロードされたことを通知する必要があります。確かに、私はiFrameを使用しましたが、概念は同じである必要があります。
この回答は遅れるかもしれませんが、この返信は私のような誰かを助けるかもしれません...
これは、ネイティブJavascriptコードを介して実行できます-
ifrm2 = var ifrm2 = document.getElementById('frm2');
if (ifrm2.contentDocument.readyState == 'complete') {
//here goes the code after frame fully loaded
}
//id = frm2 is the id of iframe in my page
マークアップを変更する必要はありません。セレクターを修正するだけです。そのはず:
$("frame[name='main']").ready(function(){..});
ない
$("#frameName").ready(function(){..});
注:jQueryreadyイベントは複数回発生するようです。ロジックに問題がないことを確認してください。