プロが教えるわが家の防犯対策術!

WEBページを作成しています。
javascriptで親子ウィンドウ(親子タブ)のフォーカスをコントロールしようとしています。
IEなどデフォルトが「ウィンドウを開く」設定のブラウザでは問題ないのですが、Firefox、Google Chrome、Mac Safariなどのタブブラウザ(「新しいウィンドウでなく新しいタブでひらく」がデフォルト設定のブラウザ)ではうまくフォーカスしません。

以下に現在のソースを記載させていただきました。
実現のためのアドバイスをお願いします。

以下が現在のソースです。
===================================================
function GoTo_Home() {
if(!opener) {
// openerが存在しない
Open_Home();
}
else if(opener.closed == true) {
// openerが閉じている
Open_Home();
}
else {
// openerを前に出す
opener.focus();
}
}
// 「parentsite」を開き、openerにする
function Open_Home(parentsite) {
var parentsite = window.open("http://www.hoge.com/");
opener = parentsite;
parentsite.focus();
}
===================================================
よろしくお願いします。

A 回答 (2件)

一般的な用語と、windowオブジェクトのプロパティ名や、メソッド名


とその使い方についてかなり混乱されていると思われます。
実際ややこしいし、様々な書き方や省略があるので、わかりにくいかも
しれませんが、一度整理してみましょう。

 .focus() windowオブジェクトをフォーカスします。(メソッド)
 .name windowオブジェクトの名前(プロパティ)参照/変更可能
 .opner 自分自身を開いた親ウィンドウを示す(プロパティ)参照/変更はブラウザー依存
 .open(url,name,option) nameの名前を持った新しいwindowオブジェクト
  を開くメソッド
 .parent 親オブジェクト(windowオブジェクトとは直接は関係しない)
 .location windowオブジェクトのロケーションオブジェクト
   さらにlocation.hrefとかlocation.replace()とか...

参考URL:http://www.scollabo.com/banban/java/ref_01.html
    • good
    • 0
この回答へのお礼

質問もままならないところに、ご丁寧なアドバイスをいただき、大変感謝しております。

オブジェクトの階層構造とオブジェクトごとのプロパティ、メソッドをつかまないとまず扱えないことであることが良くわかりました。

いただいた参考サイトの入門編からみっちり勉強して、改めて質問・補足をしようと思います。

本当にありがとうございます。

お礼日時:2009/12/10 22:39

いまいちフローとして何がやりたいのかわからないですが、


openerを代入するのはブラウザ依存では?

この回答への補足

さっそくのご回答まことにありがとうございます。

説明不足で申し訳ありません。
フローは以下です。

(1)母体のサイトからリンククリックで、関連ページを別ウィンドウで表示
(2)別ウィンドウで表示された子ウィンドウから、リンククリックで母体のサイトに戻させたい
→これを実現させたいのですが、新規ページがタブで増えていくブラウザの場合、親ウィンドウが「消されず存在」していたとき、タブのフォーカスが移らないという問題があります。
つまり子ウィンドウ(子タブ)で母体へのリンクをクリックしてもタブは移らず、子ウィンドウ(子タブ)のままというのが芳しくないのです。

IEのようなデフォルトで新規オープンページがウィンドウとして重なって現れるブラウザでは、親ウィンドウ(母体)が存在している場合、ウィンドウを手前にだす→「フォーカスの動作」が実行されてまったく問題ありません。

>openerを代入するのはブラウザ依存では?
こちらはどういった意味でしょうか?知識が乏しくご迷惑をおかけします。

それはopenerは利用しない方法を探したほうがよろしいということでしょうか。

補足日時:2009/12/03 20:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!