您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
🔥🔥🔥推荐! 网课经常忘记看到哪一集那个位置,此脚本完美解决此问题:到达网页页面后会有提示框确认,将跳转至退出时位置
// ==UserScript== // @name bilibili记录观看进度 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 🔥🔥🔥推荐! 网课经常忘记看到哪一集那个位置,此脚本完美解决此问题:到达网页页面后会有提示框确认,将跳转至退出时位置 // @author cooper // @match https://*.bilibili.com/* // @grant none // @icon chrome://favicon/http://www.bilibili.com // @license MIT // ==/UserScript== (function() { 'use strict'; const videoSelector = 'video'; let videoElement; // localStorage.setItem("clean_cache", true); // 提取视频唯一标识符的函数 function getVideoIdentifier() { // 假设URL结构是:https://www.bilibili.com/video/BV号 const regex = /\/video\/(BV[\w]+)/; const match = window.location.href.match(regex); return match ? match[1] : null; } // 检测并保存视频进度和集数 function saveProgressAndEpisode() { const videoIdentifier = getVideoIdentifier(); if (!videoIdentifier) return; // 如果没有找到视频标识符,则不执行任何操作 const savedProgressKey = `bilibili_video_progress_${videoIdentifier}`; const savedEpisodeKey = `bilibili_video_episode_${videoIdentifier}`; if (videoElement && localStorage.getItem("clean_cache") == "true") { const progress = videoElement.currentTime; const episode = window.location.href; localStorage.setItem(savedProgressKey, progress); localStorage.setItem(savedEpisodeKey, episode); } } // 检查并恢复进度和集数 function checkAndRestoreProgressAndEpisode() { const videoIdentifier = getVideoIdentifier(); if (!videoIdentifier) return; // 如果没有找到视频标识符,则不执行任何操作 const savedProgressKey = `bilibili_video_progress_${videoIdentifier}`; const savedEpisodeKey = `bilibili_video_episode_${videoIdentifier}`; const savedProgress = localStorage.getItem(savedProgressKey); const savedEpisode = localStorage.getItem(savedEpisodeKey); if (savedEpisode && window.location.href.replace("/?", "?") !== savedEpisode.replace("/?", "?")) { console.log(savedEpisode) console.log(window.location.href.replace("/?", "?")) const confirmResume = confirm('检测到上次观看进度,是否继续?'); if(confirmResume){ localStorage.setItem("clean_cache", false); window.location.href = savedEpisode; if (savedProgress && videoElement) { videoElement.currentTime = parseFloat(savedProgress); localStorage.setItem("clean_cache", true); } } else{ localStorage.setItem("clean_cache", false); } } } // 监听视频元素的加载 function setupVideoElement() { videoElement = document.querySelector(videoSelector); if (videoElement) { window.addEventListener('beforeunload', saveProgressAndEpisode); checkAndRestoreProgressAndEpisode(); } } // 页面加载时设置视频元素 window.addEventListener('load', setupVideoElement); })();