2011-06-30 10 views
1

私のアプリケーションのキー画面には、さまざまな機能を実行するいくつかのiframeのHTMLページが含まれています。これらのすべてがjQueryにアクセスする必要があります。ローディング時間を短縮し、HTTPトラフィックを減らすために(jQueryコード自体が一度だけロードされていればキャッシュが助けになるかもしれませんが)私のページはとても多くのフレームのページでjQueryを一度だけロードする

<html> 
    <head> 
     <script src="jquery-1.5.js" type="text/javascript"></script> 
    </head> 
     <body> 
     <iframe src="other.html"></iframe> 
     <div id="foo"> ... stuff here ... </div> 
     </body> 
</html> 

ようであれば、otherの内側に、私はparent.$('#foo')を参照することができますが、それは親の「foo」という要素ではなく、子供のを参照します。子ドキュメントまたはその中の要素に親のjQueryの「インスタンス」を使用する方法はありますか?

+1

あなたは 'で$ =親[ 'jQueryの']を'みました'iframe'? – glortho

答えて

3

あなたが試してみました:

var $ = window.parent.$; 
$('#foo'); // parent's frame's #foo, is the same as "window.parent.$('#foo');" 

と:

var $ = window.parent.$; 
$('#foo', document); // this frame's #foo because the current document is given as context 
+0

私は私の質問でそれに取り組んでいると確信しています。 'parent。$( '#foo')'は親を指します。私は子供を参照したい。 – Dan

+0

あなたはそれを誤解していません。 $( 'foo')は親のdomです。しかし、私は、内側のiframeとdo $( 'foo')にjqueryをコピーする必要があると言っています。どちらが内側のdomを探すべきか。まず試してみてください。 –

+0

私はあなたが私が何について話しているかを見ることができるように更新しました。 $は、あなたが入っているフレームで動作するjqueryのlibs以上です。 –

3

各IFRAMEがjqueryと全く同じバージョンを参照していることを確認してください。それは一度ロードされ、ブラウザによってキャッシュされるべきです。 IFRAMESは両親のスクリプトにアクセスできません。

パフォーマンスを向上させるために、Jquery用のCDN(Google's CDNなど)の使用を検討することもできます。

+0

+1ベストソリューション –

+0

これについていくつか実験します。それは私が見たと思った動作ではありませんでしたが、ブラウザで強制的にキャッシングを無効にした可能性があります。 – Dan

+0

すべてのiframeがjavascriptのリクエストを同時に送信するため、キャッシュしないのだろうかと思います。ここでも興味があります。 –

0

を我々がそれを解決:

var window.jQuery = window.$ = function(selector, context) { 
    return window.parent.jQuery(selector, context?context:window.document) 
} 
関連する問題