Этот скрипт представляет собой умный фильтр контента, который определяет местоположение пользователя по его IP-адресу и скрывает определенные блоки сайта, если они запрещены в данной стране.

Представьте, что вы ведете блог или интернет-магазин и хотите показывать определенные товары или статьи только жителям конкретных стран. Или наоборот — вам нужно скрыть кнопку оплаты для стран, где ваш сервис не работает.


Как это работает:
* Определение локации: Скрипт обращается к сервису ipapi.co, чтобы узнать, из какой страны пришел посетитель.

* Проверка прав: Он ищет на странице специальные блоки с пометкой data-geo-hide.

* Блокировка: Если код страны пользователя совпадает со списком запрещенных для этого блока, содержимое исчезает.

* Заглушка: Вместо скрытого контента пользователь видит аккуратную серую плашку с сообщением: «Контент недоступен в вашем регионе» и указанием его страны.


Главные плюсы:
* Стильный дизайн: В скрипт уже встроены современные CSS-стили для уведомления (закругленные углы, приятные шрифты).

* Мультиязычность: Названия стран автоматически переводятся на русский язык.

* Гибкость: Можно скрыть один блок для США, а другой — для Германии и Франции одновременно.


Код
<style>  
.geo-inline-note {  
padding: 14px 16px;  
border-radius: 14px;  
background: rgba(17, 24, 39, .06);  
border: 1px solid rgba(17, 24, 39, .14);  
font: 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;  
color: #111827;  
}  
.geo-inline-note b {  
font-weight: 700;  
}  
.geo-inline-note .geo-inline-title {  
margin: 0 0 6px;  
font-size: 16px;  
}  
.geo-inline-note .geo-inline-sub {  
margin: 0;  
opacity: .9;  
}  
.geo-inline-note .geo-inline-meta {  
margin-top: 10px;  
font-size: 12px;  
opacity: .75;  
}  
  </style>  
  

Код
<script>  
  (function () {  
"use strict";  

var COUNTRY_RU = {  
RU: "Россия",  
UA: "Украина",  
BY: "Беларусь",  
KZ: "Казахстан",  
MD: "Молдова",  
RO: "Румыния",  
PL: "Польша",  
DE: "Германия",  
FR: "Франция",  
IT: "Италия",  
ES: "Испания",  
GB: "Великобритания",  
US: "США",  
CA: "Канада",  
TR: "Турция",  
IL: "Израиль",  
GE: "Грузия",  
AM: "Армения",  
AZ: "Азербайджан",  
LV: "Латвия",  
LT: "Литва",  
EE: "Эстония",  
CZ: "Чехия",  
SK: "Словакия",  
BG: "Болгария"  
};  

function escapeHtml(s) {  
return String(s).replace(/[&<>"']/g, function (c) {  
return ({ "&":"&","<":"<",">":">",'"':""","'":"'" })[c];  
});  
}  

function getGeo() {  
return fetch("https://ipapi.co/json/", { cache: "no-store" })  
.then(function (r) { return r.json(); })  
.then(function (d) {  
return {  
code: d && d.country_code ? String(d.country_code).toUpperCase() : "",  
name: d && d.country_name ? String(d.country_name) : ""  
};  
});  
}  

function normalizeCountry(geo) {  
var code = geo.code || "??";  
var name = geo.name || COUNTRY_RU[code] || "Неизвестная страна";  
return { code: code, name: name };  
}  

function renderPlaceholder(node, geo) {  
node.innerHTML =  
'<div class="geo-inline-note">' +  
'<p class="geo-inline-title">⛔ Контент недоступен в вашем регионе.</p>' +  
'<p class="geo-inline-sub">Доступ для страны <b>' +  
escapeHtml(geo.name) + '</b> (' + escapeHtml(geo.code) + ') ограничен.</p>' +  
'<div class="geo-inline-meta">Страна определяется по IP адресу.</div>' +  
'</div>';  
}  

function onReady(fn) {  
if (document.readyState === "loading") {  
document.addEventListener("DOMContentLoaded", fn);  
} else {  
fn();  
}  
}  

onReady(function () {  
var nodes = document.querySelectorAll("[data-geo-hide]");  
if (!nodes.length) return;  

getGeo().then(function (geoRaw) {  
var geo = normalizeCountry(geoRaw);  
if (!geo.code || geo.code === "??") return;  

nodes.forEach(function (node) {  
var list = String(node.getAttribute("data-geo-hide") || "")  
.split(",")  
.map(function (x) { return x.trim().toUpperCase(); })  
.filter(Boolean);  

if (list.indexOf(geo.code) !== -1) {  
renderPlaceholder(node, geo);  
}  
});  
});  
});  

  })();  
  </script>


Как применять этот скрипт на странице
Чтобы ограничить конкретный блок, достаточно добавить атрибут data-geo-hide.


Пример:
Код
<div data-geo-hide="RU,BY">  
<h3>Онлайн покупка товара.</h3>  
<button>оплатит заказ.</button>  
  </div>

В этом примере:
пользователи из RU и BY увидят уведомление о недоступности контента;
пользователи из других стран увидят оригинальный блок.
Таким образом можно ограничивать любое количество элементов на странице

Комментарии

Минимальная длина комментария - 50 знаков. комментарии модерируются
HTMLSTART » CSS3 - JS - SVG Примеры » Прочие скрипты для сайтов » Этот скрипт для вашего сайта — интеллектуальный фильтр контента