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.