IE7でのwindow.openerがnullになる

このQ&Aのポイント
  • IE7でのwindow.openerがnullになる問題について
  • IE7のバグによりwindow.openerがnullになる現象が起こる
  • 回避策はあるのか、問題の原因はIE7の仕様にあるのか
回答を見る
  • ベストアンサー

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って表示されました。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

IE7はwindow.openerだめみたいです。バグでは無くセキュリティ仕様かも IE7使ってないのでためしていませんが a = (window.open('', '_self').opener = window).hoge(); としてもだめですか? あるいは、 a = window.parent.hoge(); はどうですか?

masa6272
質問者

お礼

家では、Firefoxを使っているんですが・・・ IEで使えないと駄目ですからね? 微妙な振る舞いの違いが結構負担になりますね。 ありがとうございました。

masa6272
質問者

補足

ありがとうございます。 駄目でしたね。 window.parentは、objectになりましたが、hoge()は呼びにいってくれませんでした。メソッドが見えないようです。 window.open('', '_self').opener = window まではいきましたが、 これって、openerを書き換えてしまってますよね。 別の手段で目的は達成できました。こっちの方がスマートだと思ったんですが・・・ IEどうも信用できないですね。 Javascriptの仕様はどうなってるんでしょうか? そのうち調べてみます。

