window.openで開いたページの完了を親ページ取得

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



0   名前: ちびっこ : 2007/03/28(水) 19:25  ID:3hEdXHwr sub-9g
始めまして、ちびっこと申します。
Javascript初心者なのですが、色々調べまくっても分からなかったため、
助言頂ければ幸いです。


【何をしたいのか】
Window.open()関数にてサブウィンドウを表示させたとき、そのサブウィンドウページの
表示が完了したら、親ページ側でアクションを起こしたい。
なので、どうやってwindow.open後に待てばいいのかを知りたいです。
基本的に親ページだけで処理を完結して、サブウィンドウからは何もしない。


【現在の状況】
現在は固定秒数待って、大よそ表示できただろうなぁ…って時に処理を走らせているだけで、
大きな画像があったりするので回線が細い場合はページ読み込みが終わってなかったりする。


【何をしてみたのか】
whileループでサブウィンドウのwindow.bodyやらの返り値を見てみたりしていますが、
イマイチ上手くいかず。


1   名前: 匿名 : 2007/03/28(水) 19:25  ID:6fAvcTJO sub-kJ
> 表示が完了したら

そのページ(ウィンドウ)の読み込みが完了した時点で、(on)load イベントが発生する。IE、Opera、Safari なら、document.readyState を監視する手もある。


> whileループでサブウィンドウのwindow.bodyやらの返り値を見てみたりしています

考え方は良いけど、while ループは絶対駄目。setTimeout/setInterval を使うなら、それでもいけるよ。

2   名前: ちびっこ : 2007/03/28(水) 19:25  ID:3hEdXHwr sub-9g
レスありがとうございます。

レスを参考に色々やってみましたが、まだうまく出来ていません。

> > 表示が完了したら
>
> そのページ(ウィンドウ)の読み込みが完了した時点で、(on)load イベントが発生する。IE、Opera、Safari なら、
> document.readyState を監視する手もある。

これについてですが、window.openで開いたサブウィンドウの(on)loadイベントを親ページ側で
取得することは出来るのですか?



> > whileループでサブウィンドウのwindow.bodyやらの返り値を見てみたりしています
>
> 考え方は良いけど、while ループは絶対駄目。setTimeout/setInterval を使うなら、それでもいけるよ。

こちらについては、setIntervalを使う方向で試してみています。


取り急ぎ途中報告まで。

3   名前: 匿名 : 2007/03/28(水) 19:25  ID:6fAvcTJO sub-kJ
> window.openで開いたサブウィンドウの(on)loadイベントを親ページ側で取得することは出来るのですか?
var w = open ('example.html');

w.addEventListener ('load', function (event) { alert ('OK'); }, false);
// w.attachEvent ('onload', function (event) { alert ('OK'); } ); // IE


> setIntervalを使う方向で試してみています
var w = open ('example.html');
watcher ();

function watcher () {
    if (w.document.readState == 'complete')
        alert ('OK');
    else
        setTimeout (watcher, 10);
}

// なお、IE、Opera は (on)readystatechange を持っている。

と言うか、今どき別窓が開くという前提でコードを組んではいけないのだが、その辺は大丈夫なのだろうか。

一覧へ戻る