您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows using spacebar to play/pause YouTube videos/shorts
// ==UserScript== // @name YouTube Spacebar Play/Pause // @namespace YTspacebarxFIRKx // @version 1.04 // @description Allows using spacebar to play/pause YouTube videos/shorts // @author xFIRKx // @match http://*.youtube.com/* // @match https://*.youtube.com/* // @exclude https://*.youtube.com/embed/* // @homepageURL https://greasyfork.org/it/scripts/493791-youtube-spacebar-play-pause // @grant none // ==/UserScript== let lastVisibilityChangeTime = Date.now(); // Track the time of the last visibility change let isShowDesktopAction = false; // Flag to track if the visibility change was caused by the "show desktop" action let videoClickedOrFocused = false; // Flag to track if video is clicked on or in focus let scriptEnabled = false; // Flag to control script enabling/disabling // Event listener for visibility change document.addEventListener('visibilitychange', function() { if (document.visibilityState === 'hidden') { lastVisibilityChangeTime = Date.now(); // Update the time of the last visibility change isShowDesktopAction = true; // Assume "show desktop" action when the window becomes hidden scriptEnabled = false; // Disable the script when the window becomes hidden } else { isShowDesktopAction = false; // Reset the flag otherwise if (!videoClickedOrFocused) { scriptEnabled = true; // Enable the script when the window becomes visible, unless a video is clicked or focused } } }); let cachedMode = ""; document.addEventListener("keydown", function onEvent(e) { e.stopPropagation(); // Stop event propagation if (!scriptEnabled || e.code !== "Space") return; let ae = document.activeElement; if (ae.tagName.toLowerCase() == "input" || ae.hasAttribute("contenteditable")) return; e.preventDefault(); e.stopImmediatePropagation(); if (document.location.hostname == "music.youtube.com") { document.querySelector("#play-pause-button").click(); } else { let player = document.querySelector(".html5-video-player"); if (player.classList.contains("paused-mode")) cachedMode = "paused-mode"; if (player.classList.contains("playing-mode")) cachedMode = "playing-mode"; if (player.classList.contains("ended-mode")) cachedMode = "ended-mode"; setTimeout(() => { let player = document.querySelector(".html5-video-player"); if (player.classList.contains(cachedMode)) { document.querySelector("button.ytp-play-button").click(); cachedMode = ""; } }, 200); } }); // Disable the script initially scriptEnabled = false; // Event listener for window focus window.addEventListener('focus', function() { if (!videoClickedOrFocused && Date.now() - lastVisibilityChangeTime > 20) { scriptEnabled = true; // Enable the script after alt tabbing and unfocusing, unless a video is clicked or focused } }); // Event listener for window blur window.addEventListener('blur', function() { scriptEnabled = false; // Disable the script when the window loses focus }); // Event listener for clicking on video document.addEventListener('click', function(event) { if (event.target.tagName.toLowerCase() === 'video') { event.stopPropagation(); // Stop event propagation videoClickedOrFocused = true; // Set flag to true when clicking on the video scriptEnabled = false; // Disable the script after clicking on the video } }); // Event listener for focusing on video document.addEventListener('focusin', function(event) { if (event.target.tagName.toLowerCase() === 'video') { videoClickedOrFocused = true; // Set flag to true when focusing on the video scriptEnabled = false; // Disable the script when a video is focused } }); // Event listener for blurring from video document.addEventListener('focusout', function(event) { if (event.target.tagName.toLowerCase() === 'video') { videoClickedOrFocused = false; // Reset flag when blurring from the video } }); // Event listener for visibility change (switching tabs) document.addEventListener('visibilitychange', function() { if (isShowDesktopAction || videoClickedOrFocused) { scriptEnabled = false; // Disable the script if the visibility change was caused by the "show desktop" action or a video is clicked or focused isShowDesktopAction = false; // Reset the "show desktop" action flag } });