home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2008/12/13/IEのshowModalDialog内からの遷移でCookieが渡らない件

日記/2008/12/13/IEのshowModalDialog内からの遷移でCookieが渡らない件

日記 / 2008 / 12 / 13 / IEのshowModalDialog内からの遷移でCookieが渡らない件
id: 20 所有者: msakamoto-sf    作成日: 2008-12-13 02:01:51
カテゴリ: PHP Web Windows プログラミング 

ヘルプに入っているプロジェクトで、妙な現象に悩まされた。
JavaのWebアプリで、同じホストにOC4Jで二つのWebアプリを動かしている。

  1. IE6/7を立ち上げて、アプリ1にログインする。
  2. もう一つIE6/7のウインドウを立ち上げ、アプリ2にログインする。
  3. アプリ2でwindow.showModalDialog()を使ってポップアップウインドウを開く。
  4. 上記ポップアップウインドウ内からtarget="_blank"のアプリ2のURLリンクを開く。
  5. →このとき、target="_blank"で開かれたウインドウに、アプリ2のCookieが渡らない。

で、一日ほど頭を冷やして冷静にGoogleで検索したら一発でヒットしてすごい哀しい*1

・The cookie may be lost when a window is opened from a modal or modeless HTML dialog box in Internet Explorer 6
http://support.microsoft.com/kb/831678/en-us

「IEの仕様」であることは確かだが、回避方法も上記KnowledgeBaseに載っている。
まずshowModalDialogをするときに第二引数に元のアプリのwindowオブジェクトを渡す。さらにpopupウインドウ内からdialogArguments経由で取得されたwindowオブジェクトを使って、open()でウインドウを開く。

KBに掲載されているのはASPコードだが、お好みの言語で簡単に確認できる。自分の場合はPHPコードで簡単に確認できた。確かに、showModalDialogに渡されたwindowオブジェクトのopen()であれば、元ウインドウのCookieが正常に引き継がれた。

PHPサンプルコードのzip : 添付ファイル/2008/12/13/021722/kb831678_php_sample.zip

*1: ヤバイよ、お客に"IEの仕様らしく対応を直ぐには取れないので、ブラウザは1つだけ立ち上げるようにして下さい"って言っちゃったよ。恥ずかしい・・・

プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2008-12-13 02:19:40
md5:1c57ec746b5eb2123c00f28a83d0ca1e
sha1:cf679a79f28e2ff4216c6c595d829cf9a21029f9
コメント
コメントを投稿するにはログインして下さい。