Расширение для chrome. youtube на полный экран с помощью deepseek
попросил deepseek написать код для расширения chrome, которое будет автоматически переключать видео на ютуб в полный экран после 10 секунд бездействия пользователя и обратно если пошевелить мышкой. сам я не программист ни разу, поэтому путь был долог и тернист. усугубляло ситуацию периодическое "сервер занят".
сначала не получалось вообще ничего, похоже гугл заблокировал автоматическое переключение в полный экран, а deepseek самостоятельно не смог придумать пути обхода или костыли. тут уже я нашел в интернете решение - автоматически можно открывать не во весь экран, но во все окно. ну хотя бы так. ниже приведу код манускрипта манифеста и скрипт.
создайте файлы manifest.json и content.js в одной папке, вставьте в них соответствующий код
Перейдите в Chrome → chrome://extensions.
Включите "Режим разработчика".
Нажмите "Загрузить распакованное расширение" и выберите папку.
{
"manifest_version": 3,
"name": "YouTube Auto Embed",
"version": "1.4",
"description": "Умное переключение режимов с учетом паузы",
"permissions": ["storage"],
"content_scripts": [
{
"matches": [
"*://*.youtube.com/watch?v=*",
"*://*.youtube.com/embed/*"
],
"js": ["content.js"],
"run_at": "document_idle"
}
]
}
(function() {
const isWatchPage = window.location.href.includes('/watch?v=');
const isEmbedPage = window.location.href.includes('/embed/');
if (!isWatchPage && !isEmbedPage) return;
let timeoutId;
let currentVideoTime = 0;
let videoElement;
let isPaused = false;
// Общие функции
function getVideoElement() {
return document.querySelector('video');
}
function storeCurrentTime() {
if (videoElement) {
currentVideoTime = Math.floor(videoElement.currentTime);
sessionStorage.setItem('ytAutoEmbedTime', currentVideoTime);
}
}
function handleUserActivity() {
clearTimeout(timeoutId);
if (isEmbedPage) return;
if (isWatchPage && !isPaused) {
timeoutId = setTimeout(switchToEmbed, 10000);
}
}
// Для watch-страницы
if (isWatchPage) {
videoElement = getVideoElement();
if (videoElement) {
videoElement.addEventListener('play', () => {
isPaused = false;
handleUserActivity();
});
videoElement.addEventListener('pause', () => {
isPaused = true;
clearTimeout(timeoutId);
});
}
function switchToEmbed() {
if (isPaused) return;
storeCurrentTime();
const videoId = new URLSearchParams(window.location.search).get('v');
const embedUrl = `https://www.youtube.com/embed/${videoId}?autoplay=1&star...}`;
window.location.replace(embedUrl);
}
if (!isPaused) timeoutId = setTimeout(switchToEmbed, 10000);
}
// Для embed-страницы
if (isEmbedPage) {
videoElement = getVideoElement();
const storedTime = sessionStorage.getItem('ytAutoEmbedTime') || 0;
if (videoElement) {
videoElement.addEventListener('loadedmetadata', () => {
videoElement.currentTime = storedTime;
});
}
function switchToNormal() {
storeCurrentTime();
const videoId = window.location.pathname.split('/')[2];
const normalUrl = `https://www.youtube.com/watch?v=%24%7BvideoId%7D&t=%24%7...`;
window.location.replace(normalUrl);
}
const events = ['mousemove', 'keydown', 'mousedown', 'touchstart'];
events.forEach(event => {
window.addEventListener(event, () => {
if (!isPaused) switchToNormal();
});
});
if (videoElement) {
videoElement.addEventListener('play', () => {
isPaused = false;
sessionStorage.setItem('ytAutoEmbedPaused', 'false');
});
videoElement.addEventListener('pause', () => {
isPaused = true;
sessionStorage.setItem('ytAutoEmbedPaused', 'true');
});
}
}
const activityEvents = ['mousemove', 'keydown', 'scroll', 'mousedown', 'touchstart'];
activityEvents.forEach(event => {
window.addEventListener(event, handleUserActivity);
});
console.log('Extension initialized in', isWatchPage ? 'normal' : 'embed', 'mode');
})();
если кто понимает, что тут написано, можете прокомментировать по качеству