楽天ショップでJavaScriptを利用した開閉式のメニューを実装しています。
左サイドの「メンズ」「レディース」の箇所です。
http://www.rakuten.co.jp/magicmarket/
楽天の通常ページでは<Script>タグの記述ができない為、別サーバで作ったメニューをiframeで表示しています。
http://www.rakuten.ne.jp/gold/magicmarket/left.h …
iframeの使い方に無理があるのは承知ですが、楽天内では苦肉の策としてよく使われています。
メニューにはSlashdot Menuというこちらのスクリプトを使用しています。
http://www.dynamicdrive.com/dynamicindex1/slashd …
開閉状態をブラウザのcookieに保持しているので、デフォルトで開いた状態のものを一度閉じて更新すると閉じた状態で表示されます。
(ページ遷移しても同様です)
http://www.rakuten.ne.jp/gold/magicmarket/left.h …
firefoxなどで動作確認するとiframe内でも正常に動作しています。
http://www.rakuten.co.jp/magicmarket/
IEでも保持できれば完璧なのですが、iframe内のcookieを保持する方法はありませんでしょうか。
アドバイス頂けると助かります。
よろしくお願い致します。
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
ありがとうございます。
不具合の原因と実現したいことはまさにご指摘の通りです。
同一ドメイン内でiframeはOKでしたので別ドメインのcookie処理ということですね。
ちなみに解決にはなりませんがインターネットオプションのプライバシーを低レベルに下げれば動作しました。
sdmenu.jsを教えて頂いた通り記述してみましたが保持はできませんでした。
http://www.rakuten.ne.jp/gold/magicmarket/script …
やはり無理があるのでしょうか。
> # "path=/" 楽天トップに直に書いて大丈夫なんですか?
これはダメですね。何も考えずそのままUPしていました。
ご指摘ありがとうございます。
No.4
- 回答日時:
少し調べてみたのですが、サーバ側の設定を変更しないと無理みたいですね。
以前書いたコードは忘れてください。ごめんなさい。
No.2
- 回答日時:
同じくソースは見てませんが・・・
cookieの保存、読み出し部分でブラウザによる違いはあまりないように思われますが、どのような事象なのでしょうか?
ちなみに、Slashdot Menuのオリジナル版はもちろん作動していますが、IE6では、ご提示のメニューはどちらも作動していないようです。
Opera8ではメニュー部分そのものが、表示されないみたいです。
cookieではなく、このあたりに原因がありそうでは?
勘違いをしていたら失礼。
この回答への補足
オリジナル版をiframeで表示させてみました。
http://www.rakuten.ne.jp/gold/magicmarket/test.h …
メニューを閉じて更新すると開いた状態に戻ると思います。
スクリプト自体に不具合があるわけではないのですが、iframe内でもIEで状態を保持する方法があれば使い勝手が向上するのでとても助かります。
方法がなければきっぱり諦めます。よろしくお願い致します。
No.1
- 回答日時:
サイトやソースなどは見ていません。
キャッシュから読んでいたり、ブラウザの戻るボタンや進むボタンを使う場合などの場合、
windowの読み込み完了イベントが発生しないブラウザがあります。
Firefoxはバージョン2か3で発生するように変更されました。
Operaはonloadイベントを発生させない代わりに、初期化後の変数の値まで全てを保存していると思います。
それへの簡単な対処法で、
</body>の直前で<script>タグを使って、直接呼び出す方法があります。
<body onload="init();"><!-- これは呼び出されない -->
.....
<script type="text/javascript">
init(); // これは呼び出される
</script>
</body>
ご参考まで。
この回答への補足
ご回答ありがとうございます。
状態の保持はcookieのキャッシュを利用しているのですが、iframeを使用しない場合は正常に動作しますので、ブラウザの読み込み自体は問題ないと考えられます。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブラウザ) IE・edgeで日増しに観られるサイトが減ってくる。 1 2022/10/04 22:40
- 格安スマホ・SIMフリースマホ スマホ機種交換及びLINEについて 4 2022/09/22 03:24
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Chrome(クローム) Cookieを削除 他サイトでの自動ログインなどの設定も削除されますか パソコン クロームです 1 2022/09/10 21:47
- SEO googleサーチコンソールで、重複URLが多数発生、その修正方法について 2 2023/06/23 16:15
- Chrome(クローム) Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 2 2023/02/04 16:45
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- Chrome(クローム) Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 1 2023/02/05 09:59
- デスクトップパソコン Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 1 2023/02/05 19:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIフォーム一定時間過ぎる...
-
<a href="#" …>の意味を教えて...
-
JavaScriptからVBScriptの呼び...
-
SQLのWHEREで全てを質問する方法
-
html メールリンクにて自動ファ...
-
bodyにidをつける理由は何ですか?
-
別ファイルのfunctionの読み込み方
-
ページの読み込みが完了してか...
-
新しいウィンドゥを最大化で立...
-
<script>...</script> 要素の内
-
javascriptとApacheの設定
-
HTMLソースからURLだけを抜き出...
-
lightwindowでPDFを表示させる...
-
SCRIPT5007: 未定義または NULL...
-
外部からのjs呼び出しについて。
-
子フレームの自動リロードは可...
-
横スクロールを右から左へ・・・
-
外部JavaScriptの設置場所について
-
javascriptにてonclickを無効
-
chromeでの擬似クラス:focus に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
¥マークの検索について
-
CGIフォーム一定時間過ぎる...
-
document.getElementById
-
javascriptで変数を組み込みたい
-
location.hrefが動かない・・・
-
明日の日にちを表示するときは
-
ページ内文字列の置換について
-
JavaScriptの入れ子
-
1から100までの平方根を表示す...
-
カウントダウンとカウントアッ...
-
JSによるリンク先の値の取得
-
特定のURLからの訪問者を入室禁...
-
IEでiframe内のcookieを保持
-
16進n桁の文字列変換の方法は?
-
ブラウザを閉じないようにする...
-
promptを使用した年齢認証
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
別ファイルのfunctionの読み込み方
-
getElementsByNameで要素が取得...
おすすめ情報