none
IE8 と traget frame RRS feed

  • 質問

  • IE7 では問題なかった異なるウィンドウの target frame への表示が、IE8 で
    はうまくいきません。皆さんは同じ問題は経験ないでしょうか?

    GridView と iframe をもつ親ページ (Parent.aspx)、DetailsView を持つ子ペ
    ージ (Child.aspx) を例にとって、シナリオを説明します。

    (1) 親ウィンドウを開き Parent.aspx を要求。

    (2) Parent.aspx は、DB からデータを取得し、GirdView にレコード一覧を表示。

    (3) GridView 上でレコードを選択すると、親ウィンドウを開いたまま、子ウィ
      ンドウを開いて Child.aspx を要求。

    (4) Child.aspx は、子ウィンドウに、選択されたレコードの詳細を DetailsView
      の編集モードで表示。

    (5) 子ウィンドウでレコードを編集し、ボタンクリックで Child.aspx にポスト
      バックして DB を更新。

    (6) Child.aspx は、更新後のレコードを DetailsView に表示する形で応答を
      返す。

    (7) Child.aspx の応答を、開いたままの親ウィンドウの Parent.aspx の
      iframe に表示。

    (8) 子ウィンドウを閉じる。

    問題は、上記 (7) の、親ウィンドウを開いたままにしておいて、その iframe に
    子ウィンドウで行った更新結果を表示するところです。

    これは、iframe の name を、Child.aspx の form 要素の target に設定すると
    いうことで可能なはずです。

    しかしながら、IE8 では新たに別ウィンドウが開いてそれに Child.aspx が表示
    され、target としたはずの iframe には何も表示されません。

    IE7, Firefox, Opera では期待通りに動きます。

    どうも IE8 では、親ウィンドウと子ウィンドウのプロセスが違うということが原
    因のように思います。

    ただ、ググって見ても上記のような話は見当たらないので、ひょっとして何か思
    い違いをしているかもしれませんけど。

    2010年8月24日 14:16

回答

  • 思い違いというか、やり方の問題でした。

    Visual Studio で、[デバッグ] → [デバッグ開始] または [デバッグなしで開始] で
    IE8 を起動して試していたのでダメでした。

    普通に IE8 を起動して、アドレスバーに url を直打ちして試したら、期待通り子ウ
    ィンドウのポストバック結果が親ウィンドウの iframe に表示されました。

    お騒がせしてすみませんでした。

    • 回答としてマーク 服部清次 2010年8月30日 5:09
    2010年8月29日 5:02

すべての返信

  • 再現しませんでした(´・ω・`)。Win7&IE8

    サンプルコードは以下です。原因はなんでしょうね。parentとchildが別プロセスであることは確認済みです。

    parent.htm

    <html>
    <head>
    <script>
    function test1(){
    	window.open("child.htm");
    }
    </script>
    </head>
    <body>
    <iframe name="c1"></iframe>
    <br>
    <input type=button value="open" onclick="test1();" />
    </body>
    </html>
    

     

    child.htm

    <html>
    <body>
    <form target="c1" action="hoge.txt">
    <input type=submit>
    </form>
    </body>
    </html>
    

     

    2010年8月26日 16:48
  • 以下(拡張子に注意)でどうですか? もとの ASP.NET ベースの Web アプリを実行
    した結果の html ソース(IE8 で[表示]→[ソース])から、問題を再現できる必
    要最小限の部分をコピペして作りました。

    自分の環境 Vista の IIS7 + IE8 で再現します。

    ちなみに Firefox 3.6.8, Opera 10.61 では期待通り Parent.aspx の iframe に表
    示されます。 IE6, IE7 は、今、試せる環境がないので、分かりません。


    Parent.aspx

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <form name="form1" method="post" action="Parent.aspx" id="form1">
            <h1>Parent</h1>
            <input type="submit"
                name="GridView1$ctl02$Button1"
                value="Select"
                onclick="javascript:window.open('Child.aspx', null, 'menubar=no, scrollbars=yes, status=no, width=500, height=600'); return false;"
                id="GridView1_ctl02_Button1" />
            <hr />
            <iframe name="DetailedList" height="450px" width="350px">
            </iframe>
        </form>
    </body>
    </html>


    Child.aspx

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <form name="form1"
            method="post"
            action="Child.aspx"
            id="form1"
            target="DetailedList">
            <h1>Child</h1>
            <input type="submit"
                name="DetailsView1$Button1"
                value="更新"
                onclick="javascript:setTimeout('self.close()', 100);"
                id="DetailsView1_Button1" />
            &nbsp;
            <input type="submit"
                name="DetailsView1$Button2"
                value="キャンセル"
                onclick="self.close(); return false;"
                id="DetailsView1_Button2" />
        </form>
    </body>
    </html>

    2010年8月27日 1:27
  • >自分の環境 Vista の IIS7 + IE8 で再現します。

    Win7 & IIS7.5 & IE8で再現しませんでした。

    再現確認動画を以下に置きました。
    720pにしないと文字が見えにくいです。
    (↑www.test1.netというドメインをlocalhostに設定しています)
    2010年8月28日 4:58
  • 思い違いというか、やり方の問題でした。

    Visual Studio で、[デバッグ] → [デバッグ開始] または [デバッグなしで開始] で
    IE8 を起動して試していたのでダメでした。

    普通に IE8 を起動して、アドレスバーに url を直打ちして試したら、期待通り子ウ
    ィンドウのポストバック結果が親ウィンドウの iframe に表示されました。

    お騒がせしてすみませんでした。

    • 回答としてマーク 服部清次 2010年8月30日 5:09
    2010年8月29日 5:02
  • こんにちは。
    フォーラム オペレーターの服部 清次です。

    > (´・ω・`) さん、
    いつも Internet Explorer フォーラムでたくさんの情報をご提供いただき、本当にありがとうございます!

    > SurferOnWww さん、

    自力で問題を解決されたとのことで、ご報告ありがとうございます。
    今回、質問者ご自身の返信ではありますが、問題の原因と解決策をご報告いただきました
    SurferOnWww さんの返信を [回答としてマーク] させていただきました。

    また何か疑問に思われたことががありましたら、ぜひ MSDN/TechNet フォーラムをご利用ください。
    今後とも、よろしくお願いします。
    それでは、また。


    __________________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    2010年8月30日 5:10