-
Vadim TsukanovРазработчик
-
Дата публикации28.03.2024
-
КатегорияJavaScript
Задача:Показывать модальное окно с выбором региона сайта. На всех регионах - единожды.
Иногда необходимо прокинуть какие-нибудь данные на все поддомены сайта. Например, выбор города или языка сайта для посетителя. Но любые localStorage и и т.д. имеют встроенную защиту на cross-origin…
У себя на проекте я решил проблему при помощи кук. А для того, чтобы кука была доступна на всех поддоменах — использовал небольшой хак, который нашел на просторах интернета. Авторство не присваиваю, просто сохраню себе и Вам для простоты поиска.
var Cookie =
{
set: function(name, value, days)
{
var domain, domainParts, date, expires, host;
if (days)
{
date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
else
{
expires = "";
}
host = location.host;
if (host.split('.').length === 1)
{
document.cookie = name+"="+value+expires+"; path=/";
}
else
{
domainParts = host.split('.');
domainParts.shift();
domain = '.'+domainParts.join('.');
document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
if (Cookie.get(name) == null || Cookie.get(name) != value)
{
domain = '.'+host;
document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
}
}
},
get: function(name)
{
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i=0; i < ca.length; i++)
{
var c = ca[i];
while (c.charAt(0)==' ')
{
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
erase: function(name)
{
Cookie.set(name, '', -1);
}
};