Локальное хранилище через домен-Safari отключает его по умолчанию

вопрос:

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

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


проблема:

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

настройки конфиденциальности браузера Safari являются:

enter image description here

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

Я читал об этих параметрах:

  1. Всегда Блокировать - блокировать все сторонние файлы cookie и блокировать все сторонние файлы cookie.

  2. разрешить только с текущего веб-сайта - разрешить все сторонние куки и блокировать все сторонние куки.

  3. разрешить из Сайты Я Посещаю - разрешить все файлы cookie и файлы cookie третьих сторон, если третья сторона была первой партией За один раз (на основе текущих куки и историю посещенных страниц).

  4. Всегда Разрешать - разрешить все сторонние куки и разрешить все сторонние куки.


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

локальное хранилище с iframe (pixel) - я думаю, что он больше не работает Сафари -есть ли обходной путь для установки сторонних файлов cookie в Iframe для 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?

любая помощь приветствуется!

2 ответов


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

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


Как отмечает документация библиотеки перекрестного хранения:

примечания к Safari 7+ (OSX, iOS)

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