関連するQ&A

  • Firefoxでwindow.openerが動作しない

    あるHTMLから、window.openであらたなウィンドウを開いて、開いたウィンドウにあるリンクをクリックすると、そのリンクの値が元のウィンドウのテキストフォームに入力されるようにしたいのです。 IE6では正常に動いてくれますが、Firefox3で動きません。 新たなウィンドウでは以下の記述をしています。 function junp(value){ window.opener.formtest["test"].value = value; window.close(); } window.openerの行をコメントアウトすると正常にウィンドウを閉じます。 そもそもFirefoxでwindow.openerは使えないのでしょうか??

  • window.openerが設定出来ません。

    よろしくお願い致します。 親のページ(メインフレームのページ)から子ウィンドウを呼び出すことは出来るのですが、子ウィンドウから親ページを操作しようとすると、 Not Found The requested URL /test/mf_a.html/ was not found on this server. と出てしまいます。 子のスクリプトは以下の様になっています。 <!-- function aaa(){ window.opener.location.href="http://www.xxx.co.jp/test/mf_a.html/"; } function closeWin(){ if(opener.closed == false){ window.opener.close(); } window.close(); } //--> となり・・・ <img src="/test_img/shin.gif" width="150" height="53" border="0" onClick="aaa()" > を押すと親ページ(フレームのメイン)が切り替わるはずなんですが、うまくいきません。 親と子は同じ階層にいます。 どこがおかしいのでしょうか? 親が子を呼び出すときのスクリプトに問題があるのでしょうか? 教えてください。 よろしくお願い致します。

  • IE8のwindow.opener.location.href動作について

    宜しくお願い致します。 IE8のjavascript「window.opener.location.href」の動作がIE7から変わった様で、思い通りの動作をしなくなりました。 1、WEBサーバ側の親ウィンドウからWinXPにインストールしたローカルサーバ側のPHPスクリプトへwindow.openで子ポップアップウィンドウを開きます。 2、ローカルサーバ側の子ポップアップウィンドウで特定のプログラムを走らせ、WEBサーバ側の親ウィンドウへローカルサーバ側の子ポップアップウィンドウからwindow.opener.location.hrefで、親ウィンドウの表示ページを切り替える。 という動作をしていたのですが、IE8にアップデートしたら、ローカルサーバ側の子ウィンドウからWEBサーバ側のURLを切り替えると、別ウィンドウで開いてしまい、親ウィンドウが2ページに分かれます。 さらに、元の親ウィンドウはURLが変更にならず、新しく開いたページのURLだけ変わっています。 この動作をIE7と同じ様に、子ウィンドウから元の親ウィンドウのURLを変更させるにはどうすればよいのでしょうか?

  • window.closeもしくはwindow.opener.closeで警告を表示させない方法

    宜しくお願い致します。 ログイン画面を作っております。 ログインフォームからID、パスワードでログインした際に、子ウィンドウを表示させます。その際に、残った親ウィンドウを子ウィンドウが開いた際に閉じたいのですが、window.closeもしくはwindow.opener.closeで閉じると警告ダイアログが表示されてしまいます。この警告ダイアログを表示させない方法はありますか?window.closeもしくはwindows.opener.closeで警告を表示させない様にする事が不可の場合、同じ動作が出来る関数はありますか?

  • window.openerを使っての操作

    JavaScript初心者です。 JavaScriptのwindow.openerを使って、 子ウィンドウから親ウィンドウに値を渡す、 ということをしたいのですが、うまくできません。 実装したい環境はIE6です。。 こちらのページのサンプルにあるソースをそのまま貼り付けてみても動きませんでした。 http://shoyu-ramen23.jugem.jp/?eid=203 ただ、サンプルはこちら、と書いてあるページのものは動きます。 (実際記載されているソースとは違うのではないかと思いますが)  *ちなみにGoogleChromeでも同じ結果でした。ソース自体何か誤りがあるのでしょうか サンプルのように子ウィンドウにある選択肢を一つクリックすると その値が親ウィンドウの特定のテキストエリアに渡される ・・というものすらうまくできないのですが、 子ウィンドウでチェックボックス式の選択肢を用意して、 子ウィンドゥ側で「選択」等の決定ボタンが押されたときに、チェックが入っている選択肢の内容が カンマで区切られて親ウィンドウのテキストエリアに渡される・・・ というものを作成したいのです。  子ウィンドウチェックボックスで、りんごとみかんとバナナにチェックが入っていれば  親ウィンドウのテキストエリアには「りんご,みかん,バナナ」といったふうにです。 こういったものは作成できるものなのでしょうか。 それともJavaScriptでやるようなことではないのでしょうか。 JavaScriptでできる場合どのようにすればよいのでしょうか? せめてサンプルだけでも動かせるようにしたいです。。 他にもいろいろと試してみましたがどうにも動きません・・ よろしくお願い致します。

  • open で開いた子WINDOWから親元のURLを文字列として取り出す方法は?

    こんばんわぁ、Blackwinglsです。 ちょっと解決しない問題があるので、相談させてください。 URL = new String() URL = window.opener.location alert(typeof(URL)) とするとalertの表示結果がobjectとして表示されてしまいます。 URL = new String(window.opener.location) alert(typeof(URL)) とするとIE5.5では URL = new String(window.opener.location) の部分がエラー表示されてしまいます。 なんとか親元のWINDOWのURLをStringとして取り出す方法はないでしょうか?

  • IE7でのwindow.close後のwindow.openについて

    javascriptで、ボタンクリックでウィンドウを開くときに、同じ名前のウィンドウが既に開いていたら一回閉じで、開き直すというロジックを書いてます。 これはIE6では正常に動いているのですが、IE7になると、ウィンドウが閉じたまま、開き直さないで何も表示されなくなってしまいます。たまに開くときもあるのですが。 ボタンクリック後のコードを載せます。 ちゃんと開く方法はないでしょうか? function openwindow(){ var newWindow = window.open("test.html", "test"); if(newWindow.name == "test") { newWindow.close(); } oneScdWindow=window.open("test.html", "test"); }

  • window.openしたウィンドウのwindow.onblurについて

    window.openしたウィンドウのonloadに  window.onblur = function() { window.close(); } を設定しているのですがFirefox3.6、Opera10.51ではウィンドウからフォーカスが外れたらウィンドウが閉じるのですが(期待している動き通り)、 IE6のみwindow.openしたウィンドウをクリックしたと同時にウィンドウが閉じてしまいます。 どうすればIEでもFirefox,Operaと同じ動きをさせることが出来ますでしょうか・・・

  • 親ウィンドウのフォームの値を変更

    showModalDialogでオープンした子画面から、returnValueで値を返すのとは違う方法で、親ウィンドウのフォームの値を変更したいと思っています。 (その子画面をオープンすると同時に、親ウィンドウのフォーム値を変更したいため) その際に    window.opener.document.formA.hiddenA.value = "aaa" という風に記述しているのですが、「window.opener.documentはオブジェクトではありません」というエラーになってしまいます。window.openで開いた子画面からだと、この方法でできたと思うのですが・・・どうすれば変更できるでしょうか?そもそも、showModalDialogでオープンした画面から親ウィンドウの値を変更すること自体がダメなのでしょうか? よろしくお願いします。

  • 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); } となっています。 ソース、説明ともにわかり辛いかもしれませんが、どなたかわかる方いたら助けてもらえるとありがたいです。

専門家に質問してみよう