• 締切済み

タブブラウザで focus() を実現する方法を教えてください。

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(); } =================================================== よろしくお願いします。

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.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
karashi13
質問者

お礼

質問もままならないところに、ご丁寧なアドバイスをいただき、大変感謝しております。 オブジェクトの階層構造とオブジェクトごとのプロパティ、メソッドをつかまないとまず扱えないことであることが良くわかりました。 いただいた参考サイトの入門編からみっちり勉強して、改めて質問・補足をしようと思います。 本当にありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いまいちフローとして何がやりたいのかわからないですが、 openerを代入するのはブラウザ依存では?

karashi13
質問者

補足

さっそくのご回答まことにありがとうございます。 説明不足で申し訳ありません。 フローは以下です。 (1)母体のサイトからリンククリックで、関連ページを別ウィンドウで表示 (2)別ウィンドウで表示された子ウィンドウから、リンククリックで母体のサイトに戻させたい →これを実現させたいのですが、新規ページがタブで増えていくブラウザの場合、親ウィンドウが「消されず存在」していたとき、タブのフォーカスが移らないという問題があります。 つまり子ウィンドウ(子タブ)で母体へのリンクをクリックしてもタブは移らず、子ウィンドウ(子タブ)のままというのが芳しくないのです。 IEのようなデフォルトで新規オープンページがウィンドウとして重なって現れるブラウザでは、親ウィンドウ(母体)が存在している場合、ウィンドウを手前にだす→「フォーカスの動作」が実行されてまったく問題ありません。 >openerを代入するのはブラウザ依存では? こちらはどういった意味でしょうか?知識が乏しくご迷惑をおかけします。 それはopenerは利用しない方法を探したほうがよろしいということでしょうか。

