Проблема:
Я использовал проект 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?
Любая помощь оценивается!