Этот вопрос:Local Storage Междоменное - Safari отключает его по умолчанию
Я использовал GitHub проект Офир Даган: Сохранение междоменное локальное хранилище.
Он реализует html5 локальное хранилище: https://github.com/ofirdagan/cross-domain-local-storage
Проблема:
Safari не позволяет куки третьих лиц по умолчанию (другие браузеры позволяют это).
Safari предпочтения частной жизни:
по умолчанию: "Разрешить из сайтов я посещаю".
Я читал об этих параметрах:
Всегда блокировать - Блокировать все первые сторонние куки и блокировать все сторонние куки.
Разрешить только с текущего сайта - Разрешить все файлы cookie сторонних производителей и блокировать все сторонние файлы cookie.
Позвольте от веб-сайтов, которые я посещаю - Разрешить все первые сторонние куки и блокировать все сторонние куки, если что третья сторона не была первая партия в свое время (на основе текущих печеньем и истории просмотра).
Всегда разрешать - Разрешить все файлы cookie сторонних производителей и разрешить использование всех сторонних файлов cookie.
Решение Я попытался:
Локальное хранилище с фрейма (пикселя) - Я не думаю, что это больше не работает на сафари - Is there any workaround to set third party cookie in Iframe for safari?
Я думаю, что существует способ совместного использования локального хранилища между сайтами сторонних производителей и сторонними сайтами в Safari. (Facebook.com и Booking.com обмениваются данными между разными доменами).
Мне удалось добиться этого, удалив API и написав его самостоятельно. Но я не хочу удалять API и реализовывать его самостоятельно (надеюсь, что есть небольшое исправление для поддержки Safari):
Iframe.html
:
window.addEventListener('cors_event', function(event) {
if(event.event_id === 'my_cors_message'){
if (event.data.options.funcName == "SetItem") {
localStorage.setItem(event.data.options.key, event.data.options.value);
}
else if (event.data.options.funcName == "GetItem") {
return localStorage.getItem(event.data.options.key);
}
}
});
MainPage:
<iframe id="target" src="iframe.html" frameborder="1"></iframe>
<script>
var target = document .getElementById('target');
target.onload = function(){
target.contentWindow.postMessage('set', '*')
}
</script>
Так кто-то знает, как я могу достичь этого, изменив некоторые API-интерфейсы для поддержки Safari?
Любая помощь оценена!
Не путайте печенье и локальное хранилище. Это разные вещи. Файлы cookie вообще не связаны с локальным хранилищем. Поэтому, если вы используете локальное хранилище, политика обработки файлов cookie не может вызвать проблемы с локальным хранилищем. – hindmost
Я знаю, что Cookies и локальное хранилище разные. Но когда я перехожу к: «Всегда разрешать», локальное хранилище считывается из кросс-домена. Я предполагаю, что локальное хранилище связано с данными «и веб-сайта». Я могу отправить вам пример для этого. (Хранение данных в локальном хранилище сайта X, а затем перейдите на сайт Y, который пытается прочитать данные). –
В какой версии сафари это поведение изменилось? – mash