« MCEの番組表とか | Home | ふむ・・・ »

May 132005

window.openで開いてないウインドウの参照

ふと疑問です。javascriptでwindow.openしていないwindowとか、openerでもない、parentでもないwindowって参照できるのでしょうか??

うまく説明できないのだけど、たとえばAとBというwindowがあるとして
1)AからBを開いて、BからAを参照(これはできる)
2)Bだけが存在してる状態からAの有無を確認してAがない場合はAを開く。Aがある場合はAを制御する。
3)AとBがそれぞれ別のwindowから開かれている状態でBからAを参照する。
ちなみにAが以下のスクリプトで開かれる場合は
winObj = window.open("url","winName");
とかでwinObjで取れますが、これってBのwindowからwinObjの名前で参照ってできるのだろうか?
またAが通常遷移の中で表示された場合
testName = this;
とかにすれば、それ自身の中では
testName .moveTo(100,100);
とかで参照可能ですが、これを別のwindowから参照したかったりします。
なんかできたような気がするのだけど、いまいち思い出せませぬ・・・。

10 Comments

自己レス・・・虚ろな記憶をたどってこんな感じかな??
とりあえずメモ。明日検証してみるの巻き。
mother-----
<script type="text/javascript">
this.name = "win_mother";
winThis = this;
function check(){
winThis.moveTo(200,200);
win2 = window.open("","win_child");
win2.moveTo(100,100);
win2.focus();
}
</script>
----
child----
<script type="text/javascript">
function checkMother(){
win1 = window.open("","win_mother");
win1.moveTo(100,100);
win1.focus();
}
</script>
----

あ・・・まてまて、これだとchildからmotherの有無を確認できないじゃねえか!? えーっと、えーっとインスタンス名じゃなく、ウインドウ名で参照ってできなかったけな?
最悪タイマーでチェックとかになるのかな・・・?なんかきれいにできないんだろうか?

んーっとこんなもんかな?
----
function checkMother(){
win1 = window.open("","win_mother");
if(win1.location=="about:blank"){
win1.location = "index.html";
}
win1.moveTo(100,100);
win1.focus();
}
----
いやー機種依存ありそうだけど・・・

こんなのは?
window.openerとwindow.opener.closedを使ったサンプル。
親が居れば自分を閉じて親ウィンドウに任意のページを表示。
親が居なければ新しいウィンドウに任意のページを表示。
function checkMother(){
var backUrl = "home.html";
if(window.opener&&!window.opener.closed){
window.opener.location.href = backUrl;
window.close();
}else{
window.open(backUrl);
window.close();
}
}

あ、条件としてopenerじゃない場合もあるので使えないんです。それで悩んでおりますです。

windowの名前だけ取れればいいの?
AとBっていうウィンドウ名が分かってれば、

A.alert("もた");

みたいにすればいいんじゃなくて?
どうしても変数で取得したいの?

ごめん、よくわからんちん w

windowの名前で命令出せるの?インスタンス名じゃなくって??
別に変数でやりたいわけじゃないけど、インスタンス名って他に取得方法が思いついてないだけ・・・(;´Д`)

---
AとBっていうウィンドウ名が分かってれば、
A.alert("もた");
みたいにすればいいんじゃなくて?
---
こんなことってそもそもできる?単純にundefinedな変数になりません?

http://www.openspc2.org/JavaScript/ref/window/alert.htm
これを見て、window名が取れるから、変数も取れるかと思ったんだけど、
テストしてみたら確かに返りが無かった(undefined?)です...。

このサンプルの場合は単純に前の行で
newWin = window.open("","test");
って変数newWinにインスタンス名を代入しているから
次の行で
newWin.alert("OpenSpace");
って指定できるんだと思うすよ。
これが
test.alert("OpenSpace")
ってwindowNameで指定できれば楽なんだけどねえ・・・。

Leave a comment

Search and Archives