• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IEでiframe内のcookieを保持)

IEでiframe内のcookieを保持

このQ&Aのポイント
  • 楽天ショップのJavaScriptメニューをiframe内で表示し、IEでもcookieを保持する方法について教えてください。
  • 楽天ショップの開閉式メニューをiframeで表示していますが、IEではcookieが保持されません。どのように対応すれば良いでしょうか。
  • 楽天ショップでJavaScriptメニューをiframe内に表示していますが、IEでcookieの保持ができません。対策方法を教えてください。

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

恐らく、間接的には iframe にした事が原因ですが、根本は、別ドメインのクッキーの読み書きがセキュリティに引っかかったためかと思います。 書き込み : document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/"; ↓ document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toUTCString() + "; path=/magicmarket/; " + "domain=www.rakuten.co.jp"; 又は、 parent.document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toUTCString() + "; path=/magicmarket/"; # "path=/" 楽天トップに直に書いて大丈夫なんですか? 読み込み parent.document.cookie

dummygo
質問者

お礼

ありがとうございます。 不具合の原因と実現したいことはまさにご指摘の通りです。 同一ドメイン内でiframeはOKでしたので別ドメインのcookie処理ということですね。 ちなみに解決にはなりませんがインターネットオプションのプライバシーを低レベルに下げれば動作しました。 sdmenu.jsを教えて頂いた通り記述してみましたが保持はできませんでした。 http://www.rakuten.ne.jp/gold/magicmarket/scripts/sdmenu.js やはり無理があるのでしょうか。 > # "path=/" 楽天トップに直に書いて大丈夫なんですか? これはダメですね。何も考えずそのままUPしていました。 ご指摘ありがとうございます。

その他の回答 (3)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.4

少し調べてみたのですが、サーバ側の設定を変更しないと無理みたいですね。 以前書いたコードは忘れてください。ごめんなさい。

dummygo
質問者

お礼

わざわざ調べて頂き感謝いたします。 原因が判明しただけでもとても助かりました。 この度はありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

同じくソースは見てませんが・・・ cookieの保存、読み出し部分でブラウザによる違いはあまりないように思われますが、どのような事象なのでしょうか? ちなみに、Slashdot Menuのオリジナル版はもちろん作動していますが、IE6では、ご提示のメニューはどちらも作動していないようです。 Opera8ではメニュー部分そのものが、表示されないみたいです。 cookieではなく、このあたりに原因がありそうでは? 勘違いをしていたら失礼。

dummygo
質問者

補足

オリジナル版をiframeで表示させてみました。 http://www.rakuten.ne.jp/gold/magicmarket/test.html メニューを閉じて更新すると開いた状態に戻ると思います。 スクリプト自体に不具合があるわけではないのですが、iframe内でもIEで状態を保持する方法があれば使い勝手が向上するのでとても助かります。 方法がなければきっぱり諦めます。よろしくお願い致します。

回答No.1

サイトやソースなどは見ていません。 キャッシュから読んでいたり、ブラウザの戻るボタンや進むボタンを使う場合などの場合、 windowの読み込み完了イベントが発生しないブラウザがあります。 Firefoxはバージョン2か3で発生するように変更されました。 Operaはonloadイベントを発生させない代わりに、初期化後の変数の値まで全てを保存していると思います。 それへの簡単な対処法で、 </body>の直前で<script>タグを使って、直接呼び出す方法があります。 <body onload="init();"><!-- これは呼び出されない --> ..... <script type="text/javascript"> init(); // これは呼び出される </script> </body> ご参考まで。

dummygo
質問者

補足

ご回答ありがとうございます。 状態の保持はcookieのキャッシュを利用しているのですが、iframeを使用しない場合は正常に動作しますので、ブラウザの読み込み自体は問題ないと考えられます。 よろしくお願い致します。

関連するQ&A

専門家に質問してみよう