4

iframe を div に動的にロードしています。これらの iframe には、その機能のために jQuery が必要です。すべての iframe に jQuery を含めないようにするために、iframe ジェネレーターで jQuery を参照するだけでした (ロードされたすべての iframe の先頭に同じコードが表示されます)。

var jQuery = window.parent.$;  // The parent is the document that will house the iframes
var $ = jQuery;

これは Chrome で問題なく機能し、jQuery を 1 回ロードするだけでパフォーマンスが大幅に向上します。ただし、Firefox と IE の両方が、メモリ不足エラーをスローしてスクリプトを削除する前に、狂ったようにメモリ リークを開始します (どちらもメモリ使用量のピークは約 1 GB です)。

編集: jQuery 1.7 および jQueryUI 1.10.3 (ただし、iframe のロード時に jqUi は使用されません)

4

1 に答える 1

1

jQuery は、選択時に要素を探す範囲を表すコンテキストを保持することに注意してください。デフォルトのコンテキストは、window.documentjQuery を含むページの です。

親フレームの jQuery グローバルを参照する場合、コンテキストは依然として親の のままwindow.documentです。これは、実行するすべての選択が親フレームで行われることを意味します。これは、望ましい結果になることはほとんどありません。

これは、ケース (つまり、2 つのフレームのプロトコル、ドメイン、およびポート) によっては、SOP制限のために奇妙な動作につながる可能性があります。

最善の策は<script>、子フレームの親と同じ jQuery リソースを参照するタグを動的に挿入することです。ほとんどの場合、ブラウザはキャッシュにファイルを持っています。

ちなみに、質問へのコメントとして@undefinedによってリンクされた回答は、文字列セレクターのみが正しく機能することを許可し、jQuery 関数が取ることができる他のすべての引数タイプを考慮しないため、ひどい考えです (たとえば、関数ドキュメントのオンロードにバインドされます)。

于 2013-09-23T10:05:41.353 に答える