Предупреждение о рисках!
Установка скиллов и плагинов OpenClaw осуществляется на ваш страх и риск. Все файлы были получены из открытых источников и предоставляются «как есть». Мы не гарантируем их корректную работу, безопасность или совместимость с вашей системой. Перед установкой настоятельно рекомендуется ознакомиться с содержимым кода и убедиться, что вы понимаете, какие изменения будут внесены в вашу систему.
Chrome DevTools Protocol (CDP), Manifest V3 и практики отладки, которые помогают избежать типичных ошибок при автоматизации.
Chrome DevTools Protocol (CDP)
- Сначала получайте WebSocket URL вкладки: не подключайтесь напрямую к
ws://localhost:9222/devtools/browser. Вместо этого запрашивайтеhttp://localhost:9222/json/listи используйтеwebSocketDebuggerUrlактивной вкладки. - Включайте домены перед использованием: обязательно вызывайте
Runtime.enableиPage.enableперед выполнениемRuntime.evaluateилиPage.navigate. - CDP работает асинхронно: дождитесь ответа перед отправкой следующей команды. Используйте обёртку на промисах с отслеживанием ID ответа.
- Скриншоты на Retina / HiDPI: добавляйте
fromSurface: trueиscale: 2в параметрыPage.captureScreenshot. - Тело ответа нужно получать отдельно: событие
Network.responseReceivedне содержит body. ИспользуйтеNetwork.getResponseBodyпосле завершения запроса.
Chrome Extension (Manifest V3)
- Разделение разрешений: используйте
permissionsдля API иhost_permissionsдля URL. Не применяйтеhttp://*/*. - Service Worker не постоянен: состояние не сохраняется. Используйте
chrome.storage.localвместо глобальных переменных. - Заменяйте setInterval: используйте
chrome.alarmsдля периодических задач. - Изоляция content scripts: они не имеют доступа к глобальным переменным страницы. Для выполнения в контексте страницы используйте
chrome.scripting.executeScript. - Коммуникация: применяйте
window.postMessageдля связи между content script и страницей. - Асинхронное хранилище:
chrome.storage.local.get()возвращает Promise — не забывайтеawait. - Обработка квот: учитывайте ошибки
QUOTA_EXCEEDED.
Определение контекста
- Определение Chrome (не Edge/Brave): проверяйте
window.chromeиnavigator.vendor === "Google Inc.", исключая Opera и Edge. - Тип контекста расширения:
chrome.runtime.id— content scriptchrome.runtime.getManifest— popup/background/optionschrome.loadTimesбез runtime — обычная веб-страница
- Проверка версии Manifest: оборачивайте
chrome.runtime.getManifest()в try-catch. - API различия: используйте
chrome.actionдля V3 иchrome.browserActionдля V2.
Отладка производительности
- Memory API: проверяйте наличие
performance.memoryперед использованием. - Performance marks: применяйте
performance.mark()иperformance.measure()для измерений. - Очистка меток: удаляйте их, чтобы избежать утечек памяти.
- Поиск layout thrashing: используйте
PerformanceObserverс типамиmeasure,paint,largest-contentful-paint. - Порог: отмечайте операции дольше 16.67 мс.
Отладка сети
- Блокировка до навигации: вызывайте
Network.setBlockedURLsпередPage.navigate. - Перехват запросов: используйте
Network.setRequestInterceptionсrequestStage: "Request". - Блокировка: возвращайте
errorReason: "BlockedByClient".
Контексты безопасности
- Смешанный контент: HTTPS-страницы не могут загружать HTTP-ресурсы. Проверяйте
location.protocol. - CORS ошибки:
TypeErrorпри fetch часто означает проблему CORS. Проверяйте вкладку Network в DevTools. - Требования secure context: API (File System Access, Clipboard) требуют
window.isSecureContext === trueи действия пользователя.
Эти практики помогают избежать типичных ошибок при работе с Chrome, автоматизации через CDP и разработке расширений на Manifest V3.
Файл из источника