Подтвердить что ты не робот

Как установить cookie из внешних доменов внутри iframe в Safari?

От Apple разработчик faq

Safari отправляется с консервативным политика cookie, которая ограничивает cookie записывает только выбранные страницы ( "navigated to" ) пользователем.

По умолчанию Safari разрешает только файлы cookie с сайтов, на которые вы переходите напрямую. (т.е. если вы нажмете на ссылки с URL-адресом этого имени домена).

Это означает, что если вы загружаете страницу со своего сайта с помощью iFrame со страницей с другого сайта, то другой сайт не может устанавливать файлы cookie. (например, билетная площадка). Как только вы посетили другой домен напрямую, другой сайт может получить доступ и изменить свои собственные файлы cookie.

Без доступа к коду на другом сайте, как я могу сделать пользовательский опыт как ненавязчивым, насколько это возможно?

Есть ли способ (javascript?), чтобы проверить, уже установлены и, соответственно, сначала показывают прямую ссылку на другой сайт?

Update:

Функция HTML5 "window.postmessage" кажется хорошим решением.
Существуют некоторые библиотеки jQuery, которые могут помочь и совместимы с последними браузерами.
По сути, документ iFrame отправляет сообщения с помощью Json через элемент window.

Очень приятный Postmessage-plugin от daepark, который я получил.
и другой jQuery postMessage, найденный Ben Alman, но не тестировался.

4b9b3361

Ответ 1

localStorage, поддерживаемый сафари и всеми современными браузерами, разрешает операции чтения/записи даже на страницах, загружаемых в iframe. если вы не возражаете отказаться от поддержки ie6 и ie7, попробуйте использовать localStorage вместо файлов cookie на вашем сайте в рамке. Я знаю, что в вашем конкретном вопросе конкретно говорится, что у вас нет доступа к коду на сайте в рамке, но для тех, кто это делает, localStorage определенно решает проблему "без файлов cookie в Safari iframe".

Ответ 2

Это проблема, известная как политика одинакового происхождения. По сути, это мера безопасности против создания лазеек безопасности.

Если у вас есть iframe, который указывает на страницу в вашем собственном домене, JavaScript может иметь доступ как к странице, на которой вы находитесь, так и к странице в Iframe. Это приемлемое родительское отношение к дочернему и дочернему по отношению к родительским отношениям.

 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
      ^--------|---------^

Однако, как только у вас есть файл, указывающий на внешнюю страницу, SOP входит в игру и перехватывает любую информацию, проходящую между родительской страницей и страницей iframe.

 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
               X

Отправляй сообщение об общении iframe, это имеет большой смысл! fooobar.com/questions/14893/...

Эти ссылки действительно помогают!

1) Безопасная междоменная связь в браузере
2) wiki SOP или одинарная политика происхождения

Удачи!

Ответ 3

Эта страница предлагает разместить на ваших страницах javascript, который обнаруживает отсутствие cookie cookie всегда. Когда он обнаруживает, что cookie не был установлен, он отправляет необходимые данные сеанса на страницу, которая устанавливает cookie, и перенаправляет вас на исходную страницу.

По-видимому, POST достаточно, чтобы удовлетворить тест Safari "Я прошел этот тест", поэтому с этого момента он принимает файлы cookie из этого домена.

Конечно, это не самый приятный код, но может решить вашу проблему.

Ответ 4

Одним из решений (немного беспорядочным) может быть проверка родительской страницы на наличие файла cookie, и если файл cookie отсутствует, запустите вызов AJAX script в домене страницы iframe, который устанавливает cookie.

Ответ 5

Это распространенная проблема с приложениями facebook, отображаемыми в Safari. То, как многие (включая меня) имели дело с этим, заключается в том, чтобы иметь в своем распоряжении страницу POST с iframed. Когда страница разместила данные формы, тогда разрешено устанавливать файлы cookie. В конце концов, он работает с обновлением на 1 страницу, что даже может быть вашим POST-адресом пользователя.