Youtube Resumer (using the url)

Changes the ?t= parameter when pausing. Other version: https://greasyfork.org/en/scripts/455475-youtube-resumer

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Youtube Resumer (using the url)
// @description  Changes the ?t= parameter when pausing. Other version: https://greasyfork.org/en/scripts/455475-youtube-resumer
// @version      4
// @match        https://www.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant        none
// @namespace    https://greasyfork.org/users/206408
// ==/UserScript==

(async () => {

    function l(...args){
        console.log(`[Youtube Resumer]`, ...args)
    }

    function findVideo(){
        return document.querySelector('video')
    }

    //update ?t=
    function changeUrl(time){
        const url = new URL(window.location.href)
        url.searchParams.set('t', time)
        window.history.replaceState(null, null, url)
    }

    function listen(){
        const video = findVideo()
        video.addEventListener('pause', () => {
            changeUrl(parseInt(video.currentTime))
        })
    }

    let listening = false //the video element exists even if you go back to the home page, so no need to readd event listeners

    //Event for each page change
    document.addEventListener("yt-navigate-finish", function() {
        l('navigate-finish')
        //Match page with video
        if(window.location.href.match(new RegExp('https://www.youtube.com/watch\\?v=.'))) {
            //Add video listener once
            if(!listening){
                l('listening')
                listen()
                listening = true
            }
        }
    });
})();