子ウィンドウのドキュメント読みこみ完了を知りたい

[新着] Webテンプレートを仮オープンしました



0   名前: 骸骨 : 2006/09/19(火) 11:01  ID:epbuSRJL
失礼いたします。

var wi = window.open( 'resEdit.html', 'imgViewer' );
while( wi.document.readyState != 'complete' );

というようなスクリプトは、CPUにとってよくないような気がするのですが、
開いた子ウィンドウがドキュメントを取得できたかどうかを知るには
他に方法はありますでしょうか?

XMLHttpRequest を使用する方法も検討したのですが、
HTML を丸ごとロードさせるため、例えば <div> の中に
innerHTML するというのも(ヘッダやボディも入れてしまうので)駄目な気がします
(パースしてボディ内のノードを移植するというのを最終手段に考えてはいますが…)。

また、
wi.onload = function(){ ... }
も検討してはいますが(今のところ未成功)、なるべくならば
いじりたくはありません(自分のイベントが入っている可能性もあるため)。

何か、よいお知恵はありませんでしょうか?

1   名前: 元帥 : 2006/09/19(火) 11:01  [URL]  ID:tFAqXEg9
タイマーを使って、確認する間隔を広くとってみてはどうでしょう?

2   名前: m035 ◆Wpzr1YKOiq : 2006/09/19(火) 11:01  [URL]  ID:OdMuVJsu
親の関数を子ウィンドウのonloadで呼び出すというのはどうでしょう。

//親
var wi=window.open('resEdit.html','imgViewer');
function child_open(){
alert("child loaded!");
}
//子
onload=opener.child_open;

3   名前: 牛若 : 2006/09/19(火) 11:01  ID:axeOEsXi
子画面ではonload使いたくないわけでしょ。
レンダリング完了だけの問題ならボディセクションの最下部にスクリプト埋め込んで
適当なアロワンス取りたければ500ミリくらいのタイマつけて親画面に返してやれば?

4   名前: 骸骨 : 2006/09/19(火) 11:01  ID:epbuSRJL
回答ありがとうございます。

なるほど、タイマーがいいのかも知れませんね。
関数をその場で直接書いてあげれば分かりづらくなることもないですよね
(でも引数の問題とかいろいろありそうですが…)。

ところで、while() のやり方なんですけど、
ネット検索でかなりそういうのがヒットするのですけど
結構大丈夫なものなんでしょうか。

また、今回は構造そのものを見直すという選択もあるので、いろいろ考えてみますが、
同じような状態になった時、スマートに解決できないのはちょっと悲しいです…。
いろんな操作に同期モード(ブロッキングモード)なんかがあればいいんですけど…。

参考になりました。感謝いたします。
しかし、Webプログラミングはしんどい…。
さっくりいった試しがないです。

5   名前: ラブーフ : 2006/09/19(火) 11:01  ID:mGMjLPPf
whileの使用が気になって、しかも、readyState までこぎつけたんであれば、
readyStateChange と組み合わせてみてはどうでしょうか。タイマーを持ち出すこともないです。
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onreadystatechange.asp

 whileと比べて、CPU負荷がどうかまでは調べていませんが。

一覧へ戻る