« window.open()やwindow.close()は非同期です。 | トップページ | 名前でもってwindowオブジェクトを捕捉する。 »

2009年8月25日 (火)

同じ名前のウィンドウを(もしあれば)閉じて、常に新しく開く。

例えば、

set win=open("about:blank","hoge","resizable=no")
win.close
set win=open("about:blank","hoge","resizable=no")

は、うまく行きません。

closeが非同期なので、遅延して、時間軸上で、

set win=open("about:blank","hoge","resizable=no")
set win=open("about:blank","hoge","resizable=no")
win.close

のように動いて失敗します。

set win=open("about:blank","hoge","resizable=no")
win.close
do while not win.closed
' wscript.sleep 100 ' WSHならsleepがありますが、HTMLにはないので。
loop
set win=open("about:blank","hoge","resizable=no")

のように待ち合わせれば回避できますが、スピンループなので避けましょう。

set win=open("about:blank","hoge","resizable=no")
win.name=""
win.close
set win=open("about:blank","hoge","resizable=no")

あるいは、さらに、

set win=open("about:blank","hoge","resizable=no")
win.name=""
win.close
set win=open("about:blank","_blank","resizable=no")
win.name="hoge"

とすれば、非同期に耐えられます。

« window.open()やwindow.close()は非同期です。 | トップページ | 名前でもってwindowオブジェクトを捕捉する。 »