"use client"; import { useEffect, useSyncExternalStore } from "react"; import { useChromeless } from "@/components/layout/route-visibility"; /** 对齐 jha-1043 eightPop.js:sessionStorage + 关闭/退出均离开站点 */ const SESSION_KEY = "ageConfirmed"; const EXIT_URL = "about:blank"; let confirmed: boolean | null = null; const listeners = new Set<() => void>(); function emit() { listeners.forEach((listener) => listener()); } function readConfirmed() { if (confirmed === null) { try { confirmed = window.sessionStorage.getItem(SESSION_KEY) === "1"; } catch { confirmed = false; } } return confirmed; } function confirmAge() { confirmed = true; try { window.sessionStorage.setItem(SESSION_KEY, "1"); } catch { // sessionStorage 不可用时仍允许本页确认并关闭 } emit(); } export function openAgeGateDialog() { confirmed = false; try { window.sessionStorage.removeItem(SESSION_KEY); } catch {} emit(); } export function subscribeAgeGate(listener: () => void) { listeners.add(listener); return () => listeners.delete(listener); } export const getAgeGateOpen = () => !readConfirmed(); const getServerSnapshot = () => false; function exitSite() { try { window.location.replace(EXIT_URL); } catch { window.location.href = EXIT_URL; } } export function AgeGateDialogHost() { const chromeless = useChromeless(); const open = useSyncExternalStore(subscribeAgeGate, getAgeGateOpen, getServerSnapshot) && !chromeless; useEffect(() => { if (!open) return; const { overflow } = document.body.style; document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = overflow; }; }, [open]); if (!open) return null; return (
本网站包含有年龄限制的内容,包括裸体和露骨色情素材的内容。 点击继续即表示您确认您已年满 18 岁,或在您访问本网站时所在的司法管辖区已是成年人 。