在您安装前,Greasy Fork镜像 希望您知道此脚本包含可能不受欢迎的功能,也许会帮助脚本作者获利,而不能给你带来任何收益。
你只有在参与某些事后才能使用脚本的全部功能,如加入某群组、订阅某频道或在某页点赞等。
先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!
// ==UserScript== // @name 百度网盘直链加速下载(超级svip会员领取器),无需关注公众号,直接下载就可以! // @namespace tamp.catboxhub.com // @antifeature membership // @version 0.3.9 // @author 资源好又多 // @description 先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!!先看详情再使用!! // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAABBVBMVEUAAAB0rNJ2s9R0stJ2tNV3s9R5s9l2s9R2stJ3s9R2s9R3stR2s9N2stN2s9N3s9R2stR3stJ3s9R2s9R1sNN3s9R2s9R2stN3s9R2stR2s9R3s9R2stN3stR0sdV2s9R2s9R2s9N3s9N3stN2s9N2s9R2s9R3s9J3stV4stR2stN3s9T///9mlbD8/f58ttZomrbf7fX5/P3q8/jN4/CGvNmy1Oer0OSgy+KPwdxtoL2BudhwqMb1+fzZ6vPE3+2Kvtp0rMzt9frv9vre6O6Vw910rs/k8PfQ3+eax+COs8iCqb9vm7VpmLLm7fLT5vJ3obm82erC1eC80dy0zNmausykwNAwUSvcAAAAK3RSTlMABewNNvYIix/m4pNwYfnwTxTXyyef3cS5roN4QvMa0r+0p5pnWkk7LizQzqkA9AAABFhJREFUaN61mdlW4kAQhisbJGEH2RkFBQSrE1kEBRXGfcZldNb3f5Q5Os7pEOjO1n533PCd6r+rOumAX6ReMtEs4Ttys1hTFRCHtK12EgUN10jni+19PQbRyXXjFQOZyOVER4+o2K7nZfQgU4r3whtiW3Fq4KLthgxIaiSowocmmwvu2NozMRByVQ1aRsrAwKTjShBFv4qhKDR8b2ilXcKQyDXdZx2JDIZGa235ao08RsL0tkiNAkZE7ngFs3+AkTFSEteRzaAAtDq3DuqIRpZdS+MABSGnWLnkCigMs8vYWHkUiJnb2OcJFEplg0VqZ1AsifVY+iUUTCa1Vojn3D08nU2fx+SNy8X3m8mh50x2D5gU8jk9WQ7JCuOj48/IJ+46Bw1+FcfDc7LG6O77BHl8UlcWq4g8JkPC4PIr8sgrzlY3eSs1HREm9pK7ZknqiPFa5PPRiPAY8oop6zQRmVPH0CZ8xjecVOg2jnPiuCOejGbIpPU/lW2ZvVYLwoHG773B6uyte2QTPwzZtRTfJzx7+h4TnyzZ7b/9JukyV2s28iuxT/i7WGLGfvhMfDNm9n4h9hp7BRmcnBP/LJGB8Rq9ajBTJwG4YnW+9rpeHWRwcxVEMpoigz0JgDlSpiQQz6e4maYOUGBJhsEkY1avmCpI2uZAJjMSENYuTneht3FiHS/pKRV5f7UhuekAuaMG/wyZyW/I/XBBQnHJklSh6VZ8vSIhYUl2oORu80siWmKA+wAZE+ESBAF5UK6OTiaHnpIpiYh9Nz31kEwuSWRGixlfMrWJAMYznuR0QYSw+MyRzMZiJPaSIaFHYQQYRz7IroeTCLDmWAaaHyIZ3ayMleKHSOwpUipQEymhHCFlF1Rn8PaHSJKgpF3PJ+IlWYA8/TW5FiqhT3fO5C++iJXQt622Q/J7JGp3HTteHhSAfdqOt3NR63V+T5+I6gCgl6l0fi9Icj2nV18N16vvmfXTFtLw92e039/eGjsZahm8iMje/mlduO4+9JKzlIdhdMmXlwH9y/76G/bceryOumLfHiy6Wi34R0+jktuB9fhrHEVz/uXBorGns/DOLlIuBtbTw69voeO4/vNoDW5pJ+bgHVXDlVqsp5ffP8J4xj/uH5+swQUthN7gKLvoZP5kRcDpwIO+4/ZcRidn80F4xRk6qAElV8VVLsJ5BvOzW3Rg6tRBUxFMlhporwimCqsoBfGOkgouGrJoh1aX3BKplhYsqSiwht4S68j3YANbpkiHvM/43CsiFnqNyqBjCAud/Rk4lhLVkzUFmEh1MY69GPDICshFq8W8PsSbkTOnebCIdSNa5JQC3uQqkXqQ9gffEv6DvFbpgU9iqULIuVtXwD9b8TDFVFUJAqHmgyrMLARGSZY/BVAc1HQIg55q+dSky8m+BCFR1KIfRyubg0hsJwuGxqlB3on3IToxNbnXNNO4jlEu1hsKCELS1W57r7pj4DuZncpuMqvq/gx/AWOzQlgCEoTLAAAAAElFTkSuQmCC // @run-at document-end // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js // @resource ElementPlusCSS https://lib.baomitu.com/element-plus/2.2.2/index.min.css // @connect * // @connect 127.0.0.1 // @connect localhost // @connect baidu.com // @connect baidupcs.com // @connect pandownload.net // @connect bdjs.lol // @connect d.baiduyunpcs.xyz // @connect speedownload.dzp.me // @grant GM_openInTab // @grant GM_addStyle // @grant GM_getResourceURL // @grant GM_getResourceText // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @match *://pan.baidu.com/disk/main* // @match *://yun.baidu.com/disk/main* // @match *://wangpan.baidu.com/disk/main* // @match *://pan.baidu.com/disk/home* // @match *://yun.baidu.com/disk/home* // @match *://wangpan.baidu.com/disk/home* // @match *://pan.baidu.com/s/* // @match *://yun.baidu.com/s/* // @match *://pan.baidu.com/share/link?* // @match *://yun.baidu.com/share/link?* // @match *://pan.baidu.com/play/video* // @match *://yun.baidu.com/play/video* // @match *://pan.baidu.com/share/init* // @match *://yun.baidu.com/share/init* // ==/UserScript== (function () { (() => { var i; var j; var t; var table = []; for (i = 0; i < 256; i++) { t = i; for (j = 0; j < 8; j++) { t = t & 1 ? t >>> 1 ^ 0xEDB88320 : t >>> 1; } table[i] = t; } return table; })(); function isJSON(str) { if (typeof str == 'string') { try { var obj = JSON.parse(str); return true; } catch (e) { return false; } } } var tools = { isJSON: isJSON, getFinalUrl: function (url) { return new Promise(function (resolve, reject) { GM_xmlhttpRequest({ method: "HEAD", url, onload: function (response) { resolve(response.finalUrl); }, onerror: function (err) { reject(new Error(err)); } }); }); }, getAccelerate: function (url) { return new Promise(function (resolve, reject) { const ElementPlus = unsafeWindow.ElementPlus; const accelerateURL = GM_getValue("accelerateURL", "").replaceAll(" ",""); GM_xmlhttpRequest({ method: "HEAD", url, onload: function (response) { let responseHeaders = response.responseHeaders.toLowerCase(); let finalUrl = response.finalUrl; console.log(finalUrl); if(finalUrl.match(/&fn=(.*)&rtype/).length == 0){ let result = {}; result.code = -1; result.errMsg = "无法获取文件名称,更新Chroe再试"; result.title = "网盘下载"; return resolve(result); } let filename = finalUrl.match(/&fn=(.*)&rtype/)[1]; let decodeFilename = decodeURIComponent(filename.replaceAll('+','%20')); if (response.status != 200) { let result = {}; result.code = -1; result.errMsg = "无法获取文件的细息"; result.title = decodeFilename; return resolve(result); } let Notification = ElementPlus.ElNotification({ title: decodeFilename, message: '正在请求加速链接,请耐等待...', duration: 0, type: 'warning' }); if(responseHeaders.match(/content-md5: (.*)/).length == 0){ let result = {}; result.code = -1; result.errMsg = "无法获取文件MD"; result.title = decodeFilename; return resolve(result); } let contentMD5 = responseHeaders.match(/content-md5: (.*)/)[1]; let contentLength = responseHeaders.match(/content-length: (.*)/)[1]; let data = {}; data.dlink = url; data.md5 = contentMD5; data.size = contentLength; data.name = filename; GM_xmlhttpRequest({ method: "POST", url: accelerateURL, data: JSON.stringify(data), onload: function (response) { if (response.status != 200) { Notification.close(); let result = {}; result.code = -10; result.errMsg = "请求加速链接失败"; result.title = decodeFilename; return resolve(result); } if (response.responseText.length == 0) { Notification.close(); let result = {}; result.code = -7; result.errMsg = "加速链接未返回任何内容"; result.title = decodeFilename; return resolve(result); } if (!isJSON(response.responseText)) { Notification.close(); let result = {}; result.code = -2; result.errMsg = "无效的加速链接"; result.title = decodeFilename; return resolve(result); } let ret = JSON.parse(response.responseText); if (ret.code != 0) { Notification.close(); let result = {}; result.code = -3; result.errMsg = ret.message == undefined || ret.message == "" ? "服务器未返回任何有效信息" : ret.message; result.title = decodeFilename; return resolve(result); } let dlink = ret.data.urls[0].url; if (dlink == undefined || dlink == "") { Notification.close(); let result = {}; result.code = -6; result.errMsg = "该加速链接未返回有效的下载链接"; result.title = decodeFilename; return resolve(result); } Notification.close(); let result = {}; result.code = ret.code; result.message = ret.message; result.url = dlink; result.ua = ret.data.ua; result.split = ret.data.split; result.pro = ret.data.pro; result.name = decodeFilename; return resolve(result); }, onerror: function (err) { Notification.close(); let result = {}; result.code = -10; result.errMsg = "请求加速链接失败"; result.title = decodeFilename; return resolve(result); } }); } }); }); }, getCookie: function (name) { const strCookie = document.cookie; const cookieList = strCookie.split(';'); for (let i = 0; i < cookieList.length; i++) { const arr = cookieList[i].split('='); if (name === arr[0].trim()) { return arr[1]; } } return null; }, browserDownload: function (url) { const iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = url.replace("http://", "https://"); document.body.appendChild(iframe); setTimeout(() => { iframe.remove(); }, 2 * 60 * 1000); }, aria2Download: function (aria2) { unsafeWindow.ElementPlus; const RpcUrl = "http://" + GM_getValue("RpcHost", "localhost") + ":" + GM_getValue("RpcPort", "6800") + GM_getValue("RpcPath", "/jsonrpc"); const token = GM_getValue("RpcToken", ""); const downDir = GM_getValue("Aria2DownloadDir", "C:/Downloads"); const userAgent = aria2.userAgent; let ariaData = { id: new Date().getTime(), jsonrpc: '2.0', method: 'aria2.addUri', params: [`token:${token}`, [aria2.url], { 'dir': downDir.replaceAll("\\", "/") + aria2.dir, 'out': decodeURIComponent(aria2.fileName), 'max-connection-per-server': aria2.split, 'header': [`User-Agent: ${userAgent}`, `Cookie:${aria2.cookie}`] }] }; GM_xmlhttpRequest({ method: "POST", url: RpcUrl, data: JSON.stringify(ariaData), onload: function () { unsafeWindow.ElementPlus.ElNotification({ type: 'success', title: decodeURIComponent(aria2.fileName), message: '文件已加入 Aria2 下载队列', duration: 3000 }); aria2.notify.close(); }, onerror: function () { unsafeWindow.ElementPlus.ElNotification({ type: 'error', title: decodeURIComponent(aria2.fileName), message: '推送至 Aria2 时发生错误,请检查配置', duration: 3000 }); aria2.notify.close(); } }); } }; // 初始化 Jquery var $$1 = window.$; var Adblock = { init: function () { $$1('.wp-s-header-cert__ee-cert-tilte.u-popover__reference').remove(); $$1('.nd-cus-btn.wp-s-disk-header__right-item').remove(); $$1('.ad-platform-tips.ad-multi-tips').remove(); $$1('.init-docs .phone-banner').remove(); $$1('.gOIbzPb').remove(); $$1('#web-right-view').remove(); } }; var scriptName = "网盘下载器"; var title = scriptName + " v0.3.9"; // 初始化库 var $ = window.$; //var PonyfillCDN = "https://fastly.jsdelivr.net/npm/[email protected]/dist/ponyfill.min.js"; //var StreamSaverCDN = "https://fastly.jsdelivr.net/npm/[email protected]/StreamSaver.min.js"; var VueCDN = "https://lib.baomitu.com/vue/3.2.36/vue.global.prod.min.js"; var ElementPlusCDN = "https://lib.baomitu.com/element-plus/2.2.2/index.full.min.js"; // 过滤广告 Adblock.init(); // 新版Vue 路由Hook - 备用 if (unsafeWindow.globalVue != undefined) { var ElementUI = unsafeWindow.globalVue.$options._base.prototype; unsafeWindow.globalVue._router.afterHooks.push(router => { console.log(router); }); } // 判断当前页面 const URL_HREF = unsafeWindow.location.href; const MATCHS = { 'https?://(pan|yun).baidu.com/disk/main.*': 'pan', 'https?://(pan|yun).baidu.com/disk/home.*': 'old', 'https?://(pan|yun).baidu.com/s/.*': 'share', 'https?://(pan|yun).baidu.com/share/link/?.*': 'share', 'https?://(pan|yun).baidu.com/play/video/.*': 'video' }; let currentPage = 'pan'; for (let match in MATCHS) { if (new RegExp(match).test(URL_HREF)) { currentPage = MATCHS[match]; break; } } // 初始化打包下载 /* $.getScript(PonyfillCDN, function () { $.getScript(StreamSaverCDN, function () { const iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = "https://qdall01.baidupcs.com"; iframe.onload = function () { console.log("IFrame加载成功") unsafeWindow.downloadSingle = function (url, filename, filesize) { const fileStream = unsafeWindow.streamSaver.createWriteStream(filename, { size: filesize }) fetch(url) .then(response => { if (response.status != 200) { response.json().then(json => console.log(json)); return; } const readableStream = response.body unsafeWindow.writer = fileStream.getWriter() const reader = response.body.getReader() const pump = () => reader.read() .then(response => response.done ? unsafeWindow.writer.close() : unsafeWindow.writer.write(response.value).then(pump)) pump() }); } unsafeWindow.downloadBatch = function (downloadList) { console.log("Batch Download", downloadList) const firstFile = downloadList.metaList[downloadList.dlinkList[0].fs_id] let totalSize = 0; for (let index in downloadList.dlinkList) { let fileList = downloadList.dlinkList[index]; let meta = downloadList.metaList[fileList.fs_id]; totalSize += meta.size; } console.log(totalSize) const fileStream = unsafeWindow.streamSaver.createWriteStream(firstFile.server_filename + "等其他(" + (downloadList.dlinkList.length - 1) + ")个文件.zip", { size: totalSize }) const readableZipStream = new ZIP({ async pull(ctrl) { for (let index in downloadList.dlinkList) { let fileList = downloadList.dlinkList[index]; let metaList = downloadList.metaList[fileList.fs_id]; let dlink = fileList.dlink.replace("http://", "https://") + "&origin=dlna"; let finalUrl = await Tools.getFinalUrl(dlink) console.log(finalUrl) const res = await fetch(finalUrl) const stream = () => res.body const name = metaList.path ctrl.enqueue({ name, stream }) } ctrl.close() } }) // console.log(readableZipStream) // more optimized // less optimized const writer = fileStream.getWriter() const reader = readableZipStream.getReader() const pump = () => reader.read() .then(res => res.done ? writer.close() : writer.write(res.value).then(pump)) pump() } } document.body.appendChild(iframe); }) }) */ function createApp(className, html) { var ElementPlus = unsafeWindow.ElementPlus; var Vue = unsafeWindow.Vue; var render = html + ` <el-dialog v-model="dialogVisible" title="` + title + `" width="50%" :append-to-body="true"> <el-tabs style="user-select:none;" tab-position="left" v-model="Setting.activeName"> <el-tab-pane label="主设置" name="TabSetting"> <el-form :model="Setting"> <el-form-item label="加速链接"> <el-input v-model="Setting.accelerateInput" placeholder="请在此填入加速链接"> </el-input> </el-form-item> <el-form-item label="下载工具" > <el-select v-model="Setting.downType" placeholder="选择文件下载方式" > <el-option label="浏览器" value="browser"> </el-option> <el-option label="Aria2" value="aria2"> </el-option> </el-select> </el-form-item> <el-form-item label="不使用加速链接"> <el-checkbox v-model="Setting.disableAccelerate" style=""> </el-checkbox> </el-form-item> </el-form> </el-tab-pane> <el-tab-pane label="Aria2" name="TabConfig"> <el-form-item label="主机"> <el-input v-model="Setting.RpcHostInput" placeholder="输入 Aria2 RPC 所在服务器的 IP 或域名(默认:localhost)"> <template #prepend>http://</template> </el-input> </el-form-item> <el-form-item label="端口"> <el-input v-model="Setting.RpcPortInput" placeholder="输入 Aria2 RPC 端口号(默认:6800)"> </el-input> </el-form-item> <el-form-item label="RPC路径"> <el-input v-model="Setting.RpcPathInput" placeholder="输入 Aria2 RPC 路径(默认:/jsonrpc)"> </el-input> </el-form-item> <el-form-item label="密码令牌(可选)"> <el-input v-model="Setting.RpcTokenInput" placeholder="输入 Aria2 RPC 密码令牌(如果未启用则留空)"> </el-input> </el-form-item> <el-divider> </el-divider> <el-form-item label="下载路径"> <el-input v-model="Setting.Aria2DownloadDir" placeholder="输入文件下载路径"> </el-input> </el-form-item> <el-form-item label="下载线程数"> <el-input v-model="Setting.Aria2MaxConnection" placeholder="输入 Aria2 文件下载时的线程数"> </el-input> </el-form-item> <span class="dialog-footer"> <el-button style="float:right" @click="CheckAria2">检查跟 Aria2 的连通性</el-button> </span> </el-tab-pane> <el-tab-pane label="实验性功能" name="test"> <el-alert :closable="false" title="以下功能仅供测试使用,不保证随时有效" type="error"> </el-alert> </el-tab-pane> </el-tabs> <template #footer> <span class="dialog-footer"> <el-button @click="CloseDialog">关闭</el-button> <el-button type="primary" @click="SaveAccelerateURL">应用</el-button> </span> </template> </el-dialog> </div>`; $(className).append(render); const App = { setup() { return { dialogVisible: Vue.ref(false), Setting: Vue.reactive({ downType: GM_getValue("downType", "browser"), disableAccelerate: Vue.ref(false), accelerateInput: Vue.ref(GM_getValue("accelerateURL", "")), RpcPathInput: Vue.ref(GM_getValue("RpcPath", "/jsonrpc")), RpcHostInput: Vue.ref(GM_getValue("RpcHost", "localhost")), RpcPortInput: Vue.ref(GM_getValue("RpcPort", "6800")), RpcTokenInput: Vue.ref(GM_getValue("RpcToken", "")), Aria2DownloadDir: Vue.ref(GM_getValue("Aria2DownloadDir", "C:/Downloads")), Aria2MaxConnection: Vue.ref(GM_getValue("Aria2MaxConnection", "16")), activeName: Vue.ref('TabSetting') }) }; }, methods: { OpenDialog() { this.dialogVisible = true; this.Setting.disableAccelerate = GM_getValue("disableAccelerate", false); this.Setting.accelerateInput = GM_getValue("accelerateURL", ""); this.Setting.downType = GM_getValue("downType", "browser"); this.Setting.RpcPathInput = GM_getValue("RpcPath", "/jsonrpc"); this.Setting.RpcHostInput = GM_getValue("RpcHost", "localhost"); this.Setting.RpcPortInput = GM_getValue("RpcPort", "6800"); this.Setting.RpcTokenInput = GM_getValue("RpcToken", ""); this.Setting.Aria2DownloadDir = GM_getValue("Aria2DownloadDir", "C:/Downloads"); this.Setting.Aria2MaxConnection = GM_getValue("Aria2MaxConnection", "16"); }, CloseDialog() { this.dialogVisible = false; }, CheckAria2(){ const msg = ElementPlus.ElMessage({ type: 'info', message: `正在尝试连接Aria2中...`, }) const RpcUrl = "http://" + this.Setting.RpcHostInput + ":" + this.Setting.RpcPortInput + this.Setting.RpcPathInput; const token = this.Setting.RpcTokenInput; let ariaData = { id: new Date().getTime(), jsonrpc: '2.0', method: 'aria2.getVersion', params: [`token:${token}`, [RpcUrl], { }] }; GM_xmlhttpRequest({ method: "POST", url: RpcUrl, data: JSON.stringify(ariaData), onload: function () { msg.close() ElementPlus.ElMessage({ type: 'success', message: `已成功连接 Aria2`, }) }, onerror: function () { msg.close() ElementPlus.ElMessage({ type: 'error', message: `无法连接至 Aria2`, }) } }); }, SaveAccelerateURL() { this.dialogVisible = false; GM_setValue("disableAccelerate", this.Setting.disableAccelerate); GM_setValue("accelerateURL", this.Setting.accelerateInput); GM_setValue("downType", this.Setting.downType); GM_setValue("RpcPath", this.Setting.RpcPathInput); GM_setValue("RpcHost", this.Setting.RpcHostInput); GM_setValue("RpcPort", this.Setting.RpcPortInput); GM_setValue("RpcToken", this.Setting.RpcTokenInput); GM_setValue("Aria2DownloadDir", this.Setting.Aria2DownloadDir); GM_setValue("Aria2MaxConnection", this.Setting.Aria2MaxConnection); ElementPlus.ElMessage({ message: '已保存该设置', type: 'success' }); } } }; const app = Vue.createApp(App); app.use(ElementPlus); app.mount("#app"); } // 加载 Vue3 + ElementPlus GM_addStyle(GM_getResourceText("ElementPlusCSS")); $.getScript(VueCDN, function () { console.log("[" + scriptName + "] Vue 加载成功"); $.getScript(ElementPlusCDN, function () { console.log("[" + scriptName + "] ElementPlus 加载成功"); // if (currentPage == 'pan') { // createApp('.wp-s-aside-nav__main-top', ` // <div id="app" class="u-tooltip item wp-aside-nav__main-item wp-aside-nav__main-item"> // <a href="javascript:;" @click="OpenDialog"> // <div class="wp-aside-nav__main-item-wrap"> // <img src="data:image/png;base64,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" // alt="" class="wp-aside-nav__main-item-img"> // <p class="wp-aside-nav__main-item-text text-ellip">下载设置</p> // </div> // </a> // `); // } // if (currentPage == 'old') { // createApp('.fldwM9jB', ` // <div id="app" class="u-tooltip item wp-aside-nav__main-item wp-aside-nav__main-item"> // <a class="g-button " data-button-id="b7" data-button-index="11" href="javascript:;" @click="OpenDialog" title="下载设置" node-type="transfer"><span class="g-button-right"><em class="icon icon-setting" title="下载设置"></em><span class="text" style="width: auto;">下载设置</span></span></a> // `); // } // if (currentPage == 'share') { // createApp('.bar .x-button-box', ` // <div id="app" class="u-tooltip item wp-aside-nav__main-item wp-aside-nav__main-item" style="display: inline-block;"> // <a class="g-button " data-button-id="b7" data-button-index="11" href="javascript:;" @click="OpenDialog" title="下载设置" node-type="transfer"><span class="g-button-right"><em class="icon icon-setting" title="下载设置"></em><span class="text" style="width: auto;">下载设置</span></span></a> // `); // } }); }); async function GlobalDownload(params) { const ElementPlus = unsafeWindow.ElementPlus; const accelerateURL = GM_getValue("accelerateURL", ""); const disableAccelerate = GM_getValue("disableAccelerate", false); const downType = GM_getValue("downType", "browser"); const maxConnection = GM_getValue("Aria2MaxConnection", "16"); let baiduyunPlugin_BDUSS = JSON.parse(unsafeWindow.localStorage.baiduyunPlugin_BDUSS ? unsafeWindow.localStorage.baiduyunPlugin_BDUSS : '{"baiduyunPlugin_BDUSS":""}'); let BDUSS = baiduyunPlugin_BDUSS.BDUSS; // 单文件下载 if (params.type == 0) { // 无加速链接 if (accelerateURL == "" || disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件', duration: 1000 }); } for (let dlink of params.dlinkList) { let finalUrl = await tools.getFinalUrl(dlink); tools.browserDownload(finalUrl); } } if (downType == "aria2") { // Aria2下载 if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件', duration: 1000 }); } for (let dlink of params.dlinkList) { let finalUrl = await tools.getFinalUrl(dlink); tools.aria2Download({ cookie: `BDUSS=${BDUSS}`, url: finalUrl, fileName: finalUrl.match(/&fn=(.*)&rtype=/)[1], dir: '/', split: maxConnection, userAgent: navigator.userAgent }); } } } // 有加速链接 if (accelerateURL != "" && !disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件', duration: 1000 }); } for (let dlink of params.dlinkList) { tools.getAccelerate(dlink).then(function (result) { if (result.code != 0) { // 请求加速链接失败的话,就重试一次 if (result.code == -10) { console.log("重试") tools.getAccelerate(dlink).then(function (result) { if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); tools.browserDownload(result.url); } }); } else { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); tools.browserDownload(result.url); } }); } // 遍历urls开始下载文件 } if (downType == "aria2") { // Aria2下载 let urls = []; if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件', duration: 1000 }); } for (let dlink of params.dlinkList) { tools.getAccelerate(dlink).then(function (result) { if (result.code != 0) { // 请求加速链接失败的话,就重试一次 if (result.code == -10) { console.log("重试") tools.getAccelerate(dlink).then(function (result) { if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 2000, type: 'success' }); let meta = {}; meta.url = result.url; meta.name = result.name; tools.aria2Download({ url: meta.url, fileName: meta.name, dir: '/', split: result.split, userAgent: result.ua }); } }); } else { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); let meta = {}; meta.url = result.url; meta.name = result.name; tools.aria2Download({ url: meta.url, fileName: meta.name, dir: '/', split: result.split, userAgent: result.ua }); } }); } } } } // 盘内文件夹下载 if (params.type == 1) { // 无加速链接 if (accelerateURL == "" || disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "GET", url: "/api/download?clienttype=8&app_id=250528&web=1&fidlist=[" + file.fs_id + "]&type=dlink&vip=2&sign=" + params.sign + "×tamp=" + params.timestamp, onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return -1; } let dlinkList = []; for (let list of data.dlink) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } GlobalDownload({ type: 0, dlinkList: dlinkList, notification: false }); } }); } if (file.isdir == 1) { GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/api/list?clienttype=0&app_id=250528&web=1&order=name&desc=1&dir=" + encodeURIComponent(file.path) + "&num=100000&page=1", onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 1, sign: params.sign, timestamp: params.timestamp, fileList: list.list, notification: false }); } }); } } } if (downType == "aria2") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "GET", url: "/api/download?clienttype=8&app_id=250528&web=1&fidlist=[" + file.fs_id + "]&type=dlink&vip=2&sign=" + params.sign + "×tamp=" + params.timestamp, onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return -1; } let dlinkList = []; for (let list of data.dlink) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } for (let dlink of dlinkList) { let finalUrl = await tools.getFinalUrl(dlink); tools.aria2Download({ cookie: `BDUSS=${BDUSS}`, url: finalUrl, fileName: finalUrl.match(/&fn=(.*)&rtype=/)[1], dir: params.dir, split: maxConnection, userAgent: navigator.userAgent }); } } }); } if (file.isdir == 1) { GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/api/list?clienttype=0&app_id=250528&web=1&order=name&desc=1&dir=" + encodeURIComponent(file.path) + "&num=100000&page=1", onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 1, sign: params.sign, timestamp: params.timestamp, fileList: list.list, notification: false, dir: params.dir + file.server_filename + '/' }); } }); } } } } // 有加速链接 if (accelerateURL != "" && !disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "GET", url: "/api/download?clienttype=8&app_id=250528&web=1&fidlist=[" + file.fs_id + "]&type=dlink&vip=2&sign=" + params.sign + "×tamp=" + params.timestamp, onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return -1; } let urls = []; for (let dlinks of data.dlink) { let dlink = dlinks.dlink.replace("http://", "https://") + "&origin=dlna"; let result = await tools.getAccelerate(dlink); if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); urls.push(result.url); } } // 遍历urls开始下载文件 for (let url of urls) { tools.browserDownload(url); } } }); } if (file.isdir == 1) { GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/api/list?clienttype=0&app_id=250528&web=1&order=name&desc=1&dir=" + encodeURIComponent(file.path) + "&num=100000&page=1", onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 1, sign: params.sign, timestamp: params.timestamp, fileList: list.list, notification: false }); } }); } } } if (downType == "aria2") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "GET", url: "/api/download?clienttype=8&app_id=250528&web=1&fidlist=[" + file.fs_id + "]&type=dlink&vip=2&sign=" + params.sign + "×tamp=" + params.timestamp, onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return -1; } let urls = []; let dlinkList = []; for (let list of data.dlink) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } for (let dlink of dlinkList) { var result = await tools.getAccelerate(dlink); if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); let meta = {}; meta.url = result.url; meta.name = result.name; urls.push(meta); } for (let meta of urls) { tools.aria2Download({ url: meta.url, fileName: meta.name, dir: params.dir, split: result.split, userAgent: result.ua }); } } } }); } if (file.isdir == 1) { GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/api/list?clienttype=0&app_id=250528&web=1&order=name&desc=1&dir=" + encodeURIComponent(file.path) + "&num=100000&page=1", onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 1, sign: params.sign, timestamp: params.timestamp, fileList: list.list, notification: false, dir: params.dir + file.server_filename + '/' }); } }); } } } } } // 分享文件夹下载 if (params.type == 2) { // 无加速链接 if (accelerateURL == "" || disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "POST", url: params.url, data: params.data.replace('[fid_list]', '[' + file.fs_id + ']'), onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return params.doError(data.errno); } let dlinkList = []; for (let list of data.list) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } GlobalDownload({ type: 0, dlinkList: dlinkList, notification: false }); } }); } if (file.isdir == 1) { let share_uk = unsafeWindow.locals.get("share_uk"); let primaryid = unsafeWindow.locals.get("shareid"); GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/share/list?uk=" + share_uk + "&shareid=" + primaryid + "&order=name&desc=1&showempty=0&web=1&page=1&num=10000&dir=" + encodeURIComponent(file.path), onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 2, dir: params.dir + file.server_filename + '/', url: params.url, data: params.data, fileList: list.list, notification: false }); } }); } } } if (downType == "aria2") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "POST", url: params.url, data: params.data.replace('[fid_list]', '[' + file.fs_id + ']'), onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return params.doError(data.errno); } let dlinkList = []; for (let list of data.list) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } for (let dlink of dlinkList) { let finalUrl = await tools.getFinalUrl(dlink); tools.aria2Download({ cookie: `BDUSS=${BDUSS}`, url: finalUrl, fileName: finalUrl.match(/&fn=(.*)&rtype=/)[1], dir: params.dir, split: maxConnection, userAgent: navigator.userAgent }); } } }); } if (file.isdir == 1) { let share_uk = unsafeWindow.locals.get("share_uk"); let primaryid = unsafeWindow.locals.get("shareid"); GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/share/list?uk=" + share_uk + "&shareid=" + primaryid + "&order=name&desc=1&showempty=0&web=1&page=1&num=10000&dir=" + encodeURIComponent(file.path), onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 2, dir: params.dir + file.server_filename + '/', url: params.url, data: params.data, fileList: list.list, notification: false }); } }); } } } } // 有加速链接 if (accelerateURL != "" && !disableAccelerate) { if (downType == "browser") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 浏览器 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "POST", url: params.url, data: params.data.replace('[fid_list]', '[' + file.fs_id + ']'), onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return params.doError(data.errno); } for (let dlinks of data.list) { let dlink = dlinks.dlink.replace("http://", "https://") + "&origin=dlna"; let result = await tools.getAccelerate(dlink); if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: "加速链接已获取,正在加入下载列表...", duration: 1500, type: 'success' }); tools.browserDownload(result.url); } } } }); } if (file.isdir == 1) { let share_uk = unsafeWindow.locals.get("share_uk"); let primaryid = unsafeWindow.locals.get("shareid"); console.log(file.path) GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/share/list?uk=" + share_uk + "&shareid=" + primaryid + "&order=name&desc=1&showempty=0&web=1&page=1&num=10000&dir=" + encodeURIComponent(file.path), onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 2, dir: params.dir + file.server_filename + '/', url: params.url, data: params.data, fileList: list.list, notification: false }); } }); } } } if (downType == "aria2") { if (params.notification == undefined) { ElementPlus.ElNotification({ title: title, message: '正在使用 Aria2 下载文件夹', duration: 1000 }); } for (let file of params.fileList) { if (file.isdir == 0) { GM_xmlhttpRequest({ method: "POST", url: params.url, data: params.data.replace('[fid_list]', '[' + file.fs_id + ']'), onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "下载文件时出错,错误代码:" + data.errno, duration: 3000, type: 'error' }); return params.doError(data.errno); } let urls = []; let dlinkList = []; for (let list of data.list) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } for (let dlink of dlinkList) { var result = await tools.getAccelerate(dlink); if (result.code != 0) { ElementPlus.ElNotification({ title: result.title, message: result.errMsg, duration: 5000, type: 'error' }); } else { ElementPlus.ElNotification({ title: result.name, message: result.message, duration: 1500, type: 'success' }); let meta = {}; meta.url = result.url; meta.name = result.name; urls.push(meta); } for (let meta of urls) { tools.aria2Download({ url: meta.url, fileName: meta.name, dir: params.dir, split: result.split, userAgent: result.ua }); } } } }); } if (file.isdir == 1) { let share_uk = unsafeWindow.locals.get("share_uk"); let primaryid = unsafeWindow.locals.get("shareid"); GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/share/list?uk=" + share_uk + "&shareid=" + primaryid + "&order=name&desc=1&showempty=0&web=1&page=1&num=10000&dir=" + encodeURIComponent(file.path), onload: function (response) { let list = JSON.parse(response.responseText); if (list.errno != 0) { ElementPlus.ElNotification({ title: file.server_filename, message: "尝试获取文件夹列表时失败,错误代码:" + list.errno, duration: 3000, type: 'error' }); return -1; } GlobalDownload({ type: 2, dir: params.dir + file.server_filename + '/', url: params.url, data: params.data, fileList: list.list, notification: false }); } }); } } } } } } function NewPageDownload() { const nd_download = unsafeWindow.nd_download; nd_download.canShowFail = false; nd_download.dlinkIns.getSign().then(function () { let dlinkIns = nd_download.dlinkIns; let currentFileMetas = nd_download.currentFileMetas; if (!currentFileMetas.length) { return console.error("[Plugin][download] 需要选中至少一个文件!"); } let sign = dlinkIns.sign, timestamp = dlinkIns.timestamp, userInfo = dlinkIns.ctx.userInfo, vipType = userInfo.vipType, vip = void 0 === vipType ? 0 : vipType; let fileList = {}; let fidList = currentFileMetas.map(function (File) { fileList[File.fs_id] = File; return File.fs_id; }); currentFileMetas.map(function (File) { return File.path; }); let includeFolder = currentFileMetas.some(function (File) { return File.isdir; }); if (includeFolder) { let fileList = []; for (let FileMetas of currentFileMetas) { let meta = {}; meta.fs_id = FileMetas.fs_id; meta.isdir = FileMetas.isdir; meta.path = FileMetas.path; meta.server_filename = FileMetas.server_filename; fileList.push(meta); } GlobalDownload({ type: 1, dir: '/', sign: encodeURIComponent(sign), timestamp: timestamp, fileList: fileList }); //downloadFolder(currentFileMetas, sign, timestamp, vip); return console.log("[Plugin][download] 跳转至文件夹下载函数"); } GM_xmlhttpRequest({ method: "GET", url: "/api/download?clienttype=8&app_id=250528&web=1&fidlist=" + JSON.stringify(fidList) + "&type=dlink&vip=" + vip + "&sign=" + encodeURIComponent(sign) + "×tamp=" + timestamp, onload: async function (res) { let data = JSON.parse(res.responseText); if (data.errno !== 0) { ElementUI.$Message({ 'dangerouslyUseHTMLString': true, 'type': 'error', 'message': dlinkIns.setResData(data).show_msg }); return -1; } let dlinkList = []; for (let list of data.dlink) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } GlobalDownload({ type: 0, dlinkList: dlinkList }); } }); }); } // 旧版页面 if (unsafeWindow.require != undefined) { let ctx = unsafeWindow.require("system-core:context/context.js").instanceForSystem; let tip = ctx.ui.tip; ctx.ui.tip = function (e) { return -1 != e.msg.indexOf("下载失败") && (e.msg = ""), -1 != e.msg.indexOf("正在启动网盘客户端") && (e.msg = ""), tip.call(this, e); }, unsafeWindow.require.async("function-widget-1:download/service/guanjiaServerProxy.js", guanjiaServerProxy => { guanjiaServerProxy.sendServer = function () { console.log("[" + scriptName + "] 已禁止调用客户端"); }; }); unsafeWindow.require.async('function-widget-1:download/config.js', config => { [].push.apply(config.directDownloadkeysConfig, config.guanjiaDownloadkeysConig); config.guanjiaDownloadkeysConig = []; }); unsafeWindow.require.async('function-widget-1:download/service/dlinkService.js', dlinkService => { console.log(dlinkService); dlinkService.getDlinkShare = function (data, callback) { this.arguments = arguments; var p = this; let fidList = []; let currentFileMetas = data.list; let shareUrl = dlinkService.URL_DLINK_SHARE + "?sign=" + data.sign + "×tamp=" + data.timestamp + "&channel=chunlei&web=1&app_id=250528&clienttype=12&jsToken=" + unsafeWindow.jsToken; let postData = "encrypt=0&product=share&uk=" + data.share_uk + "&primaryid=" + data.share_id + "&extra=" + encodeURIComponent(JSON.stringify({ sekey: decodeURIComponent(tools.getCookie("BDCLND")) })) + "&fid_list=[fid_list]&vip=2&vcode_input=" + (data.vcode_input == undefined ? "" : data.vcode_input) + "&vcode_str=" + (data.vcode_str == undefined ? "" : data.vcode_str); let includeFolder = currentFileMetas.some(function (File) { return File.isdir; }); if (includeFolder) { let fileList = []; for (let FileMetas of currentFileMetas) { let meta = {}; meta.fs_id = FileMetas.fs_id; meta.isdir = FileMetas.isdir; meta.path = FileMetas.path; meta.server_filename = FileMetas.server_filename; fileList.push(meta); } GlobalDownload({ type: 2, dir: '/', url: shareUrl, data: postData, fileList: fileList, doError: p._doError }); return console.log("[Plugin][download] 跳转至文件夹下载函数"); } for (let meta of currentFileMetas) { let fs_id = meta.fs_id; fidList.push(fs_id); } GM_xmlhttpRequest({ method: "POST", url: shareUrl, data: postData.replace('[fid_list]', JSON.stringify(fidList)), onload: async function (res) { res = JSON.parse(res.responseText); if (res.errno != 0) { return p._doError(res.errno); } let dlinkList = []; for (let list of res.list) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } GlobalDownload({ type: 0, dlinkList: dlinkList }); }, error: function () { p._doError(); } }); }; dlinkService.getDlinkPan = function (fsidList, downType) { this.arguments = arguments; var p = this; unsafeWindow.locals.get("sign1", "sign2", "sign3", "timestamp", function (l, g, f, h) { if (null === p.sign) { var m = ""; try { m = new Function("return " + g)(); } catch (_) { throw new Error(_.message); } if ("function" != typeof m) return void p._doError(); p.sign = encodeURIComponent(p.base64Encode(m(f, l))); } let currentFileMetas = ctx.list.getSelected(); let includeFolder = currentFileMetas.some(function (File) { return File.isdir; }); if (includeFolder) { let fileList = []; for (let FileMetas of currentFileMetas) { let meta = {}; meta.fs_id = FileMetas.fs_id; meta.isdir = FileMetas.isdir; meta.path = FileMetas.path; meta.server_filename = FileMetas.server_filename; fileList.push(meta); } GlobalDownload({ type: 1, dir: '/', sign: p.sign, timestamp: h, fileList: fileList }); //downloadFolder(currentFileMetas, sign, timestamp, vip); return console.log("[Plugin][download] 跳转至文件夹下载函数"); } GM_xmlhttpRequest({ method: "POST", url: dlinkService.URL_DLINK_PAN, data: "app_id=250528&clienttype=8&type=dlink&fidlist=" + fsidList + "&sign=" + p.sign + "×tamp=" + h, onload: async function (res) { res = JSON.parse(res.responseText); if (res.errno != 0) { p._doError(res.errno); return; } let dlinkList = []; for (let list of res.dlink) { let dlink = list.dlink.replace("http://", "https://") + "&origin=dlna"; dlinkList.push(dlink); } GlobalDownload({ type: 0, dlinkList: dlinkList }); }, onerror: function (err) { p._doError(); } }); }); }; }); } // 盘内Hook let HookBaiduNetdisk = new MutationObserver(mutationRecords => { for (let mr of mutationRecords) { for (let node of mr.addedNodes) { if (node.__vue__ !== undefined && node.__vue__ !== null) { var Vue = node.__vue__; if (Vue.$el.className == "nd-download") { unsafeWindow.nd_download = Vue; // 重写下载方 Vue.download = NewPageDownload; } // 过滤广告 if (Vue.$el.className == "web-header-ad-item wp-s-header__right-item") { Vue.conf.text = ""; } if (Vue.$el.className == "nd-unzip") { unsafeWindow.unzip = Vue; console.log(Vue); } } } } }); HookBaiduNetdisk.observe(document, { childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址