Instagram Video Autoplay Controller

Auto-plays next reel when your on the reels page on someone's profile!

当前为 2025-01-26 提交的版本,查看 最新版本

// ==UserScript==
// @name         Instagram Video Autoplay Controller
// @namespace    http://tampermonkey.net/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=instagram.com
// @version      1.0
// @description  Auto-plays next reel when your on the reels page on someone's profile!
// @author       YourName
// @match        *://*.instagram.com/*
// @grant        none
 // @license MIT
// ==/UserScript==

(function() {
    'use strict';

    let currentVideo = null;
    let observer = null;

    function findVideoElement() {
        return document.querySelector('video.x1lliihq.x5yr21d.xh8yej3');
    }

    function simulateArrowKey() {
        const rightArrowEvent = new KeyboardEvent('keydown', {
            key: 'ArrowRight',
            code: 'ArrowRight',
            keyCode: 39,
            which: 39,
            bubbles: true,
            cancelable: true
        });
        document.dispatchEvent(rightArrowEvent);
    }

    function cleanup() {
        if (currentVideo) {
            currentVideo.removeEventListener('ended', simulateArrowKey);
            currentVideo.removeEventListener('pause', handlePause);
            currentVideo.pause();
            currentVideo = null;
        }
        if (observer) {
            observer.disconnect();
            observer = null;
        }
    }

    function handlePause() {
        if (currentVideo && !currentVideo.ended) {
            currentVideo.play();
        }
    }

    function setupVideoListener() {
        const video = findVideoElement();
        if (video && video !== currentVideo) {
            cleanup();
            currentVideo = video;
            video.addEventListener('ended', simulateArrowKey);
            video.addEventListener('pause', handlePause);
        }
    }

    function initObserver() {
        observer = new MutationObserver(() => {
            setupVideoListener();
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
        setupVideoListener();
    }

    // Handle tab visibility changes
    document.addEventListener('visibilitychange', () => {
        if (document.visibilityState === 'hidden') {
            cleanup();
        } else {
            initObserver();
        }
    });

    // Handle page unload
    window.addEventListener('beforeunload', cleanup);

    // Initial setup
    initObserver();
})();