2011-09-13 5 views
3

iframeを動的に作成して、フォームベースのAPI呼び出しを行う場所として使用します。

$('<iframe>').attr({ 
    name : "secret_sending_iframe", 
    src : "#", 
    style : "visibility:hidden; width:0px; height:0px;" 
    }).appendTo("#recordingControl"); 

これは、私の$(document).ready()が再び発生するという副作用があります。これは、私のiframeが準備ができていると私に伝えているので理解できますが、今度は、この新しいドキュメントを準備しておく準備ができている必要があります。 .ready()への最初の呼び出しであることを伝えるために、iframeの否定的な存在をテストする以外の準備が整ったiframeであることを伝える方法はありますか?

BTW - $(document).ready()呼び出しで$( "iframe")をテストすると、期待していなかった[]が返されました。だから私のための最善の解決策は、以下を参照してくださいwindow.location.hrefを使用することでした...

+1

は、動的にはなりません$()を再度呼び出させます。あなたはここに何か他のことをしています –

+0

@ Scottのコメントに続いて、JSファイルもiframeソースに含めている可能性が高いです。 –

+0

したがって、iframeのsrcタグは "#" idを使用して作成し、空のページにリンクする必要がなくなります。私は "#" srcタグが囲みページを再度読み込んでいなければならないと思います。 – jottos

答えて

3

各フレームは、独自の別のJavaScriptコンテキストを持っており、それ自身の別の$(document).ready()です。だから、$(document).ready()が同じ文書に複数回呼び出されていない限り、同じ電話番号が表示されているとは思わない。それ以外の場合、呼び出されるたびに別の文書になります。

コードが同じで、どちらが呼び出されているかを知る必要がある場合は、いつでもwindow.locationオブジェクトを調べて、現在のページ/フレームを確認することができます。状況を理解するために、それぞれに:

console.log(window.location.href); 

そして、あなたはどちらかを分けることができます。

+0

これはうまくいきます。なぜなら、hrefの2回目には、srcタグを設定するのと同じように、最後に "#"という文字があるからです。 (問題のポストの例を参照) – jottos

+0

それはそれを説明します。 – jfriend00

0

これに対処するための通常の方法は、$(ドキュメント).ready()関数の前に、あなたのJSにグローバル変数を設定することであり、そのためのテスト中:IFRAMEを作成

var run_doc_ready = 0; 

$(document).ready(function(){ 
    ... 
    if (!run_doc_ready) { 
     ... 
     run_doc_ready = 1; 
    } 
    ... 
}); 
+0

自分自身のコードに複数の '.ready()'呼び出しを挿入しない限り、自分自身を自分で保護する必要はないと思います。 jQueryコードを見ると、すでにドキュメントごとに複数のready()ハンドラが起動されているのを防ぐことができます。 – jfriend00

+0

@ jfriend00 - 同じページを再度読み込んでいるiframeから複製準備呼び出しが来ています。私は "#"というsrcタグを使用しています。 – jottos

関連する問題