您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-scroll to next YouTube Short.
- // ==UserScript==
- // @name Shorts Auto Scroll
- // @namespace http://tampermonkey.net/
- // @version 2025-07-10
- // @description Auto-scroll to next YouTube Short.
- // @author vincent bruneau
- // @match *://www.youtube.com/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- let currentVideo = null;
- let currentSrc = null;
- function log(...args) {
- console.log('[Shorts Auto Scroll]', ...args);
- }
- function isShortsPage() {
- return location.pathname.startsWith("/shorts");
- }
- function getVideo() {
- return document.querySelector("video.video-stream.html5-main-video");
- }
- function getNextButton() {
- return document.querySelector('#navigation-button-down button');
- }
- function scrollToNext() {
- const btn = getNextButton();
- if (btn && btn.getAttribute("aria-disabled") !== "true") {
- log("Scrolling to next Short");
- btn.click();
- } else {
- log("Next button not found or disabled");
- }
- }
- function bindToVideo(video) {
- if (!video || video.dataset.autoScrollBound === "true") return;
- video.dataset.autoScrollBound = "true";
- video.dataset.autoScrollTriggered = "false";
- log("Bound to video element:", video.src);
- video.addEventListener("timeupdate", function () {
- const duration = video.duration;
- const current = video.currentTime;
- if (
- duration &&
- current / duration > 0.98 &&
- video.dataset.autoScrollTriggered !== "true"
- ) {
- video.dataset.autoScrollTriggered = "true";
- scrollToNext();
- }
- });
- video.addEventListener("play", function () {
- if (video.dataset.autoScrollTriggered === "true") {
- log("Video played again — resetting scroll trigger");
- video.dataset.autoScrollTriggered = "false";
- }
- });
- }
- function detectAndBindVideo() {
- if (!isShortsPage()) return;
- const video = getVideo();
- if (!video) return;
- const srcChanged = video.src !== currentSrc;
- if (video !== currentVideo || srcChanged) {
- currentVideo = video;
- currentSrc = video.src;
- bindToVideo(video);
- }
- }
- function init() {
- log("Shorts Auto Scroll initialized");
- setInterval(detectAndBindVideo, 1000);
- window.addEventListener("yt-navigate-finish", function () {
- currentVideo = null;
- currentSrc = null;
- });
- }
- init();
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址