関連するQ&A

  • タブブラウザについて

    タブブラウザで検索バーで検索すると 新しくタブを開いて検索結果を表示するようにするにはどうしたら いいんでしょうか? デフォルトではアクティブのタブに検索結果が表示されています。 ツールバーを入れないといけないのですか? また、設定はどこでできるのですか? Opera9.02(XP)を使っております。 他のブラウザでは検索すると新しいタブが出てきます。 検索するとき、新しいタブに出たほうが便利じゃないですか?

  • undountのようなタブブラウザ

    undountというタブブラウザがあるのですが、このブラウザは複数のタブを一つのウィンドウの中で並べることが出来ます。 (画像のような感じ) Firefoxで似たようなことをしたいのですが、適切な拡張が見つかりません。 (「分割ブラウザ」は近いことが出来ますが、タブを自由に動かせないのでいまいち使いにくいです) もしそのような拡張などありましたら教えてください。 または、Firefox以外のブラウザで似た機能があるものがあれば教えてください。

  • Sleipnirど同じくらい使いやすいタブブラウザ

    Sleipnirを便利に使っていました。 しかし、Sleipnirは「ブックマークの追加のJavaScript」を使えないので他のブラウザに乗り換える必要が出てきました。(このJavaScriptの機能が私には必要になりました。) Sleipnirど同じくらい使いやすいタブブラウザはないでしょうか?以下の条件があればOKです。 (1) 各タブに閉じるボタンを表示できる (2) タブの入れ替えがドラッグ&ドロップでできる。 (3) Google検索が簡単にできる。 (4) FireFox以外のブラウザ。動作が軽い。 使用感などもあると嬉しいです。

  • Chromでポップアップウィンドウのサイズ指定

    現在以下のような指定でポップアップウィンドウを開いているのですが Chromの場合、サイズ指定が無視されてしまいます。 良い方法ございましたら、ご教授いただけますでしょうか。 var subopen function subWinmap(){ subopen=window.open("map.html","map","resizable=yes,scrollbars=yes,menubar=yes,toolbar=no,directories=no,status=no,location=yes,width=700,height=800px"); if (!subopen.opener) subopen.opener=self; if (window.focus) subopen.focus(); }

  • 親タブから子タブ開いて親タブへ戻す。

    以前、ここで質問をしたものです。 まだ、解決していません。 window.opener.focusが利かないと質問したものです。 親タブ(ウインドウ)から子タブ(ウインドウ)をひらいて そのリンク先を親タブ(ウインドウ)で制御しようとしています。 自分でいろいろやりましたが、現在chromeのみで動いています。 Firefox、IEでは動いていません。 他に良い方法はないでしょうか? 現在のコードです。 親<index.html> <html> <head> <title>TOPページ</title> <script type="text/javascript"> <!-- var win; // サブウィンドウを開く処理 function disp(url){ win = window.open(url, "oya"); } // --> </script> </head> <body> <p><a href="example_sub8.html" target="_blank" onClick="disp('example_sub8.html')">testサブウィンドウを開く</a></p> </body> </html> 子ウインドウ<example_sub8.html> <html> <head> <title>testサブウインドウ</title> <script type="text/javascript"> <!-- // リンクの処理開始 function disp(url){ if(!window.opener || window.opener.closed){ // メインウィンドウの存在をチェック window.alert('メインウィンドウがありません'); // 存在しない場合は警告ダイアログを表示 } else{ window.blur(); window.opener.focus(); window.open(url,"oya"); //window.opener.location.href = url; // 存在する場合はページを切りかえる } } // リンクの処理終了 // --> </script> </head> <body> <ul> <li><a href="#" onClick="disp('index.html'); return false;">トップページ</a></li> <li><a href="#" onClick="disp('index2.html'); return false;">test2ページ</a></li> </ul> </body> </html>

  • 開いたタブ(ウィンドウ)にフォーカスが当たらない

    IE8 をタブモードで利用したとき、新しく開いた タブ(ウィンドウ)にフォーカスが当たりません。 JavaScript の window.open で別タブ(ウィンドウ)を 表示する処理を onload イベントで行うと、新しい タブ(ウィンドウ)にフォーカスがあたりません。 button のクリックイベントで表示した場合は、 新しいタブ(ウィンドウ)にフォーカスが当たります。 やりたいことは submit してページを再表示するときに 新しいタブ(ウィンドウ)を表示して、そちらにフォー カスを設定することです。 また、できればブラウザのバージョンによって処理を 切り替えるようなことはしたくありません。 何か原因や解決策などありましたらご教授ください。 よろしくお願いします。 <この現象が発生する環境> IE8 と IE7 で下記のように設定した場合 ツール → インターネットオプション → 全般タブ  → タブ → 設定  → ポップアップの発生時  の設定を   「常に新しいタブでポップアップを開く」  にする。 ※IE9 ではこの現象は発生せず、新しいタブ(ウィンドウ)に  フォーカスがあたります。 ※IE7, 8 でもタブモードではなく、別ウィンドウで開く  設定になっている場合は、新しいウィンドウにフォーカスが  あたります。 <サンプルソースと説明> (説明) test1.html から window.open で test2.html を表示します。 onload で表示したときは test2.html のタブ(ウィンドウ)に フォーカスがあたりません。 button のクリックイベントで表示したときは test2.html の タブ(ウィンドウ)にフォーカスがあたります。 ---(test1.html)---------------------------------- <html> <head runat="server"> <title></title> <script language="javascript" type="text/javascript"> window.onload = function () { OpenWindowTest(); } function OpenWindowTest() { var TestWin = window.open('test2.html'); TestWin.document.focus(); } </script> </head> <body> <form> <div> <input type="button" value="button" onclick="OpenWindowTest();" /> <br /> <input type="submit" value="submit" /> </div> </form> </body> </html> --------------------------------------------------- ---(test2.html)---------------------------------- <html> <body onload="window.focus();"> テストページ </body> </html> ---------------------------------------------------

  • 親ウインドウのアドレスバーを消したい

    親ウインドウから子ウインドウを呼び出す時に、 LinkWin=window.open('newwin.html','_blank','MENUBAR=NO,SCROLLBARS=1,RESIZABLE=1'); として、アドレスバーを消す事が可能ですが、 それを親ウインドウでやりたいのです。 ソースを以下のように書いてみたのですが IE6.0では動作しません。 親ウインドウでは無理なのでしょうか? if(navigator.appName == 'Netscape'){ //自分自身をwindow.openで開いたと思わせる window.open('','_top','menubar=no,resizable=1'); } else if(navigator.appName =='Microsoft Internet Explorer'){ var w=window.open('','_top','menubar=no,resizable=0'); w.opener=window } 以上、宜しくおねがいします。

  • 子ウィンドウを手前に表示する

    子ウィンドウがまだ開かれていない場合に、子ウィンドウを開く。子ウィンドウがすでにある場合に子ウィンドウが手前に表示されるボタンを作りたいです。 今、作成中のPROGは以下です。 var subwin; function display(url){  if(subwin && !subwin.closed){   subwin.focus();  }else{   subwin = window.open(url, "", "width=768,  height=512");   subwin.moveTo(125,120);  } } このPROGでは、一度目のopen()は可能なのですが、テストでウィンドウを閉じて、もういちどクリックしてみると二度目からopen()されずに、エラーが出てしまいます。 どなたか、解決法を教えてください。 IE6、sp2です。

  • IEで新しいウインドウを開き、新しいウインドウから元のウインドウを操作しようとするとエラーが出ます。

    新しく開いたウインドウから、元のウインドウにフォーカスを戻す際にif文でwindowのopenerプロパティのclosedがtrueかfalseかを判定しようとしているのですが、ブラウザがIEですと「RPCサーバが利用できない」といった感じのエラーが出ます。 何かほかに回避策があれば教えていただきたいのですが…。よろしくお願いします。

  • 新規ウインドウ+submit

    はじめまして。 画像をクリックし、新規ウインドウ SUBMITさせたいのですが、 元のウインドウがクリックした画像のみの表示に切り替わってしまいます。 これを直したいのですがどうしたら良いでしょうか? 知恵を貸してください。 宜しくおねがします。 以下にその部分ソースを記述します。 function onSearchfree(val){ var coWinaddCookie; if (val==-1){ if (navigator.appName=="Microsoft Internet Explorer"){ coWinaddCookie=window.open("http://www.ooooo.co.jp","childaddCookie","status=yes,scrollbars=yes,width=800,height=600,left=0,top=0");} else{ // Netscape coWinaddCookie=window.open("http://www.ooooo.co.jp","childaddCookie","status=yes,scrollbars=yes,alwaysRaised=yes,width=800,height=600,screenX=0,screenY=0"); } coWinaddCookie.focus(); }else{ document.searchform.submit(); } } /*****HTML******/ <IMG src="http://www.ooooo.co.jp/image/set.gif" border="0" onmousedown="onSearchfree(-1)" title="" alt="">

専門家に質問してみよう