22

Appleデベロッパのよくある質問から

Safariには、ユーザーが選択した(「ナビゲートした」)ページにのみCookieの書き込みを制限する保守的なCookieポリシーが付属しています。

デフォルトでは、Safariは直接移動するサイトからのCookieのみを許可します。(つまり、そのドメイン名のURLを持つリンクをクリックした場合)。

つまり、自分のサイトからiFrameを使用して別のサイトのページを読み込んだ場合、他のサイトはCookieを設定できません。(たとえば、チケットショップ)。他のドメインに直接アクセスするとすぐに、他のサイトは独自のCookieにアクセスして変更できるようになります。

他のサイトのコードにアクセスできない場合、どうすればユーザーエクスペリエンスをできるだけ目立たなくすることができますか?

他のサイトのCookieがすでに設定されているかどうかを確認し、必要に応じて他のサイトへの直接リンクを最初に表示する(javascript?)方法はありますか?

アップデート:

HTML5機能の「window.postmessage」は良い解決策のようです。
役立つ可能性があり、最新のブラウザと互換性のあるjQueryライブラリがいくつかあります。
本質的に、iFrameドキュメントはJsonを使用してウィンドウ要素を介してメッセージを送信します。

とても素敵なPostmessage-plugin、daeparkによる、私が働いた。
ベン・アルマンによる別のjQuery postMessageが見つかりましたが、テストしていません。

4

5 に答える 5

10

Safari および最新のすべてのブラウザーでサポートされている localStorage は、iframe に読み込まれたページでも読み取り/書き込み操作を許可します。ie6 と ie7 のサポートをやめても構わない場合は、フレーム サイトで Cookie の代わりに localStorage を使用してみてください。あなたの質問は、フレーム化されたサイトのコードにアクセスできないと具体的に言っていることを知っていますが、アクセスできる人にとっては、localStorage は「サファリ iframe に Cookie がない」問題を確実に解決します。

于 2012-03-05T02:07:31.870 に答える
3

このページでは、常に存在する Cookie が存在しないことを検出する JavaScript をページに配置することをお勧めします。Cookie が設定されていないことを検出すると、必要なセッション データを Cookie を設定するページに送信し、元のページにリダイレクトします。

どうやら POST は Safari の「このドメインに移動したか」テストを満たすのに十分であるため、それ以降はそのドメインからの Cookie を受け入れます。

もちろん、これは最も優れたコードではありませんが、問題を解決できる可能性があります。

于 2009-08-12T16:18:48.453 に答える
2

1 つの解決策 (やや面倒) は、親ページで Cookie の存在を確認し、Cookie が存在しない場合は、Cookie を設定する iframe ページのドメインでスクリプトへの AJAX 呼び出しを実行することです。

于 2009-08-17T13:58:23.973 に答える
2

これは、Safari で表示される Facebook アプリでよくある問題です。多くの人 (私を含む) がこれに対処した方法は、iframe されたページをそれ自体に POST することです。ページがフォーム データを投稿すると、Cookie の設定が許可されます。最終的には、1 ページの更新で機能します。これは、ユーザー ログイン POST である可能性もあります。

于 2010-10-23T01:09:17.723 に答える