您需要先安装一个扩展,例如 篡改猴、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
- }
- });