您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
1.去广告 2.收藏功能 3.历史观看记录
当前为
// ==UserScript== // @name ddrk助手 // @namespace king // @version 0.2 // @description 1.去广告 2.收藏功能 3.历史观看记录 // @author hero-king // @match https://ddrk.me/* // @icon https://ddrk.me/favicon-32x32.png // @grant none // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js // ==/UserScript== (function () { "use strict"; /*去广告*/ $(".cfa_popup").css({ height: "0px" }); $("#iaujwnefhw").css({ height: "0", overflow: "hidden" }); $("#kasjbgih").css({ height: "0", overflow: "hidden" }); const styleStr = `<style> .col_list-ul::-webkit-scrollbar { width: 5px; height: 5px } .col_list-ul::-webkit-scrollbar-thumb { border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; background-color: #999; } .col_list-ul::-webkit-scrollbar-track { background-color: transparent }<style>`; $("head").append(styleStr); const jsonText = window.localStorage.getItem("ddrk-collection"); let list = []; if (jsonText) { list = JSON.parse(jsonText); } const div = $("<div></div>"); div.css({ position: "absolute", left: "0", top: "0", right: "0", bottom: "0", "text-align": "right", }); div.addClass("laksjdflakjsd"); $(".post-box").on("click", ".btn_default", function (e) { e.stopPropagation(); }); $(".post-box").on("click", ".btn_add", function (e) { const href = $(this).parent().parent().data("href"); const name = $(this).parent().parent().find(".post-box-title a").text(); if (!list.find((item) => item.href === href)) { list.push({ name: name.indexOf("(") > -1 ? name.split("(")[0] : name, href, }); window.localStorage.setItem("ddrk-collection", JSON.stringify(list)); } reloadCollect(1, $(this)); reloadColList(); }); $(".post-box").on("click", ".btn_remove", function (e) { const href = $(this).parent().parent().data("href"); const index = list.findIndex((item) => item.href === href); if (index !== -1) { list.splice(index, 1); window.localStorage.setItem("ddrk-collection", JSON.stringify(list)); } reloadCollect(0, $(this)); reloadColList(); }); $(".post-box").on("click", ".laksjdflakjsd", function (e) { window.open($(this).parent().data("href")); e.stopPropagation(); }); $("body").on("click", ".col_list-ul li", function (e) { window.open($(this).data("href")); e.stopPropagation(); }); $("body").on("click", ".col_list-ul li .icon_del", function (e) { const href = $(this).parent().data("href"); const index = list.findIndex((item) => item.href === href); if (index !== -1) { list.splice(index, 1); window.localStorage.setItem("ddrk-collection", JSON.stringify(list)); } reloadCollect(); reloadColList(); e.stopPropagation(); }); const btn = $( '<span class="btn_default btn_remove" style="font-size:22px;color: #2EBF8B;padding:6px;background-color: rgba(0,0,0,0.4);position: absolute;top:0;box-shadow: 0px 0px 5px rgba(0,0,0,0.4);line-height: 1.2;user-select:none;">★</span>' ); $(".post-box").each(function () { const tempBtn = btn.clone(true); if (!list.find((item) => item.href === $(this).data("href"))) { tempBtn.addClass("btn_add"); tempBtn.removeClass("btn_remove"); tempBtn.text("☆"); } div.html(tempBtn); $(this).append(div.clone(true)); }); // 收藏列表 const colOuter = $("<div class='col_list'></div>"); colOuter.css({ position: "fixed", top: "35px", right: "0", width: "0", height: "auto", "min-height": "54px", "box-sizing": " border-box", background: "#000", "box-shadow": "-1px 1px 5px rgba(0, 0, 0, 0.2)", "z-index": "999", transition: "width .8s", }); const title = $("<h6>收藏夹</h6>"); title.css({ color: "#aaa", margin: "5px", "text-align": "center", }); const arrowIcon = $( ' <svg style="position: absolute;left: -20px;top: 0;width: 20px;height: 54px;background: #008080;color: #000;border-top-left-radius: 8px;border-bottom-left-radius: 8px;" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" ><path fill="currentColor" d="M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z" ></path></svg>;' ); const ul = $("<ul class='col_list-ul'></ul>"); ul.css({ height: "0", padding: "5px", overflow: "hidden", color: "#20B2AA", }); colOuter.append(title); colOuter.append(arrowIcon); colOuter.append(ul); $("body").append(colOuter); colOuter .mouseenter(function () { colOuter.css({ width: "260px" }); ul.css({ height: "300px", overflow: "auto" }); }) .mouseleave(function () { colOuter.css({ width: "0", }); ul.css({ height: 0, overflow: "hidden" }); }); reloadColList(); function reloadColList() { ul.html(""); for (const item of list) { const li = $( "<li class='col_item' style='cursor: pointer;display: flex;justify-content: space-between;' ></li>" ); const span = $("<span>" + item.name + "</span>"); const del = $("<span class='icon_del'>x</span>"); del.css({ "border-radius": "100%", width: "16px", height: "16px", "line-height": "1", display: "none", "text-align": "center", color: "#fff", }); li.append(span); li.append(del); li.data("href", item.href); li.mouseenter(function () { $(this).find(".icon_del").css({ display: "inline-block" }); }).mouseleave(function () { $(this).find(".icon_del").css({ display: "none" }); }); ul.append(li); } } function reloadCollect(tag, tempBtn) { if (tempBtn) { if (tag === 0) { tempBtn.addClass("btn_add"); tempBtn.removeClass("btn_remove"); tempBtn.text("☆"); } else { tempBtn.addClass("btn_remove"); tempBtn.removeClass("btn_add"); tempBtn.text("★"); } } else { $(".post-box").each(function () { const tempBtn = $(this).find(".btn_default"); if (!list.find((item) => item.href === $(this).data("href"))) { tempBtn.addClass("btn_add"); tempBtn.removeClass("btn_remove"); tempBtn.text("☆"); } else { tempBtn.addClass("btn_remove"); tempBtn.removeClass("btn_add"); tempBtn.text("★"); } }); } } /** * 历史记录功能 */ let historyUl = null; async function initLocal() { const jsonText = window.localStorage.getItem("ddrk-history"); let jsonList = []; if (jsonText) { jsonList = JSON.parse(jsonText); } const localData = getLocalStorageData(); const his = formatLocalData(localData); const filterList = filterLocalData(his); const res = compareLocalData(jsonList, filterList); // console.log("history-----------------", his); for (const item of res) { if (!item.name) { const name = await getDramaName(item.url); item.name = name.indexOf("(") > -1 ? name.split("(")[0] : name; } } // console.log("result----------------", res); window.localStorage.setItem("ddrk-history", JSON.stringify(res)); historyUl = createHtml(); reloadHistoryList(res); } initLocal(); // 对比 function compareLocalData(myList, ddrkList) { return ddrkList.map((ddrkItem) => { const innerItem = myList.find( (item) => item.enName === ddrkItem.enName && item.season === ddrkItem.season ) || {}; return { ...innerItem, ...ddrkItem, }; }); } function formatLocalData(local) { const history = local .filter((item) => item.key.indexOf("videojs-resume:") === 0) .map((item) => { const info = item.key.split("/"); return { ...item, url: item.key.split(":")[1], enName: info[1], season: info.length > 3 ? info[2] : "", ep: info.at(-1).replace("?ep=", ""), }; }); return history; } // 去重 function filterLocalData(params) { const result = params.reduce((res, cur) => { const innerItem = res.find( (item) => item.enName === cur.enName && item.season === cur.season ); if (innerItem) { if (+cur.ep > +innerItem.ep) { res.splice( res.findIndex( (item) => item.enName === cur.enName && item.season === cur.season ), 1, cur ); } return res; } else { return res.concat(cur); } }, []); return result; } function getLocalStorageData() { var len = localStorage.length; // 获取长度 var arr = new Array(); // 定义数据集 for (var i = 0; i < len; i++) { // 获取key 索引从0开始 var getKey = localStorage.key(i); // 获取key对应的值 var getVal = localStorage.getItem(getKey); // 放进数组 arr[i] = { key: getKey, val: getVal, }; } return arr; } function getDramaName(url) { return new Promise((resolve, reject) => { $.get(`https://ddrk.me${url}`, function (result) { const name = $(result).find(".post-title").text(); resolve(name); }); }); } function createHtml(params) { const colOuter = $("<div class='col_list'></div>"); colOuter.css({ position: "fixed", top: "135px", right: "0", width: "0", height: "auto", "min-height": "54px", "box-sizing": " border-box", background: "#000", "box-shadow": "-1px 1px 5px rgba(0, 0, 0, 0.2)", "z-index": "99", transition: "width .8s", }); const title = $("<h6>观看记录</h6>"); title.css({ color: "#aaa", margin: "5px", "text-align": "center", }); const arrowIcon = $( ' <svg style="position: absolute;left: -20px;top: 0;width: 20px;height: 54px;background: #008080;color: #000;border-top-left-radius: 8px;border-bottom-left-radius: 8px;" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" ><path fill="currentColor" d="M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z" ></path></svg>;' ); const ul = $("<ul class='col_list-ul'></ul>"); ul.css({ height: "0", padding: "5px", overflow: "hidden", color: "#20B2AA", }); colOuter.append(title); colOuter.append(arrowIcon); colOuter.append(ul); $("body").append(colOuter); colOuter .mouseenter(function () { colOuter.css({ width: "260px" }); ul.css({ height: "300px", overflow: "auto" }); }) .mouseleave(function () { colOuter.css({ width: "0", }); ul.css({ height: 0, overflow: "hidden" }); }); return ul; } function reloadHistoryList(hisList) { historyUl.html(""); for (const item of hisList) { const li = $( "<li class='col_item' style='cursor: pointer;display: flex;justify-content: space-between;' ></li>" ); const season = item.season ? `S${item.season}` : ""; const ep = item.ep ? `E${item.ep}` : ""; const hour = parseInt(item.val / 3600) > 0 ? parseInt(item.val / 3600) : 0; const min = parseInt((item.val - hour * 3600) / 60) > 0 ? parseInt((item.val - hour * 3600) / 60) : 0; const sec = parseInt(item.val - hour * 3600 - min * 60); const timeStr = `${hour > 9 ? hour : "0" + hour}:${ min > 9 ? min : "0" + min }:${sec > 9 ? sec : "0" + sec}`; const span = $( "<span>" + item.name + " " + season + ep + "<span style='font-size: 12px;color: #fff;margin-left: 20px;'>" + timeStr + "</span>" + "</span>" ); // const del = $("<span class='icon_del'>x</span>"); // del.css({ // "border-radius": "100%", // width: "16px", // height: "16px", // "line-height": "1", // display: "none", // "text-align": "center", // color: "#fff", // }); // li.append(del); li.append(span); li.data("href", item.url); // li.mouseenter(function () { // $(this).find(".icon_del").css({ display: "inline-block" }); // }).mouseleave(function () { // $(this).find(".icon_del").css({ display: "none" }); // }); historyUl.append(li); } } })();