// ==UserScript== // @name 百度网盘音频播放器 // @namespace https://bbs.tampermonkey.net.cn/ // @version 0.1 // @description 无视文件大小,无视文件格式,在线即点即播 // @author You // @match https://pan.baidu.com/disk/main* // @icon https://nd-static.bdstatic.com/business-static/pan-center/images/vipIcon/user-level2-middle_4fd9480.png // @require https://code.jquery.com/jquery-3.6.4.min.js // @grant unsafeWindow // @antifeature 还没写完呢你急个屌 // ==/UserScript== (function() { 'use strict'; var $ = $ || window.$; var obj = { audio_page: {} }; obj.loadScript = function (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.loadStyle = function (href) { if (!window.instances) { window.instances = {}; } if (!window.instances[href]) { window.instances[href] = new Promise((resolve, reject) => { const style = document.createElement("link"); style.type = "text/css"; style.rel = "stylesheet"; style.href = href; style.onload = resolve; style.onerror = reject; document.head.appendChild(style); }); } return window.instances[href]; }; obj.aPlayerSupport = function (callback) { var urlArr = [ [ "https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.3.5/hls.min.js", "https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.js", "https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.css", ], [ "https://unpkg.com/hls.js/dist/hls.min.js", "https://unpkg.com/aplayer@1.10.1/dist/APlayer.min.js", "https://unpkg.com/aplayer@1.10.1/dist/APlayer.min.css", ], [ "https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js", "https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js", "https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css", ] ]; (function laodcdn(urlArr, index = 0) { var arr = urlArr[index]; if (arr) { var promises = []; arr.forEach(function (url, index) { var extname = url.split(".").pop(); if (extname == "js") { promises.push(obj.loadScript(url)); } else if (extname == "css") { promises.push(obj.loadStyle(url)); } }); Promise.all(promises).then(function(results) { setTimeout(function () { callback && callback(unsafeWindow.APlayer); }, 0); }).catch(function(error) { console.error(index, error); laodcdn(urlArr, ++index); }); } else { callback && callback(unsafeWindow.APlayer); } })(urlArr); }; obj.aPlayerStart = function (fileList, fileIndex) { var aPlayerNode, audioNode = document.querySelector(".nd-audio").firstElementChild; if (audioNode) { aPlayerNode = document.getElementById("aplayer"); if (!aPlayerNode) { aPlayerNode = document.createElement("div"); aPlayerNode.setAttribute("id", "aplayer"); audioNode.parentNode.replaceChild(aPlayerNode, audioNode); } } else { return setTimeout(obj.aPlayerStart, 500); } var audio = []; fileList.forEach(function (item) { audio.push({ name: item.server_filename, artist: "", url: "/rest/2.0/xpan/file?method=streaming&path=" + encodeURIComponent(item.path) + "&type=M3U8_HLS_MP3_128", cover: item.categoryImage, type: "hls" }); }); try{ var player = obj.audio_page.player = new unsafeWindow.APlayer({ container: aPlayerNode, autoplay: true, audio: audio, mutex: true }); var audios = player.list.audios; if (audios.length > 1) { player.list.switch(fileIndex); } const { list, container, template: { body } } = player; if (list.audios > 1) list.switch(fileIndex); $(container).parent().css("text-align", ""); $(body).prepend(''); $(".aplayer-body .icon-close").one("click", function () { player.destroy(); }); } catch (error) { console.error("播放器创建失败", error); } }; obj.useAPlayer = function (fileList, fileIndex) { obj.aPlayerSupport(function (result) { if (result) { obj.aPlayerStart(fileList, fileIndex); } }); }; $(document.body).on("DOMNodeInserted", ".nd-audio", function () { if (!this.only) { this.only = true; const { bpAudio, fileList, fileMetaList } = this.__vue__; bpAudio.destroy(); var fileIndex = fileMetaList.findIndex(function (item, index) { return item.fs_id == fileList[0].fs_id; }); obj.useAPlayer(fileMetaList, fileIndex); } }); console.log("=== 百度 网 网 网盘 好 好 好棒棒!==="); // Your code here... })();