こんにちは、コブラです。
ブラウザバックの機能を使いたい場合はJavascriptを使って、
こんな風に書きますよね。
<a href="#" onclick="history.back()">戻る</a>
でも、これではブラウザによって効かないことも・・・
というわけで!
そんな時はこう書き換えてみてください。
<a href="javascript:void(0)" onclick="javascript:history.back()">戻る</a>
これなら、どのブラウザでも使えるはずです!
HTML, JavaScript, 社員:cobra
こんにちは、コブラです。
先日、「IE iframeを用いてクロスドメインするとcookieが動かない?」という記事を書きましたが、
これでもダメなパターンがあると判明!
というわけで、今日のネタは、検索しても情報が少ないし、
そもそもIEのシェアもあれだしってことで、
かなり貴重でお役に立つこと間違いなし!?
ことIEに関しては、
別ドメインのページをiframe内を使うと、
iframe内のページでCookieを操作することができなくなります。
セキュリティ関係でIEがCookie操作を不可能にしてるからなんですが…。
通常は、IEの「インターネットオプション」から、
「プライバシー」タブ > 「サイト」 で対象のドメインを許可させないといけないのですが、
ユーザにそんなことさせられませんよねぇ。
で、プログラムからこれを許可する方法があります。
『P3P』という仕組み?なんですが、
説明はこちらの方の詳しい記事にて!→[MEMO]P3Pについて – 雑記帳
で、「iframe p3p」とかで検索すると、
PHPなら「header(“P3P: CP=’UNI CUR OUR’”);」でOKです!と書いてる人が多く、
私もそう書きました!
が!
これではダメなことも!
あ、ちなみにこれは、「<!DOCTYPE HTML PUBLIC~」の前に書きます。
仕方ないので、プライバシーポリシーの宣言ファイル(XML)も作ってみたのですが、
それでもダメ。
一応、公式?の
「P3Pポリシー作成」(XML自動生成)
「P3P Validator」(P3pのXML構文チェック)
もやってみました。
で、どうにもならなかったのですが、
httpd.confというApacheの設定ファイルに以下を加えたら、
とりあえずIE8,9で動くようになりました。
## for Privacy Policy of cookie
<IfModule mod_headers.c>
Header set P3P "CP=\"UNI CUR OUR\""
</IfModule>
設定後はApacheの再起動が必要です。
もし、header関数で動かない方は試してみてください。
一応、XMLの読み込み部分も残しておきました:P
HTML, 社員:cobra
こんにちは、コブラです。
タイトルの通り、IEでiframeを使って別のドメインのページを読み込むと、
その中でCookieが思うように使えませんでした。
こんな感じ。
Parent.html
└ (iframe src=)Child.html → Cookieの読み書き →NG!!
Cookieの指定が間違ってる?親フレームのCookie見てる?
でもIE以外は動作してるよ?
???・・・(°Д°;)・・・???
という感じでしたが、
調べたらすぐに原因が分かりました。
IEは、セキュリティの観点からクロスドメインによるCookie操作を拒否してたんですね!(このヤロウ!)
で、それを許可するには、
ざっくり言うとCookieを使う前にコンテンツポリシーのような宣言をします!
PHPの場合は
<?php header("P3P: CP='UNI CUR OUR'"); ?>
とヘッダーで書くだけ。
簡単でした。
これで
Parent.html
└ (iframe src=)Child.html → Cookieの読み書き →OK♪
となりました。
参考にさせてもらったサイトさん
P3Pコンパクトポリシーをコピペするのが流行らないことを祈る
IEでクロスドメインのiframe内のcookieが取れない
HTML, JavaScript, jQuery, PHP, 社員:cobra
最近のコメント