PageSourceSearch

https://teranildiz.pages.dev/privacy-wipe/shield.js

js teranildiz.pages.dev collected 2026-10-03 05:57:44 UTC 7,481 bytes, 130 lines download raw bytes

1/* ═══════════════════════════════════════════════════════════════════
2 * TERAN ILDIZ — privacy-wipe/shield.js   (MUSTAQIL, DOIMIY FAOL MODUL)
3 * ───────────────────────────────────────────────────────────────────
4 * MUAMMO: "Izni o'chirish" faqat SAQLANGAN MA'LUMOTNI (localStorage,
5 * cache, IndexedDB...) tozalaydi. Lekin OS DARAJASIDA yana bir "iz"
6 * bor: foydalanuvchi ilovadan boshqa ilovaga o'tganda (yoki "Recents" /
7 * "So'nggi ilovalar" oynasini ochganda), Android ham, iOS ham EKRANNING
8 * O'SHA ZAHOTIDAGI SUR'ATINI (screenshot/thumbnail) o'zi, avtomatik
9 * ravishda oladi va operatsion tizim darajasida saqlaydi. Bu — veb-sayt
10 * kodi UMUMAN nazorat qila olmaydigan joy, LEKIN oldini olish mumkin:
11 * agar ilova fon holatiga o'tishi bilan BIR ZUMDA butun ekranni neytral
12 * qopqoq bilan yopib qo'ysak, OS o'sha suratni OLGANDA endi faqat
13 * neytral qopqoqni ko'radi — asl kontentni EMAS.
14 *
15 * Bu aynan bank ilovalari, Signal, WhatsApp kabi ilovalar qo'llaydigan
16 * "Privacy Screen" usuli (ular buni tabiiy ilova darajasida qiladi,
17 * biz esa veb texnologiyalari bilan xuddi shunday natijaga erishamiz).
18 *
19 * ISHLASH TARTIBI:
20 *   • Sahifa yuklangan zahoti (DOM tayyor bo'lishi bilanoq) neytral
21 *     qopqoq oldindan tayyorlab qo'yiladi (lekin yashirin holda) — shu
22 *     bilan birinchi fon holatiga o'tishda ham KECHIKMASDAN ishlaydi.
23 *   • `visibilitychange` — YAGONA asosiy signal (eng ishonchli, faqat
24 *     haqiqiy fon holatida ishga tushadi). `pagehide` — qo'shimcha.
25 *   • XAVFSIZLIK TO'RI: qopqoq ko'rsatilgan har safar qisqa muddatli
26 *     o'z-o'zini tekshiruv ishga tushadi — agar sahifa aslida yashirin
27 *     bo'lmasa, qopqoq avtomatik olib tashlanadi. Bu har qanday soxta
28 *     signaldan keyin ilova "abadiy bo'sh ekran" holatida qolib
29 *     ketmasligini kafolatlaydi.
30 *   • Qopqoq CSS orqali emas, to'g'ridan-to'g'ri inline stil bilan
31 *     yaratiladi — boshqa fayllar (wipe.css va h.k.) hali yuklanmagan
32 *     bo'lsa ham darhol ishlashi uchun.
33 * ═══════════════════════════════════════════════════════════════════ */
34'use strict';
35(function () {
36  try {
37    var cover = null;
38
39    function ensureCover() {
40      if (cover) return cover;
41      cover = document.createElement('div');
42      cover.id = 'tiScreenShield';
43      cover.setAttribute('aria-hidden', 'true');
44      var dark = true;
45      try { dark = !(window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches); } catch (e) {}
46      cover.style.cssText =
47        'position:fixed;inset:0;z-index:2147483647;' +
48        'background:' + (dark ? '#0b0c0f' : '#f4f5f7') + ';' +
49        'display:none;';
50      var root = document.body || document.documentElement;
51      root.appendChild(cover);
52      return cover;
53    }
54
55    function show() { ensureCover().style.display = 'block'; armSafety(); }
56    function hide() { if (cover) cover.style.display = 'none'; disarmSafety(); }
57
58    /* ── XAVFSIZLIK TO'RI (MUHIM TUZATISH) ──
59       Agar biror sabab bilan (brauzer o'zgarishi, kutilmagan hodisa
60       tartibi) qopqoq YOPIQ holatda "yopishib qolsa" — bu butun ilovani
61       abadiy oq/qora ekran holida qoldirib qo'yardi. Endi har safar
62       qopqoq ko'rsatilganda qisqa muddatli tekshiruv o'rnatiladi: agar
63       shu payt sahifa HAQIQATDA yashirin bo'lmasa (document.hidden
64       yolg'on bo'lsa — bu brauzerning o'zi beradigan ENG ISHONCHLI
65       haqiqat manbasi), qopqoq avtomatik olib tashlanadi. Shu bilan
66       har qanday soxta signal o'zi-o'zidan bir necha soniyada tuzaladi. */
67    var _safetyTimer = null;
68    function armSafety() {
69      clearTimeout(_safetyTimer);
70      _safetyTimer = setTimeout(function () { if (!document.hidden) hide(); }, 1200);
71    }
72    function disarmSafety() { clearTimeout(_safetyTimer); }
73
74    /* visibilitychange — YAGONA TO'LIQ ISHONCHLI signal: faqat haqiqatda
75       yorliq/ilova fonga o'tganda ishga tushadi (manzil satriga bosish,
76       "Install" oynachasi yoki boshqa brauzer elementlari BUNGA ta'sir
77       qilmaydi — sahifa haligacha ko'rinib turibdi hisoblanadi). */
78    document.addEventListener('visibilitychange', function () {
79      if (document.hidden) show(); else hide();
80    }, true);
81
82    /* pagehide — sahifa navigatsiyadan chiqayotganda/"muzlatilayotganda"
83       qo'shimcha signal. Xavfsiz: yuqoridagi to'r bu yerda ham ishlaydi. */
84    window.addEventListener('pagehide', show, true);
85    window.addEventListener('pageshow', function () { if (!document.hidden) hide(); }, true);
86
87    /* MUHIM TUZATISH: avvalgi versiyada 'blur' hodisasi ham qopqoqni
88       ko'rsatar edi. LEKIN 'blur' — ishonchsiz signal: manzil satriga
89       bosish, brauzer kengaytmasi oynachasi, "Install" taklifi kabi
90       OYNA ICHIDAGI oddiy harakatlar ham uni ishga tushiradi, holbuki
91       sahifa haligacha to'liq KO'RINIB TURIBDI. Bunday holatda mos
92       "focus" hodisasi har doim ham qaytib kelavermaydi — natijada
93       qopqoq ABADIY yopiq holda qolib, butun ilova bo'sh/oq ekran
94       bo'lib qolardi (aynan shu xato foydalanuvchida kuzatilgan edi).
95       Shu sabab 'blur' endi qopqoqni KO'RSATMAYDI — faqat yordamchi
96       xavfsizlik chorasi sifatida saqlanadi: agar u ishga tushib
97       qolsa ham, yuqoridagi xavfsizlik to'ri bir necha soniyada
98       avtomatik tuzatib qo'yadi. */
99    window.addEventListener('focus', function () { if (!document.hidden) hide(); }, true);
100
101    /* Qopqoqni ERTAROQ tayyorlab qo'yamiz — DOM tayyor bo'lishi bilan,
102       birinchi fon holatiga o'tishda ham kechikish bo'lmasin. */
103    if (document.readyState === 'loading') {
104      document.addEventListener('DOMContentLoaded', ensureCover);
105    } else {
106      ensureCover();
107    }
108
109    window.TI = window.TI || {};
110    window.TI.ScreenShield = { show: show, hide: hide };
111
112    /* ── Orqaga/oldinga kesh (bfcache)ni ATAYLAB o'chirish ──
113       MUAMMO: brauzerlar "Orqaga" tugmasi tez ishlashi uchun oldingi
114       sahifani XOTIRADA to'liq holicha ("bfcache") saqlab qo'yishi
115       mumkin — qayta yuklanmasdan, aynan o'sha lahzadagi holatida
116       (o'qilgan kitob, JS holati bilan birga) darhol qaytaradi. Agar
117       foydalanuvchi "Izni o'chirish"dan keyin boshqa sahifaga o'tsa-yu,
118       keyin "Orqaga" tugmasini bossa — bfcache tufayli ilova xuddi
119       o'chirilmagandek, ANIQ O'SHA HOLATIDA qaytib kelishi mumkin edi.
120       YECHIM: "beforeunload" tinglovchisi ro'yxatdan o'tkazish — bu
121       hodisa hech narsa qilmasa ham, brauzerlar (ayniqsa Chrome) uni
122       "sahifada saqlanishi kerak bo'lgan holat bor" belgisi deb qabul
123       qiladi va shu sahifani bfcache'ga QO'YMAYDI. Natijada "Orqaga"
124       bosilganda sahifa har doim TOZA holatda, tarmoqdan/keshdan qayta
125       yuklanadi — hech qanday eski kontent xotiradan "qayta tirilmaydi".
126       (Kichik xarajat: orqaga/oldinga navigatsiya biroz sekinroq bo'ladi
127       — maxfiylik ilovasi uchun bu almashinuv o'zini oqlaydi.) */
128    try { window.addEventListener('beforeunload', function () {}); } catch (e) {}
129  } catch (e) { try { console.warn('[screen-shield]', e); } catch (e2) {} }
130})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.