Local Storage Cross Domain - Safari отключает его по умолчанию

Проблема:

Я использовал проект github Ofir Dagan: сохранение междоменного локального хранилища.

Он реализует локальное хранилище html5: https://github.com/ofirdagan/cross-domain-local-storage


Проблема:

Safari не разрешает сторонние файлы cookie по умолчанию (это позволяют другие браузеры).

Настройки конфиденциальности Safari:

введите описание изображения здесь

По умолчанию: "Разрешить с веб-сайтов, которые я посещаю".

Я читал об этих настройках:

  • Всегда блокировать. Блокируйте все файлы cookie сторонних производителей и блокируйте все сторонние файлы cookie.

  • Разрешить только с текущего сайта. Разрешить все файлы cookie сторонних производителей и заблокировать все сторонние файлы cookie.

  • Разрешить доступ к веб-сайтам, которые я посещаю. Разрешить все файлы cookie сторонних производителей и блокировать все сторонние файлы cookie, если эта третья сторона не была первой стороной за один раз (на основе текущих файлов cookie и просмотра история).

  • Всегда разрешать. Разрешить все сторонние файлы cookie и разрешить все сторонние файлы cookie.


Решение Я пробовал:

Локальное хранилище с iframe (пиксель) - я думаю, что он больше не работает в Safari - Есть ли какое-либо обходное решение для установки стороннего cookie в iframe для сафари?


Я думаю, что есть способ поделиться локальным хранилищем между сайтами сторонних и сторонних сайтов в 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?

Любая помощь оценивается!

Ответ 1

Вы можете попробовать Store.JS. Согласно документам:

store.js предоставляет простой API для локального хранилища кросс-браузера

Ответ 2

Заметки о Safari 7+ (OSX, iOS)

Все междоменные локальные хранилища отключены по умолчанию с помощью Safari 7+. Это результат настройки конфиденциальности "Блокировать файлы cookie и других веб-сайтов", установленных на "От третьих лиц и рекламодателей". Любой клиентский код кросс-хранилища не будет разбиваться, однако он будет иметь доступ только к изолированному изолированному локальному хранилищу. Таким образом, ни одна из данных, ранее установленных другими источниками, не будет доступна. Если есть возможность, можно вернуться к использованию корневых файлов cookie для этих пользовательских агентов или запросить данные из хранилища на стороне сервера.

подробнее см. это lib