[解決済み] Iframeコンテンツが読み込まれたことを検出する (クロスブラウザ)
質問
iframe とそのコンテンツがいつ読み込まれたかを検出しようとしていますが、うまくいきません。私のアプリケーションは、親ウィンドウのテキスト フィールドにいくつかの入力を受け取り、iframe を更新して「ライブ プレビュー」を提供します。
私は、iframeのロードイベントが発生したときに検出するために、次のコード(YUI)で開始しました。
$E.on('preview-pane', 'load', function(){
previewBody = $('preview-pane').contentWindow.document.getElementsByTagName('body')[0];
}
preview-pane」は私のiframeのIDで、イベントハンドラをアタッチするためにYUIを使用しています。しかし、コールバックでボディにアクセスしようとすると(iframeの読み込み時に)失敗します。これは、イベントハンドラの準備ができる前にiframeが読み込まれるからだと思います。このコードは、iframeを生成するPHPスクリプトをスリープさせることによって、iframeの読み込みを遅らせると動作します。
基本的に、私は、iframe がロードされ、そのドキュメントが準備されたときに検出するためのブラウザ間の正しいアプローチは何であるかを尋ねているのです。
どのように解決するのですか?
は、iframe が読み込まれ、そのドキュメントが準備できたことを検出するために、どのようにすればよいのでしょうか?
フレーム内のスクリプトから iframe 自身に通知させることができれば理想的です。たとえば、親の関数を直接呼び出して、準備ができたことを知らせることができます。フレームをまたいだコード実行では、予期しない順序で物事が起こる可能性があるため、常に注意が必要です。別の方法として、独自のスコープで 'var isready= true;' を設定し、親スクリプトで 'contentWindow.isready' を検出します(検出されなかったらオンロード ハンドラを追加します)。
何らかの理由で iframe ドキュメントを協力させることが現実的でない場合、伝統的なロード レース問題が発生します。
<img id="x" ... />
<script type="text/javascript">
document.getElementById('x').onload= function() {
...
};
</script>
は、スクリプトが実行されるまでにアイテムが既にロードされていないことを保証するものではありません。
ロードレースから抜け出す方法は
-
IE では、'readyState' プロパティを使用して、何かがすでにロードされているかどうかを確認できます。
-
JavaScript が有効なときのみ利用可能なアイテムを持つことが許容される場合、動的に作成し、ソースを設定し、ページに追加する前に 'onload' イベント関数を設定することができます。この場合、コールバックが設定される前に読み込まれることはありません。
-
マークアップにそれを含めるという昔ながらの方法です。
<img onload="callback(this)" ... />
HTML のインライン 'onsomething' ハンドラーは、ほとんどの場合、間違ったものであり、避けるべきものですが、この場合、最も悪い選択肢であることもあります。
関連
-
[解決済み] モバイルブラウザの検出
-
[解決済み] ウェブページがiframe内に読み込まれているのか、それともブラウザのウィンドウに直接読み込まれているのかを識別するにはどうしたらよいですか?
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] 貼り付けイベントでクリップボードのデータを取得するJavaScript (クロスブラウザ)
-
[解決済み】すべてのモダンブラウザでページのズームレベルを検出する方法は?
-
[解決済み] ブラウザがファイルのダウンロードを受信したことを検出する
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] Node.jsのES6クラスをrequireで作る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除