Кнопка «Согласиться» вешает куку cookie_accept=true на год и при её наличии запрос на акцептирование больше не спрашивается. Кнопка «Отказаться» отправляет на пустую страницу about:blank Оверлей перекрывает всю страницу не позволяя без акцептирования кликать по всем елементам страницы и использовать сайт. Список страниц — исключений на которых проверка не производится совсем, в виде относительных урлов задается в массиве exceptionURLs Код можно затестить на любом сайте открыв средства разработчика и просто вставив его весь в консоль.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 'use strict'; (function () { const exceptionURLs = [ // относительные url для исключения принятие условий по cookie "/cookie_test?sfdfsd", "/page.html" ]; function setcookie(name, value, expires, path, domain, secure) {expires instanceof Date ? expires = expires.toGMTString() : typeof(expires) == 'number' && (expires = (new Date(+(new Date) + expires * 1e3)).toGMTString());let r = [name + "=" + escape(value)],s, i;for (i in s = { expires: expires, path: path, domain: domain }) { s[i] && r.push(i + "=" + s[i]); } return secure && r.push("secure"), document.cookie = r.join(";"), true;} function getCookie(name) { let matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)")); return matches ? decodeURIComponent(matches[1]) : undefined; } !exceptionURLs.includes(location.pathname + location.search) && !getCookie('cookie_accept') && (function () { let overlay = document.createElement('div'), cookies_message_panel = document.createElement('div'), accept = document.createElement('span'), not_accept = document.createElement('span'); overlay.style.cssText = 'display:block;position:fixed;left:0;top:0;right:0;buttom:0;z-index:999999999999;width:100%;height:100%;'; cookies_message_panel.style.cssText = 'position: absolute;bottom: 0;left: 0;right: 0;width: 100%;margin: 0;padding: 20px 10px;background: rgba(38,39,40,0.7);font-size: 13px;line-height: 1.3;justify-content: center;text-align: center;color: #fff;z-index: 99;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;'; accept.style.cssText = not_accept.style.cssText = 'display:inline-block;background: rgba(38,39,40,0.7);padding:5px;margin:5px 5px 0 5px;cursor:pointer;'; cookies_message_panel.innerHTML = 'Мы используем Cookie. Чтобы пользоваться сайтом, Вам нужно разрешить использование.<br>'; accept.innerHTML = 'Согласиться'; not_accept.innerHTML = 'Отказаться'; accept.onclick = function () {setcookie('cookie_accept', true, 31536000);document.body.removeChild(this.parentNode.parentNode);} not_accept.onclick = function () {window.location = 'about:blank';} cookies_message_panel.appendChild(accept); cookies_message_panel.appendChild(not_accept); overlay.appendChild(cookies_message_panel); document.body.appendChild(overlay); })();})(); |