TikTok UI Enabler

Скрывает капчу/модальные окна и обеспечивает интерактивность основного интерфейса TikTok.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         TikTok UI Enabler
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Скрывает капчу/модальные окна и обеспечивает интерактивность основного интерфейса TikTok.
// @author       Gemini
// @match        *://*.tiktok.com/*
// @grant        GM_addStyle
// @run-at       document-start
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 1. Скрываем капчу, оверлеи и модальные окна с помощью CSS.
    //    Также гарантируем, что основной контейнер всегда будет принимать клики.
    GM_addStyle(`
        /* Контейнеры капчи и модальных окон */
        #tiktok-verify-ele,
        .captcha-verify-container,
        div[data-floating-ui-portal] {
            display: none !important;
            visibility: hidden !important;
            pointer-events: none !important;
        }

        /* Оверлеи (полупрозрачный фон) */
        .TUXModal-overlay,
        .css-1o4zb36-DivModalMask {
            display: none !important;
            visibility: hidden !important;
        }

        /* Гарантируем, что основной контейнер приложения всегда интерактивен */
        #app, #main-content-video_detail {
            pointer-events: auto !important;
            filter: none !important; /* Убирает размытие, если оно применяется */
        }
    `);

    // 2. Используем MutationObserver для отслеживания и отмены блокирующих действий.
    const observer = new MutationObserver((mutationsList) => {
        for (const mutation of mutationsList) {
            // Цель: главный контейнер <div id="app">
            const appElement = document.getElementById('app');
            if (appElement && appElement.hasAttribute('inert')) {
                appElement.removeAttribute('inert');
                console.log('UserScript: Атрибут "inert" удален, UI разблокирован.');
            }

            // Цель: элемент <body>
            const bodyElement = document.body;
            if (bodyElement) {
                // Если JS пытается заблокировать прокрутку через стиль
                if (bodyElement.style.overflow === 'hidden') {
                    bodyElement.style.overflow = 'auto'; // или 'scroll'
                    console.log('UserScript: Прокрутка для <body> принудительно включена.');
                }
                // Если JS пытается заблокировать прокрутку через класс
                if (bodyElement.classList.contains('disable-scroll')) {
                    bodyElement.classList.remove('disable-scroll');
                    console.log('UserScript: Класс "disable-scroll" удален, UI разблокирован.');
                }
            }
        }
    });

    // Начинаем отслеживание изменений в <body> и его дочерних элементах
    // как только DOM будет доступен.
    window.addEventListener('DOMContentLoaded', () => {
        const targetNode = document.body;
        if (targetNode) {
            observer.observe(targetNode, {
                attributes: true, // отслеживать изменения атрибутов (style, class)
                childList: true, // отслеживать добавление/удаление дочерних элементов
                subtree: true,   // отслеживать изменения во всех вложенных элементах
            });
            console.log('UserScript: Отслеживание блокировки UI активно.');
        }
    });
})();