• 締切済み

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

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

みんなの回答

  • atsuota
  • ベストアンサー率33% (53/157)
回答No.2

『新たにウインドウを呼び出し、そこに元の親ウインドウのURLを持ってくる』のであれば、必ずそうするように記述すればよいと思います。 function hoge2(URL){ // URL:元の親ウインドウURL //強制的に親ウィンドウを閉じる window.opener.close(); //新たにウィンドウ呼び、元URLを持ってくる NewWin = window.open("","NewWindow"); NewWin.location.href = URL; //フォーカス NewWin.focus(); return true; } ただし、親ウィンドウを強制的に閉じるので、「いいですか?」と毎回聞かれることになります。 ちょっとウザいですね。

nicola
質問者

お礼

みなさん、丁寧な回答をありがとうございました。 結局今回は、別の方法で代用という結果になりましたが、今後別の場面でみなさんの書いてくださった情報を活用したいと思います。 いつまでも解放していてもなんなので、ここで回答を締め切らせていただきます。 ありがとうございました。

  • atsuota
  • ベストアンサー率33% (53/157)
回答No.1

まず、windowオブジェクトのclosedプロパティはIEではうまく機能しないことがわかっています。 (nicolaさんだけじゃないです。安心してください) ところで、親ウィンドウにフォーカスを戻すだけが目的ならば、判定などせずに function hoge(){ window.opener.focus(); return true; } でよいのでは? この場合、親ウィンドウが閉じられていれば、単に何も起こらないだけになります。

nicola
質問者

補足

すばやいお返事ありがとうございました。 ちょっと説明が足りなかったのですが、親ウインドウが閉じられている場合は、『新たにウインドウを呼び出し、そこに元の親ウインドウのURLを持ってくる』という処理をしたいのです。 (子ウインドウの方が普通のウインドウならよいのですが、メニューバー等要らないものをいろいろ取り去ってしまっているので…。) なにかよいアイディアがあれば、ぜひよろしくお願いします。

関連するQ&A

  • タブブラウザで 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(); } =================================================== よろしくお願いします。

  • IE7でのwindow.openerがnullになる

    showModalDialogで、子ウィンドウを開き、子ウィンドウからwindow.openerの関数を呼ぼうとしています。Firefoxでは、問題なく呼べるのですが、IE7ですとwindow.openerそのものがnullになってしまいます。 回避策はあるのでしょうか? IE7のバグですかね? 親 window.showModalDialog("hoge.html", this, "スタイル"); 子 var a = window.opener.hoge(); といった形で使用しています。ちなみにこの前にalert(window.opener)を入れたら、見事にnullって表示されました。

  • 子ウインドウを開き、BLOBをダウンロードして、親ウインドウから閉じたい

    大変恐縮ですが、質問です。 window.openで子ウインドウ(jsp)を開き、その中でDBからBLOBをダウンロードするサーブレットを実行して、IEの中でワードを開きます。 親ウインドウで、そのダウンロードしたワード(IE)を閉じたいのです。 ◆子ウインドウを開く win1 = window.open("../jsp/blob001.jsp","a",~~~ ◆親ウインドウで子ウインドウが存在するか確認 function win_closed(winVar) { /* 子ウインドウから親ウインドウを調べたい場合は win_closed(window.opener) と書いてください Support: http://game.gr.jp/js-ml/samples/200102/openerTest.html */ var ua = navigator.userAgent if( !!winVar ) if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 ) && ua.indexOf('Win')!=-1 ) return winVar.closed else return typeof winVar.document != 'object' else return true } ~~~~~~~~~ if(!win_closed(window.win1)){ ココで子ウインドウを閉じるたい } window.win1.close();では、閉じれません。アドレスがjsp/blob001.jspではなくなっていてservlet/blobinsになっているからだと思います。 説明が下手ですいませんが何卒宜しくお願い致します。

  • IE6だけの判定、IE7だけの判定について

    こんにちは。 下記の「IE6だけの判定方法(JavaScript)」で、どれが一番いいのか、 或は、もっと正確で簡素な良い方法があるのかどうかを教えてください。 また、IE7だけの判定方法も記載しますので、ご指導お願いします。 色々試した結果は、一応全部OKでした。 ただ、プログラマーでないので心配なので質問させて頂きました。 もうひとつ、!!は何かundefinedやfunctionを、true、falseへと整形してるようですが、 これを、業界用語で何って言うのかも、教えてください。よろしくお願いします。 <script> /* IE6だけの判定方法 */ // (1) var ua = navigator.userAgent.toLowerCase(); var bver = (ua.match(/.+(?:rv|webkit|khtml|opera|msie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]; var isIE6a = (/msie/.test(ua) && !/opera/.test(ua) && parseInt(bver) < 7 && (!window.XMLHttpRequest || typeof(XMLHttpRequest) === 'function')); if (isIE6a) document.write('IE6'); // (2) var isIE6b = document.uniqueID && document.compatMode && !window.XMLHttpRequest && document.execCommand; if (!!isIE6b) document.write('IE6'); // (3) var isIE6c = /msie|MSIE 6/.test(navigator.userAgent); if (isIE6c) document.write('IE6'); /* IE7だけの判定方法 */ var isIE7 = window.XMLHttpRequest && (/*@cc_on!@*/false) && !(document.documentMode >=8); if (!!isIE7) document.write('IE7'); </script>

  • opener.focus();が利かない

    window.opener.focus(); イベントを実験していますが Chromeのver23で利きません。 またIE9でも利きません。 最近のブラウザは利かないのでしょうか。 safariは動きました。 もし、利かないとしましたら いい手段が他にないでしょうか?

  • javascriptのランタイムエラーについて

    サブウィンドウから親ウィンドウのjavascriptのファンクションを呼んでいるのですが、 呼び出し時に、ランタイムエラーが発生します。 申し訳ありませんが回避方法を教えて下さい。 エラー内容 「ランタイムエラーが発生しました。  デバッグしますか?  エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。」 ※下記の(1)の部分でランタイムエラーとなります。 *********************************************************** (1)サブウィンドウの呼び側(ポップアップ画面) strMsg.Append("<script language='JavaScript'>") strMsg.Append("function fncWindowColse11(){") strMsg.Append(" if (parent.opener == null || parent.opener.closed==true) {") strMsg.Append(" alert('画面が閉じられています');") strMsg.Append(" window.close();") strMsg.Append(" return;") strMsg.Append(" }") strMsg.Append(" parent.opener.fncReNew();") ← (1)親画面のファンクション呼び出し strMsg.Append("}") strMsg.Append("fncWindowColse11();") strMsg.Append("window.close();") strMsg.Append("</script>") *********************************************************** (2)親ウィンドウのjavascript function fncReNew(){ ← (2)サブ画面からこのファンクションを読み出している with (Form1){ //画面項目初期化 ------ 略 ------ } } ※ちなみに、parentの記述をtopまたは、windowに変えても駄目でした、、、、 わかりにくいとは思いますが、よろしくお願い致します。

  • IEで子ウインドウから親ウインドウへのタグの追加

    IEで子ウインドウから親ウインドウへのタグの追加 【やりたいこと】 1.親ウインドウからポップアップで子ウインドウを出して、その子ウインドウ内でチェックしたものを親ウインドウの<select>タグに<option>タグとして付け加えること。 2.同じくhiddenタグでチェックしたもののvalueを持たせたいということ。 とあるサイトを参考に、firefoxではこの挙動ができました。 ただ、IEだと親ウインドウに何も反映されなくて困っています。 以下ソース(一部)です。 --親html-- <head> <script type="text/javascript"> <!-- var w = window; function openWin(url) { if ((w == window) || w.closed) { w = open(url, "_blank", "width=800,height=600,scrollbars=yes"); } else { w.focus(); } return(false); } // --> </script> </head> <body> <select id="selectArea" size="5" name="search_area" class="list_box"> (ここに1.) </select> <div id="search_area"> (ここに2.) </div> <input type="button" onClick="return openWin('checkbox.php')" value="チェックをつける"> </body> --子html-- <input type="checkbox" name="department" value="c1" onclick="BoxCheckChild(this)"> <input type="checkbox" value="t1" onclick="BoxCheckChild(this)"> <input type="checkbox" value="s1" onclick="BoxCheckChild(this)"> 子htmlでは、onclickでチェックしたチェックボックスに対して処理をしています。 --javascript-- function appendOptionLast(str, value){//親ウインドウに<option>として追加(1.) var elOptNew = window.opener.document.createElement('option'); elOptNew.text = str; elOptNew.value = value; var elSel = window.opener.document.getElementById('selectArea'); var nstr = "<option value=aaa>test</option>" try { elSel.add(elOptNew, null); } catch(ex) { elSel.add(elOptNew) } function make_hidden(value){//hiddenタグ作成、追加(2.) var q = document.createElement('input'); q.type = 'hidden'; value = value.slice(1); if(type == "c"){ q.name = 'department[]'; }else if(type == "t"){ q.name = 'theme[]'; }else if(type == "s"){ q.name = 'index[]'; } q.value = value; window.opener.document.getElementById("search_area").appendChild(q); } となっています。 ソース、説明ともにわかり辛いかもしれませんが、どなたかわかる方いたら助けてもらえるとありがたいです。

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

    以前、ここで質問をしたものです。 まだ、解決していません。 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>

  • 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(); }

  • ウィンドウ名からウィンドウオブジェクトを取得

    対象ブラウザはIE6~8です。 2つのウィンドウA/Bが連動するプログラムを作っています。 ウィンドウAにはウィンドウBを開くためのボタンがあり、 Aより先にBが開くことはありません。必ずAからBが派生します。 Aはwindow.openの戻り値を保持することで、B内部のJavaScriptにアクセスします。 Bはwindow.openerプロパティを経由することで、A内部のJavaScriptにアクセスします。 しかし、Aには自身をリロードする機能があり、 リロードすると保持していたBのウィンドウオブジェクトを失ってしまいます。 そこでAがリロードし終わったとき(onloadのタイミング)に、 何とかしてBのウィンドウオブジェクトを取得しなければなりません。 window.openではウィンドウに名前を付けることができますが、 その名前からウィンドウオブジェクトを取得するような、 document.getElementByNameみたいなメソッドは存在しないでしょうか? あるいは、BからAの監視を続け、リロードが終わった時に window.opener経由でメッセージを送る等の処理を実現する手段はないでしょうか? よろしくお願い致します。