// ==UserScript== // @name 阿里云盘 // @namespace http://tampermonkey.net/ // @version 3.1.5 // @description 支持生成文件下载链接(多种下载姿势),支持第三方播放器DPlayer(支持自动/手动添加字幕,突破视频2分钟限制,选集,上下集,自动记忆播放,跳过片头片尾, 字幕设置随心所欲...),支持自定义分享密码,支持图片预览,支持移动端播放,... // @author You // @match https://www.aliyundrive.com/* // @connect lc-cn-n1-shared.com // @connect localhost // @connect 127.0.0.1 // @connect * // @icon https://gw.alicdn.com/imgextra/i3/O1CN01aj9rdD1GS0E8io11t_!!6000000000620-73-tps-16-16.ico // @require https://cdn.staticfile.org/localforage/1.10.0/localforage.min.js // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @antifeature ads // @antifeature membership // @antifeature payment // @antifeature referral-link // @antifeature tracking // @run-at document-body // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function() { 'use strict'; var localforage = window.localforage; var $ = $ || window.$; var obj = { file_page: { headers: {}, parent_file_id: "root", file_info: {}, order_by: "", order_direction: "", next_marker_list: [], items: [] }, video_page: { play_info: {}, sub_info: { index: 0 }, elevideo: "", player: null, media_num: 0 } }; obj.useDPlayer = function () { obj.dPlayerSupport(function (result) { result && obj.dPlayerStart(); }); }; obj.dPlayerSupport = function (callback) { (function laodcdn(urlArr, index) { var arr = urlArr[index]; if (arr) { var promises = []; arr.forEach(function (url, index) { promises.push(loadScript(url)); }); Promise.all(promises).then(function(results) { setTimeout(function () { unsafeWindow.Hls = unsafeWindow.Secp256k1 ? unsafeWindow.Secp256k1.Hls : unsafeWindow.Hls; unsafeWindow.DPlayer = unsafeWindow.Secp256k1 ? unsafeWindow.Secp256k1.DPlayer : unsafeWindow.DPlayer; obj.isAppreciation.toString().length == 1367 && callback(unsafeWindow.DPlayer); }, 0); }).catch(function (error) { laodcdn(urlArr, ++index); }); } else { callback && callback({ DPlayer: unsafeWindow.DPlayer || window.DPlayer, Hls: unsafeWindow.Hls || window.Hls }); } })([ [ "https://cdn.staticfile.org/hls.js/1.3.2/hls.min.js", "https://cdn.staticfile.org/dplayer/1.27.1/DPlayer.min.js", ], [ "https://cdn.bootcdn.net/ajax/libs/hls.js/1.3.2/hls.min.js", "https://cdn.bootcdn.net/ajax/libs/dplayer/1.27.1/DPlayer.min.js", ], [ "https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js", "https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js", ], ], 0); function loadScript (src) { if (!window.instances) { window.instances = {}; } if (!window.instances[src]) { window.instances[src] = new Promise((resolve, reject) => { const script = document.createElement("script") script.src = src; script.type = "text/javascript"; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); } return window.instances[src]; } }; obj.dPlayerStart = function () { var prevPlayer = obj.video_page.player; var dPlayerNode, videoNode = document.querySelector("video"); if (videoNode) { dPlayerNode = document.getElementById("dplayer"); if (!dPlayerNode) { dPlayerNode = document.createElement("div"); dPlayerNode.setAttribute("id", "dplayer"); dPlayerNode.setAttribute("style", "width: 100%; height: 100%;"); var videoParentNode = videoNode.parentNode.parentNode; obj.video_page.elevideo = videoParentNode.parentNode.replaceChild(dPlayerNode, videoParentNode); } } else { return setTimeout(obj.dPlayerStart, 500); } var quality = [], defaultQuality, localQuality = localStorage.getItem("dplayer-quality");; var play_info = obj.video_page.play_info || {}; var video_preview_play_info = play_info.video_preview_play_info || {}; var task_list = video_preview_play_info.live_transcoding_task_list; if (Array.isArray(task_list)) { var pds = { UHD: "4K 超清", QHD: "2K 超清", FHD: "1080 全高清", HD: "720 高清", SD: "540 标清", LD: "360 流畅" }; task_list.forEach(function (item, index) { var name = pds[item.template_id]; localQuality ? localQuality == name ? defaultQuality = index : defaultQuality = index : defaultQuality = index; GM_getValue(GM_info.script.version) && quality.push({ name: name, url: item.url || item.preview_url, type: "hls" }); }); } else { obj.showTipError("获取播放信息失败:请刷新网页重试"); return; } if (obj.video_page.file_id === play_info.file_id) { if (prevPlayer && document.querySelector("video")) { return obj.dPlayerThrough(quality); } } else { obj.video_page.file_id = play_info.file_id; if (prevPlayer) { prevPlayer.destroy(); prevPlayer = null; } } var options = { container: dPlayerNode, video: { quality: quality, defaultQuality: defaultQuality, customType: { hls: function (video, player) { if (player.plugins.hls) { player.plugins.prevHls = player.plugins.hls; delete player.plugins.hls; } const hls = new unsafeWindow.Hls(); player.plugins.hls = hls; hls.loadSource(video.src); hls.attachMedia(video); } } }, subtitle: { url: "", type: "webvtt", fontSize: (localStorage.getItem("dplayer-subtitle-fontSize") || 5) + "vh", bottom: (localStorage.getItem("dplayer-subtitle-bottom") || 10) + "%", color: localStorage.getItem("dplayer-subtitle-color") || "#ffd821", }, autoplay: true, screenshot: true, hotkey: false, airplay: true, volume: 1.0, playbackSpeed: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 3, 4], contextmenu: [ { text: "👍 爱发电 不再弹出 👍", link: "https://afdian.net/order/create?plan_id=be4f4d0a972811eda14a5254001e7c00", click: obj.showDialog } ], theme: obj.getRandomColor() }; try { var player = obj.video_page.player = new unsafeWindow.DPlayer(options); if (prevPlayer) { const { video } = prevPlayer; player.seek(video.currentTime - 1); player.speed(video.playbackRate); player.video.muted = video.muted; prevPlayer.destroy(); prevPlayer = null; } obj.playerReady(player, function(player) { player.options.hotkey || obj.dPlayerHotkey(); obj.dPlayerInitAspectRatio(); obj.autoSkipPlayNext(); obj.memoryPlay(); obj.playSetting(); obj.selectEpisode(); obj.addCueVideoSubtitle(function (textTracks) { if (textTracks) { obj.selectSubtitles(textTracks); obj.dPlayerSubtitleStyle(); } }); player.on("quality_end", function () { localStorage.setItem("dplayer-quality", player.quality.name); obj.addCueVideoSubtitle(); }); player.speed(localStorage.getItem("dplayer-speed") || 1); player.on("ratechange", function () { player.notice("播放速度:" + player.video.playbackRate); localStorage.getItem("dplayer-speed") == player.video.playbackRate || localStorage.setItem("dplayer-speed", player.video.playbackRate); }); player.on("contextmenu_show", function () { $(".dplayer-menu").length || $(".dplayer-menu-item").length || player.destroy(); obj.isAppreciation((data) => {!data && player.pause()}); }); localStorage.getItem("dplayer-isfullscreen") == "true" && player.fullScreen.request("browser"); player.on("fullscreen", function () { localStorage.setItem("dplayer-isfullscreen", true); try { screen.orientation.lock("landscape"); } catch (error) { }; }); player.on("fullscreen_cancel", function () { localStorage.removeItem("dplayer-isfullscreen"); try { screen.orientation.unlock(); } catch (error) { }; }); }); } catch (error) { console.error("播放器创建失败", error); } }; obj.dPlayerThrough = function (quality) { var player = obj.video_page.player; player.options.video.quality = quality; player.quality = player.options.video.quality[ player.qualityIndex ]; const paused = player.video.paused; const videoHTML = ''; const videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild; player.template.videoWrap.insertBefore(videoEle, player.template.videoWrap.getElementsByTagName('div')[0]); player.prevVideo = player.video; player.video = videoEle; player.initVideo(player.video, player.quality.type || player.options.video.type); player.video.currentTime = player.prevVideo.currentTime + 1; player.on('canplaythrough', () => { if (player.prevVideo) { if (player.video.currentTime !== player.prevVideo.currentTime) { player.video.currentTime = player.prevVideo.currentTime; (obj.onPost.length && obj.onPost.toString().length == 460) || player.destroy(); } player.speed(player.prevVideo.playbackRate); player.prevVideo.muted && (player.video.muted = player.prevVideo.muted); player.prevVideo.pause(); player.template.videoWrap.removeChild(player.prevVideo); player.video.classList.add('dplayer-video-current'); player.template.video = player.video; if (!paused) { const bezelswitch = player.bezel.switch; player.bezel.switch = () => {}; setTimeout(() => { player.bezel.switch = bezelswitch; }, 1000); player.video.play(); player.controller.hide(); setTimeout(() => { obj.isAppreciation(function (data) { data || player.contextmenu.show(player.container.offsetWidth / 2.5, player.container.offsetHeight / 3); }); document.querySelectorAll("video").length > 1 && [ ... document.querySelectorAll("video") ].forEach(element => { element.paused && player.template.videoWrap.removeChild(element); }); }); } setTimeout(() => { player.controller.hide(); if (player.plugins.prevHls) { player.plugins.prevHls.destroy(); delete player.plugins.prevHls; } }); player.prevVideo = null; obj.dPlayerEvents(player); } }); }; obj.dPlayerEvents = function (player) { obj.playerReady(player, function(player) { const { options: { contextmenu } } = player; JSON.stringify(contextmenu).includes(5254001) || player.destroy(); obj.dPlayerAspectRatio(); obj.addCueVideoSubtitle(function (textTracks) { if (textTracks) { obj.selectSubtitles(textTracks); obj.dPlayerSubtitleStyle(); obj.offsetCache && obj.dPlayerSubtitleOffset(); } }); }); }; obj.playerReady = function (player, callback) { if (player.isReady) { callback && callback(player); } else if (player.video.duration > 0 || player.video.readyState > 2) { player.isReady = true; callback && callback(player); } else { player.video.ondurationchange = function () { player.video.ondurationchange = null; player.isReady = true; callback && callback(player); } } }; obj.dPlayerHotkey = function () { if (window.dPlayerHotkey) return; window.dPlayerHotkey = true; document.addEventListener("keydown", (function(e) { var t = obj.video_page.player; if (t && document.getElementById("dplayer")) { var a = document.activeElement.tagName.toUpperCase() , n = document.activeElement.getAttribute("contenteditable"); if ("INPUT" !== a && "TEXTAREA" !== a && "" !== n && "true" !== n) { var o, r = e || window.event; switch (r.keyCode) { case 13: r.preventDefault(); t.fullScreen.toggle(); break; case 32: r.preventDefault(); t.toggle(); break; case 37: r.preventDefault(); t.seek(t.video.currentTime - 5); break; case 39: r.preventDefault(); t.seek(t.video.currentTime + 5); break; case 38: r.preventDefault(); o = t.volume() + .01; t.volume(o); break; case 40: r.preventDefault(); o = t.volume() - .01; t.volume(o); break; case 36: r.preventDefault(); t.notice("上一项"); o = document.querySelector("[data-icon-type=PDSChevronLeft]") || document.querySelector("[data-icon-type=PDSLeftNormal]"); o && o.click(); break; case 35: r.preventDefault(); t.notice("下一项"); o = document.querySelector("[data-icon-type=PDSChevronRight]") || document.querySelector("[data-icon-type=PDSRightNormal]"); o && o.click(); break; } } } })); document.addEventListener("wheel", function (event) { event = event || window.event; if ($(event.target).closest(".playlist-content").length) return; var o, t = obj.video_page.player; if (event.deltaY < 0) { o = t.volume() + .01; t.volume(o); } else if (event.deltaY > 0) { o = t.volume() - .01; t.volume(o); } }); }; obj.dPlayerInitAspectRatio = function () { if ($(".dplayer-icons-right .btn-select-aspectRatio").length) return; var html = '