Ответ 1
Вы можете попробовать Store.JS. Согласно документам:
store.js предоставляет простой API для локального хранилища кросс-браузера
Проблема:
Я использовал проект 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?
Любая помощь оценивается!
Вы можете попробовать Store.JS. Согласно документам:
store.js предоставляет простой API для локального хранилища кросс-браузера
Заметки о Safari 7+ (OSX, iOS)
Все междоменные локальные хранилища отключены по умолчанию с помощью Safari 7+. Это результат настройки конфиденциальности "Блокировать файлы cookie и других веб-сайтов", установленных на "От третьих лиц и рекламодателей". Любой клиентский код кросс-хранилища не будет разбиваться, однако он будет иметь доступ только к изолированному изолированному локальному хранилищу. Таким образом, ни одна из данных, ранее установленных другими источниками, не будет доступна. Если есть возможность, можно вернуться к использованию корневых файлов cookie для этих пользовательских агентов или запросить данные из хранилища на стороне сервера.
подробнее см. это lib