全网VIP视频破解去广告免费看

本脚本精选解析线路为大家提供优酷、爱奇艺、腾讯、B站(bilibili)、乐视、芒果等各大视频网站(PC+移动端)视频解析服务,让你省去购买视频VIP费用,同时提供知乎增强(知乎视频下载、去广告、去除侧边栏、关键词屏蔽等会员功能),全网音乐和有声书免客户端下载(网易云音乐、QQ音乐、酷狗、酷我、虾米、蜻蜓FM、荔枝FM、喜马拉雅等),视频无水印下载(bilibili、抖音、快手、西瓜、youtube),自动查券功能,所有功能互不影响,可独立开关。

目前为 2023-06-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 全网VIP视频破解去广告免费看
  3. // @namespace miguo
  4. // @version 6.7.2
  5. // @description 本脚本精选解析线路为大家提供优酷、爱奇艺、腾讯、B站(bilibili)、乐视、芒果等各大视频网站(PC+移动端)视频解析服务,让你省去购买视频VIP费用,同时提供知乎增强(知乎视频下载、去广告、去除侧边栏、关键词屏蔽等会员功能),全网音乐和有声书免客户端下载(网易云音乐、QQ音乐、酷狗、酷我、虾米、蜻蜓FM、荔枝FM、喜马拉雅等),视频无水印下载(bilibili、抖音、快手、西瓜、youtube),自动查券功能,所有功能互不影响,可独立开关。
  6. // @author zhmai,miguo
  7. // @icon data:image/png;base64,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
  8. // @match *://pan.baidu.com/disk/home*
  9. // @match *://yun.baidu.com/disk/home*
  10. // @match *://pan.baidu.com/disk/main*
  11. // @match *://yun.baidu.com/disk/main*
  12. // @match *://pan.baidu.com/s*
  13. // @match *://yun.baidu.com/s*
  14. // @match *://*.youku.com/*
  15. // @match *://*.iqiyi.com/*
  16. // @match *://*.iq.com/*
  17. // @match *://*.le.com/*
  18. // @match *://v.qq.com/*
  19. // @match *://m.v.qq.com/*
  20. // @match *://*.tudou.com/*
  21. // @match *://*.mgtv.com/*
  22. // @match *://tv.sohu.com/*
  23. // @match *://film.sohu.com/*
  24. // @match *://*.1905.com/*
  25. // @match *://*.bilibili.com/*
  26. // @match *://*.pptv.com/*
  27. // @match *://*.liangxinyao.com/*
  28. // @match *://music.163.com/*
  29. // @match *://y.qq.com/*
  30. // @match *://*.kugou.com/*
  31. // @match *://*.kuwo.cn/*
  32. // @match *://*.ximalaya.com/*
  33. // @match *://*.zhihu.com/*
  34. // @match *://*.douyin.com/*
  35. // @match *://*.kuaishou.com/*
  36. // @match *://*.ixigua.com/*
  37. // @match *://*.youtube.com/*
  38. // @match *://47.99.158.118/*
  39. // @exclude *://*.zhmdy.top/*
  40. // @exclude *://*.eggvod.cn/*
  41. // @connect d.pcs.baidu.com
  42. // @connect baidu.com
  43. // @connect baidupcs.com
  44. // @connect youxiaohou.com
  45. // @connect localhost
  46. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js
  47. // @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/limonte-sweetalert2/11.4.4/sweetalert2.all.min.js
  48. // @original-script https://greasyfork.org/scripts/376078
  49. // @original-author zhmai
  50. // @original-license GPL License
  51. // @original-script https://github.com/syhyz1990/baiduyun/blob/master/baiduyun.user.js
  52. // @original-author youxiaohou
  53. // @original-license AGPL License
  54. // @original-changes 将强制关注公众号改为非强制。
  55. // @antifeature referral-link 此提示为GreasyFork代码规范要求含有查券功能的脚本必须添加,实际使用无任何强制跳转,代码可查,请知悉。
  56. // @license AGPL License
  57. // @grant GM_download
  58. // @grant GM_openInTab
  59. // @grant GM_setValue
  60. // @grant GM_getValue
  61. // @grant GM_deleteValue
  62. // @grant GM_xmlhttpRequest
  63. // @grant GM_addStyle
  64. // @grant unsafeWindow
  65. // @grant GM_setClipboard
  66. // @grant GM_getResourceURL
  67. // @grant GM_getResourceText
  68. // @grant GM_info
  69. // @grant GM_registerMenuCommand
  70. // @grant GM_cookie
  71. // @connect iesdouyin.com
  72. // @connect 47.99.158.118
  73. // ==/UserScript==
  74.  
  75. (function() {
  76. 'use strict';
  77.  
  78. var domHead = document.getElementsByTagName('head')[0];
  79.  
  80. var domStyle = document.createElement('style');
  81.  
  82. domStyle.type = 'text/css';
  83.  
  84. domStyle.rel = 'stylesheet';
  85. //平台判断
  86. var isMobile = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent);
  87.  
  88. if(isMobile){
  89.  
  90. let playLine = [
  91. {"name":"推荐","url":"https://jx.xyflv.com/?url="},
  92. {"name":"米果","url":"https://jx.aidouer.net/?url="},
  93. {"name":"B站1","url":"https://www.afrp.top/jiexi/?url="},
  94. {"name":"爱豆","url":"https://jx.aidouer.net/?url="},
  95. {"name":"OK","url":"http://www.wpsseo.cn/line.php?n=2&url="},
  96. {"name":"RDHK","url":"https://www.pangujiexi.cc/jiexi.php?url="},
  97. {"name":"人人迷","url":"https://jx.xmflv.com/?url="},
  98. {"name":"思古3","url":"https://jx.bozrc.com:4433/player/?url="},
  99. {"name":"听乐","url":"https://jx.m3u8.tv/jiexi/?url="},
  100. ];
  101.  
  102. let useWeb = ['m.bilibili.com','youku.com','www.youku.com','m.youku.com','m.v.qq.com','m.iqiyi.com','m.mgtv.com','m.tv.sohu.com','m.1905.com','m.pptv.com','m.le.com'];
  103.  
  104. if(useWeb.indexOf(location.host) == -1){
  105. console.log('不是应用网站');return;
  106. }
  107.  
  108. function setCookie(cname,cvalue,exdays){
  109.  
  110. var d = new Date();
  111.  
  112. d.setTime(d.getTime()+(exdays*24*60*60*1000));
  113.  
  114. var expires = "expires="+d.toGMTString();
  115.  
  116. document.cookie = cname+"="+cvalue+"; "+expires;
  117. }
  118.  
  119. function getCookie(cname){
  120. var name = cname + "=";
  121. var ca = document.cookie.split(';');
  122. for(var i=0; i<ca.length; i++) {
  123. var c = ca[i].trim();
  124. if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
  125. }
  126. return "";
  127. }
  128.  
  129. function createElement(dom,domId){
  130.  
  131. var rootElement = document.body;
  132.  
  133. var newElement = document.createElement(dom);
  134.  
  135. newElement.id = domId;
  136.  
  137. var newElementHtmlContent = document.createTextNode('');
  138.  
  139. rootElement.appendChild(newElement);
  140.  
  141. newElement.appendChild(newElementHtmlContent);
  142.  
  143. }
  144.  
  145. function toast(msg,duration){
  146.  
  147. duration=isNaN(duration)?3000:duration;
  148.  
  149. let toastDom = document.createElement('div');
  150.  
  151. toastDom.innerHTML = msg;
  152.  
  153. toastDom.style.cssText='padding:2px 15px;min-height: 36px;line-height: 36px;text-align: center;transform: translate(-50%);border-radius: 4px;color: rgb(255, 255, 255);position: fixed;top: 50%;left: 50%;z-index: 9999999;background: rgb(0, 0, 0);font-size: 16px;'
  154.  
  155. document.body.appendChild(toastDom);
  156.  
  157. setTimeout(function() {
  158.  
  159. var d = 0.5;
  160.  
  161. toastDom.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
  162.  
  163. toastDom.style.opacity = '0';
  164.  
  165. setTimeout(function() { document.body.removeChild(toastDom) }, d * 1000);
  166.  
  167. }, duration);
  168.  
  169. }
  170.  
  171. function playVideoFunc(){
  172. //css
  173. let playVideoStyle = `
  174. .zhm_play_vidoe_icon{
  175. padding-top:2px;cursor:pointer;
  176. z-index:9999999;
  177. display:block;
  178. position:fixed;let:0px;top:360px;text-align:center;overflow:visible
  179. }
  180. .zhm_play_video_wrap{
  181. position:fixed;left:40px;top:360px;
  182. z-index:9999999;
  183. overflow: hidden;
  184. width:300px;
  185. }
  186. .zhm_play_video_line{
  187. width:320px;
  188. height:316px;
  189. overflow-y:scroll;
  190. overflow-x:hidden;
  191. }
  192. .zhm_play_vide_line_ul{
  193. width:300px;
  194. display: flex;
  195. justify-content: flex-start;
  196. flex-flow: row wrap;
  197. list-style: none;
  198. padding:0px;
  199. margin:0px;
  200.  
  201. }
  202. .zhm_play_video_line_ul_li{
  203. padding:4px 0px;
  204. margin:2px;
  205. width:30%;
  206. color:#FFF;
  207. text-align:center;
  208. background-color:#f24443;
  209. box-shadow:0px 0px 10px #fff;
  210. font-size:14px;
  211. }
  212. .zhm_play_video_line_ul_li:hover{
  213. color:#260033;
  214. background-color:#fcc0c0
  215. }
  216. .zhm_line_selected{
  217. color:#260033;
  218. background-color:#fcc0c0
  219. }
  220.  
  221. .zhm_play_video_jx{
  222. width:100%;
  223. height:100%;
  224. z-index:999999;
  225. position: absolute;top:0px;padding:0px;
  226. }
  227. `;
  228.  
  229. domStyle.appendChild(document.createTextNode(playVideoStyle));
  230.  
  231. domHead.appendChild(domStyle);
  232.  
  233. //template:icon,playLine;
  234. let playWrapHtml = "<div href='javascript:void(0)' target='_blank' style='' class='playButton zhm_play_vidoe_icon' id='zhmlogo'><img class='iconLogo' src='data:image/gif;base64,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' title='点击主图标弹出解析,点击右侧列表站内解析' style='width:40px'>";
  235.  
  236. playWrapHtml += "<div class='playLineDiv zhm_play_video_wrap' style='display:none;'>"
  237.  
  238. playWrapHtml += "<div class='zhm_play_video_line'>";
  239.  
  240. playWrapHtml +="<div><ul class='zhm_play_vide_line_ul'>";
  241.  
  242. playLine.forEach(function(item){
  243.  
  244. let selected = '';
  245.  
  246. if(getCookie('playLineAction') == item.url){
  247.  
  248. selected='zhm_line_selected';
  249.  
  250. }
  251.  
  252. playWrapHtml +=`<li class='playLineTd zhm_play_video_line_ul_li ${selected}' url='${item.url}' >${item.name}</li>`;
  253.  
  254. })
  255.  
  256. playWrapHtml +="</div></div></div>";
  257.  
  258. //template:node;播放区域
  259.  
  260. let playJxHtml = "<div class='zhm_play_video_jx'>";
  261.  
  262. playJxHtml += "<iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='playIframe'></iframe></div>";
  263.  
  264. //循环判断是否在播放页,是则执行下面
  265. let jxVideoData = [
  266. {funcName:"playVideo", node:".player__container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  267. {funcName:"playVideo", node:"#player-container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  268. {funcName:"playVideo", node:".container-player" ,match:/v\.qq\.com\/x\/page/,areaClassName:'mod_episode'},
  269. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/m\/play\?cid/},
  270. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/m\/play\?vid/},
  271. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/play\.html\?cid=/},
  272. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/play\.html\?cid\=/},
  273. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/cover\/.*html/},
  274.  
  275. {funcName:"playVideo", node:"#flashbox",match:/^https:\/\/www\.iqiyi\.com\/[vwa]\_/,areaClassName:'qy-episode-num',name:'iqiyiPc'},
  276. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https:\/\/m.iqiyi\.com\/[vwa]\_/,areaClassName:'m-sliding-list'},
  277. {funcName:"playVideo", node:".intl-video-wrap",match:/^https:\/\/www\.iq\.com\/play\//,areaClassName:'m-sliding-list'},
  278.  
  279. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/alipay_video\/id_/},
  280. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/video\/id_/},
  281. {funcName:"playVideo", node:"#player",match:/v\.youku\.com\/v_show\/id_/},
  282.  
  283. {funcName:"playVideo", node:"#bilibili-player",nodeType:'id',match:/www\.bilibili\.com\/video/,name:'biliPc',areaClassName:'video-episode-card'},
  284. {funcName:"playVideo", node:"#player_module",nodeType:'id',match:/www\.bilibili\.com\/bangumi/,areaClassName:'ep-list-wrapper report-wrap-module'},
  285. {funcName:"playVideo", node:".player-container",nodeType:'class',match:/m\.bilibili\.com\/bangumi/,areaClassName:'ep-list-pre-container no-wrap'},
  286. {funcName:"playVideo", node:".mplayer",nodeType:'class',match:/m\.bilibili\.com\/video\//},
  287.  
  288. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  289. {funcName:"playVideo", node:"#mgtv-player-wrap",nodeType:'id',match:/mgtv\.com\/b|l/,areaClassName:'episode-items clearfix'},
  290. {funcName:"playVideo", node:".x-player",nodeType:'class',match:/tv\.sohu\.com\/v/},
  291. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  292. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com\/album\//},
  293.  
  294. {funcName:"playVideo", node:"#le_playbox",nodeType:'id',match:/le\.com\/ptv\/vplay\//,areaClassName:'juji_grid'},
  295.  
  296. {funcName:"playVideo", node:"#player",nodeType:'id',match:/play\.tudou\.com\/v_show\/id_/},
  297.  
  298. {funcName:"playVideo", node:"#pptv_playpage_box",nodeType:'id',match:/v\.pptv\.com\/show\//},
  299.  
  300. {funcName:"playVideo", node:"#player",nodeType:'id',match:/vip\.1905.com\/play\//},
  301.  
  302. {funcName:"playVideo", node:"#vodPlayer",nodeType:'id',match:/www\.1905.com\/vod\/play\//},
  303. ];
  304.  
  305. //创建logo_icon
  306. createElement('div','zhmIcon');
  307.  
  308. let zhmPlay = document.getElementById('zhmIcon');
  309.  
  310. zhmPlay.innerHTML = playWrapHtml;
  311.  
  312. let jxVideoWeb = jxVideoData.filter(function(item){
  313.  
  314. return location.href.match(item.match);
  315.  
  316. })
  317.  
  318. document.querySelector('#zhmlogo').addEventListener('click',function(){
  319.  
  320. let jxVideoWeb = jxVideoData.filter(function(item){
  321.  
  322. return location.href.match(item.match);
  323.  
  324. })
  325.  
  326. if(jxVideoWeb.length == 0){
  327.  
  328. toast('请在视频播放页点击图标');
  329.  
  330. }else{
  331.  
  332. var {funcName,match:nowMatch,node:nowNode,name:nowName} = jxVideoWeb[0];
  333.  
  334. let playLineDiv = document.querySelector('.zhm_play_video_wrap');
  335.  
  336. let playShow = playLineDiv.style.display;
  337.  
  338. playShow == 'none'? playLineDiv.style.display = 'block':playLineDiv.style.display = 'none';
  339.  
  340. var playLineTd = document.querySelectorAll('.playLineTd');
  341.  
  342. playLineTd.forEach(function(item){
  343.  
  344. item.addEventListener('click',function(){
  345.  
  346. playLineTd.forEach(function(e){
  347.  
  348. e.setAttribute('class','playLineTd zhm_play_video_line_ul_li');
  349. })
  350.  
  351. this.setAttribute('class','playLineTd zhm_play_video_line_ul_li zhm_line_selected');
  352.  
  353. setCookie('playLineAction',this.getAttribute('url'),30);
  354.  
  355. let nowWebNode = document.querySelector(nowNode);
  356.  
  357. if(nowWebNode){
  358.  
  359. nowWebNode.innerHTML = playJxHtml;
  360.  
  361. let playIframe = document.querySelector('#playIframe');
  362.  
  363. playIframe.src= item.getAttribute('url')+location.href;
  364.  
  365. }else{
  366.  
  367. console.log('视频网站结点不存在');
  368. }
  369.  
  370. })
  371.  
  372. })
  373.  
  374. return false;
  375. }
  376.  
  377. })
  378.  
  379. document.addEventListener('click',function(e){
  380.  
  381. let i=0;
  382.  
  383. e.path.forEach(function(item){
  384.  
  385. if(item.className=='iconLogo'){
  386.  
  387. i=1;
  388.  
  389. console.log(i);
  390. }
  391.  
  392. })
  393.  
  394. if(i==0){
  395.  
  396. let isShow = document.querySelector('.zhm_play_video_wrap').style.display;
  397.  
  398. if(isShow == 'block'){
  399.  
  400. document.querySelector('.zhm_play_video_wrap').style.display='none';
  401. }
  402. }
  403. })
  404. }
  405.  
  406. playVideoFunc();
  407.  
  408. }else{
  409. /*--config--*/
  410. var Config ={
  411.  
  412. couponUrl:window.location.href,
  413.  
  414. couponHost:window.location.host,
  415.  
  416. zhmApiUrl:'https://www.eggvod.cn/',
  417.  
  418. webUrl:'http://music.eggvod.cn/',
  419.  
  420. iconVipTop:360,
  421.  
  422. iconVipPosition : 'left',
  423.  
  424. iconVipWidth : 40,
  425.  
  426. jxCodeInfo : {'in':81516699,'code':4},
  427.  
  428. couponTimerNum : 100,//100次等于10秒
  429.  
  430. couponWaitTime : 100,
  431.  
  432. iconWaitTime : 100,
  433.  
  434. selectedLeft:'selected',
  435.  
  436. selectedRight:'',
  437.  
  438. videoPlayLineAdd:GM_getValue('videoPlayLineAdd',0),
  439.  
  440. dyVideoDownload:GM_getValue('dyVideoDownload',22),
  441.  
  442. ksVideoDownload:GM_getValue('ksVideoDownload',22),
  443.  
  444. xiguaVideoDownload:GM_getValue('xiguaVideoDownload',22),
  445.  
  446. biliVideoDownload:GM_getValue('biliVideoDownload',22),
  447.  
  448. youtubeVideoDownload:GM_getValue('youtubeVideoDownload',22),
  449. }
  450.  
  451. var {couponUrl,
  452. couponHost,
  453. zhmApiUrl,
  454. webUrl,
  455. iconVipTop,
  456. iconVipPosition,
  457. iconVipWidth,
  458. jxCodeInfo,
  459. couponTimerNum,
  460. couponWaitTime,
  461. iconWaitTime,
  462. selectedLeft,
  463. selectedRight,
  464. videoPlayLineAdd,
  465. dyVideoDownload,
  466. ksVideoDownload,
  467. xiguaVideoDownload,
  468. biliVideoDownload,
  469. youtubeVideoDownload
  470. } = Config;
  471. /*--lang--*/
  472. var lang = {
  473. set:'设置',
  474. iconPosition:'图标位置',
  475. playVideo:'视频解析',
  476. playMusic:'音乐下载',
  477. zhNice:'知乎增强',
  478. videoDownload:'视频下载',
  479. baiduDownload:'百度下载',
  480. iconHeight:'图标高度',
  481. iconWidth:'图标大小',
  482. iconLine:'水平位置',
  483. iconWaitTime:'等待时间',
  484. iconLeft:'靠左',
  485. iconRight:'靠右',
  486. tipIconHeight:'默认360,建议1~500',
  487. tipIconWidth:'默认40,建议20~50',
  488. tipErrorIconHeight:'<图标位置>中的<图标高度>应为1000以内正整数,建议1~500',
  489. tipErrorIconWidth:'<图标位置>中的<图标大小>应为100以内正整数,建议20~50',
  490. setPlayVideo:'解析设置',
  491. playVideoLineAdd:'添加线路',
  492. tipPlayVideoLineAdd:'请输入线路名称和解析地址,例:"线路六https://jx.zdy.com/?url=",每线路一行。',
  493. zhSet:'知乎设置',
  494. zhVideoClose:'屏蔽视频',
  495. zhVideoDownload:'视频下载',
  496. zhADClose:'屏蔽广告',
  497. zhCloseLeft:'关闭侧边栏',
  498. zhChangeLink:'链接直接跳转',
  499. specialColumn:'标记文章',
  500. videoTitle:'标记视频',
  501. zhKeywordClose:'屏蔽关键词',
  502. tipKeyword:'请输入关键词,用","号隔开',
  503. authorNameClose:'屏蔽用户',
  504. tipAuthorName:'请输入用户名,用","号隔开',
  505. yanxuanClose:'屏蔽盐选',
  506. dyVideoDownload:'抖音下载',
  507. ksVideoDownload:'快手下载',
  508. xiguaVideoDownload:'西瓜下载',
  509. biliVideoDownload:'B站 (bilibili) 下载',
  510. youtubeVideoDownload:'youtube下载',
  511. question:'常见问题',
  512. qqGroup:'交流群',
  513. reward:'打赏',
  514. redReward:'红包',
  515. thank:'感谢',
  516.  
  517. };
  518.  
  519. /*--datas--*/
  520. var datas = {
  521.  
  522. getCoupon:[{isOpen:22,web:[
  523. {funcName:"coupon",name:"taobao",node:".J_LinkAdd",match:/item\.taobao\.com/},
  524. {funcName:"coupon",name:"tmallCaoshi",node:"#J_LinkBuy",match:/^https?:\/\/chaoshi.detail.tmall.com\//},
  525. {funcName:"coupon",name:"tmall",node:".BasicContent--actions--1co8sx8",match:/^https?:\/\/detail\.tmall\.com/},
  526. {funcName:"coupon",name:"tmall",node:"#J_LinkBuy",match:/^https?:\/\/detail\.tmall\.com/},
  527. {funcName:"coupon",name:"tmallOther",node:".tm-msg-box",match:/^https?:\/\/detail\.tmall\.com/},
  528. {funcName:"coupon",name:"tmall",node:"#J_LinkBuy",match:/^https?:\/\/detail\.tmall\.hk/},
  529. {funcName:"coupon",name:"jd",node:"#choose-btns",match:/item\.jd\.com/},
  530. {funcName:"coupon",name:"jd",node:"#choose-btns",match:/\.yiyaojd\.com/},
  531. ]}],
  532. jxVideo:[{isOpen:GM_getValue('movieList','22'),web:[
  533. {funcName:"playVideo",match:/https?:\/\/v\.qq\.com/,name:'qqPC'},
  534. {funcName:"playVideo", match:/https?:\/\/m\.v\.qq\.com/,name:'qqMobile'},
  535.  
  536. {funcName:"playVideo", match:/^https?:\/\/www\.iqiyi\.com/,name:'iqiyiPc'},
  537. {funcName:"playVideo", match:/^https?:\/\/www\.iq\.com/},
  538. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https?:\/\/m.iqiyi\.com/,areaClassName:'m-sliding-list'},
  539.  
  540. {funcName:"playVideo", node:"#player",nodeType:'id',match:/m\.youku\.com\/alipay_video\/id_/},
  541. {funcName:"playVideo", node:"#player",nodeType:'id',match:/m\.youku\.com\/video\/id_/},
  542. {funcName:"playVideo", match:/^https?:\/\/.*youku\.com/},
  543.  
  544. {funcName:"playVideo", match:/^https?:\/\/www\.bilibili\.com/},
  545. {funcName:"playVideo", match:/^https?:\/\/m\.bilibili\.com/},
  546.  
  547. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  548. {funcName:"playVideo", match:/mgtv\.com/,areaClassName:'episode-items clearfix'},
  549. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/.tv\.sohu\.com/},
  550. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  551. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com/},
  552.  
  553. {funcName:"playVideo", match:/tudou\.com/},
  554.  
  555. {funcName:"playVideo",match:/le\.com/},
  556.  
  557. {funcName:"playVideo",match:/pptv\.com/},
  558.  
  559. {funcName:"playVideo",match:/1905\.com/},
  560.  
  561. ]}],
  562. jxMusic:[{isOpen:GM_getValue('musicList','22'),web:[
  563. {funcName:"playMusic",name:'netease',match:/^https?:\/\/music\.163\.com/,tip:'请在音乐单曲页点击图标下载'},
  564.  
  565. {funcName:"playMusic",name:'qq',match:/^https?:\/\/y\.qq\.com/,tip:'请点击播放需要下载的歌曲,在播放页点击图标下载'},
  566.  
  567. {funcName:"playMusic",name:'kugou',match:/kugou\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'},
  568.  
  569. {funcName:"playMusic",name:'kuwo',match:/kuwo\.cn/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'},
  570.  
  571. {funcName:"playMusic",name:'ximalaya',match:/^https?:\/\/www\.ximalaya\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'}
  572. ]}],
  573.  
  574. playLine:[
  575. {"name":"推荐","url":"https://jx.xyflv.com/?url=","mobile":1},
  576. {"name":"B站1","url":"https://okjx.cc/?url=","mobile":1},
  577. {"name":"爱豆","url":"https://jx.aidouer.net/?url=","mobile":1},
  578. {"name":"BL","url":"https://jx.xmflv.com/?url=","mobile":0},
  579. {"name":"冰豆","url":"https://jx.aidouer.net/?url=","mobile":0},
  580. {"name":"百域","url":"https://www.afrp.top/jiexi/?url=","mobile":0},
  581. {"name":"CK","url":"https://jx.bozrc.com:4433/player/?url=","mobile":0},
  582. {"name":"CHok","url":"https://jx.m3u8.tv/jiexi/?url=","mobile":1},
  583. {"name":"ckmov","url":"https://www.ckmov.vip/api.php?url=","mobile":0},
  584. {"name":"H8","url":"https://www.h8jx.com/jiexi.php?url=","mobile":0},
  585. {"name":"JY","url":"https://jx.playerjy.com/?url=","mobile":0},
  586. {"name":"解析","url":"https://ckmov.ccyjjd.com/ckmov/?url=","mobile":0},
  587. {"name":"解析la","url":"https://api.jiexi.la/?url=","mobile":0},
  588. {"name":"老板","url":"https://vip.laobandq.com/jiexi.php?url=","mobile":0},
  589. {"name":"MAO","url":"https://www.mtosz.com/m3u8.php?url=","mobile":0},
  590. {"name":"M3U8","url":"https://jx.m3u8.tv/jiexi/?url=","mobile":0},
  591. {"name":"诺讯","url":"https://www.nxflv.com/?url=","mobile":0},
  592. {"name":"OK","url":"https://okjx.cc/?url=","mobile":1},
  593. {"name":"PM","url":"https://www.playm3u8.cn/jiexi.php?url=","mobile":0},
  594. {"name":"盘古","url":"https://www.pangujiexi.cc/jiexi.php?url=","mobile":0},
  595. {"name":"七哥","url":"https://jx.nnxv.cn/tv.php?url=","mobile":0},
  596. {"name":"RDHK","url":"https://jx.rdhk.net/?v=","mobile":1},
  597. {"name":"人人迷","url":"https://jx.blbo.cc:4433/?url=","mobile":1},
  598. {"name":"思云","url":"https://jx.ap2p.cn/?url=","mobile":0},
  599. {"name":"思古3","url":"https://jsap.attakids.com/?url=","mobile":1},
  600. {"name":"听乐","url":"https://jx.dj6u.com/?url=","mobile":1},
  601. {"name":"维多","url":"https://jx.ivito.cn/?url=","mobile":0},
  602. {"name":"虾米","url":"https://jx.xmflv.com/?url=","mobile":0},
  603. {"name":"云端","url":"https://sb.5gseo.net/?url=","mobile":0},
  604. {"name":"云析","url":"https://jx.yparse.com/index.php?url=","mobile":0},
  605. {"name":"0523","url":"https://go.yh0523.cn/y.cy?url=","mobile":0},
  606. {"name":"17云","url":"https://www.1717yun.com/jx/ty.php?url=","mobile":0},
  607. {"name":"180","url":"https://jx.000180.top/jx/?url=","mobile":0},
  608. {"name":"4K","url":"https://jx.4kdv.com/?url=","mobile":1},
  609. {"name":"8090","url":"https://www.8090g.cn/?url=","mobile":0}
  610. ],
  611.  
  612. zhNice:[{isOpen:GM_getValue('zhihuList','22'),web:[
  613. {funcName:'zhNice',match:/^https?:\/\/[a-z]+\.zhihu\.com/}
  614. ]}],
  615. taobao:[{isOpen:GM_getValue('taobao','22'),web:[
  616. {funcName:'taobaoSearch',match:/^https?:\/\/s\.taobao\.com\/search\?.+/}
  617. ]}],
  618. videoDownload:[{isOpen:GM_getValue('videoDownloadList','22'),web:[
  619. {funcName:'videoDownload',name:'dyVideoDownload',match:/^https?:\/\/www\.douyin\.com\/?.+$/,isWebOpen:dyVideoDownload},
  620. {funcName:'videoDownload',name:'ksVideoDownload',match:/^https?:\/\/www\.kuaishou\.com\/?.+$/,isWebOpen:ksVideoDownload},
  621. //{funcName:'videoDownload',name:'xiguaVideoDownload',match:/^https?:\/\/www\.ixigua\.com\/[0-9]+\?.+$/,isWebOpen:xiguaVideoDownload},
  622. {funcName:'videoDownload',name:'xiguaVideoDownload',match:/^https?:\/\/www\.ixigua\.com\//,isWebOpen:xiguaVideoDownload},
  623. {funcName:'videoDownload',name:'biliVideoDownload',match:/^https?:\/\/www\.bilibili\.com\//,isWebOpen:biliVideoDownload},
  624. {funcName:'videoDownload',name:'youtubeVideoDownload',match:/^https?:\/\/www\.youtube\.com/,isWebOpen:youtubeVideoDownload},
  625. ]}],
  626.  
  627. baidu:[{isOpen:GM_getValue('baiduList','22'),web:[
  628. {funcName:'baidu',match:/https?:\/\/pan\.baidu\.com/}
  629. ]}],
  630.  
  631. keyCode:[
  632. {code:48,isShift:false,value:'0'},
  633. {code:48,isShift:true,value:')'},
  634. {code:49,isShift:false,value:'1'},
  635. {code:49,isShift:true,value:'!'},
  636. {code:50,isShift:false,value:'2'},
  637. {code:50,isShift:true,value:'@'},
  638. {code:51,isShift:false,value:'3'},
  639. {code:51,isShift:true,value:'#'},
  640. {code:52,isShift:false,value:'4'},
  641. {code:52,isShift:true,value:'$'},
  642. {code:53,isShift:false,value:'5'},
  643. {code:53,isShift:true,value:'%'},
  644. {code:54,isShift:false,value:'6'},
  645. {code:54,isShift:true,value:'^'},
  646. {code:55,isShift:false,value:'7'},
  647. {code:55,isShift:true,value:'&'},
  648. {code:56,isShift:false,value:'8'},
  649. {code:56,isShift:true,value:'*'},
  650. {code:57,isShift:false,value:'9'},
  651. {code:57,isShift:true,value:'('},
  652. {code:70,isShift:false,value:'f'},
  653. {code:70,isShift:true,value:'F'},
  654. {code:74,isShift:false,value:'j'},
  655. {code:74,isShift:true,value:'J'},
  656. {code:75,isShift:false,value:'k'},
  657. {code:75,isShift:true,value:'K'},
  658. {code:76,isShift:false,value:'l'},
  659. {code:76,isShift:true,value:'L'},
  660. ],
  661.  
  662. downloadOption:[{name:'直接下载',id:'toDownload'},{name:'复制链接',id:'toCopy'},{name:'打开文件',id:'toLink'}]
  663.  
  664. }
  665.  
  666. var {getCoupon,jxVideo,jxMusic,playLine,zhNice,taobao,videoDownload,keyCode,downloadOption,baidu} = datas;
  667.  
  668. /*--Class--*/
  669. class BaseClass{
  670.  
  671. constructor(){
  672.  
  673. if(GM_getValue('iconPositionSetPage') != 0){
  674.  
  675. iconVipTop = GM_getValue('iconTop') || GM_getValue('iconTop') == 0?GM_getValue('iconTop'):iconVipTop;
  676.  
  677. iconVipPosition = GM_getValue('iconPosition')?GM_getValue('iconPosition'):iconVipPosition;
  678.  
  679. selectedLeft = iconVipPosition=='left'?'selected':'';
  680.  
  681. selectedRight = iconVipPosition=='right'?'selected':'';
  682.  
  683. iconVipWidth = GM_getValue('iconWidth')?GM_getValue('iconWidth'):iconVipWidth;
  684.  
  685. iconWaitTime = GM_getValue('iconWaitTime')?GM_getValue('iconWaitTime')*1000:iconWaitTime;
  686.  
  687. }
  688.  
  689. GM_registerMenuCommand("设置", () => this.menuSet());
  690.  
  691. }
  692.  
  693. menuSet(){
  694.  
  695. var _this = this;
  696.  
  697. let menuSetStyle = `
  698. .zhmMask{
  699. z-index:999999999;
  700. background-color:#000;
  701. position: fixed;top: 0;right: 0;bottom: 0;left: 0;
  702. opacity:0.8;
  703. }
  704. .wrap-box{
  705. z-index:1000000000;
  706. position:fixed;;top: 50%;left: 50%;transform: translate(-50%, -200px);
  707. width: 300px;
  708. color: #555;
  709. background-color: #fff;
  710. border-radius: 5px;
  711. overflow:hidden;
  712. font:16px numFont,PingFangSC-Regular,Tahoma,Microsoft Yahei,sans-serif !important;
  713. font-weight:400 !important;
  714. }
  715. .setWrapHead{
  716. background-color:#f24443;height:40px;color:#fff;text-align:center;line-height:40px;
  717. }
  718. .setWrapLi{
  719. margin:0px;padding:0px;
  720. }
  721. .setWrapLi li{
  722. background-color: #fff;
  723. border-bottom:1px solid #eee;
  724. margin:0px !important;
  725. padding:12px 20px;
  726. display: flex;
  727. justify-content: space-between;align-items: center;
  728. list-style: none;
  729. }
  730.  
  731. .setWrapLiContent{
  732. display: flex;justify-content: space-between;align-items: center;
  733. }
  734. .setWrapSave{
  735. position:absolute;top:-2px;right:10px;font-size:24px;cursor:pointer
  736. }
  737. .iconSetFoot{
  738. position:absolute;bottom:0px;padding:10px 20px;width:100%;
  739. z-index:1000000009;background:#fef9ef;
  740. }
  741. .iconSetFootLi{
  742. margin:0px;padding:0px;
  743. }
  744.  
  745. .iconSetFootLi li{
  746. display: inline-flex;
  747. padding:0px 2px;
  748. justify-content: space-between;align-items: center;
  749. font-size: 12px;
  750. }
  751. .iconSetFootLi li a{
  752. color:#555;
  753. }
  754. .iconSetFootLi a:hover {
  755. color:#fe6d73;
  756. }
  757. .iconSetPage{
  758. z-index:1000000001;
  759. position:absolute;top:0px;left:300px;
  760. background:#fff;
  761. width:300px;
  762. height:100%;
  763. }
  764. .iconSetUlHead{
  765. padding:0px;
  766. margin:0px;
  767. }
  768. .iconSetPageHead{
  769. border-bottom:1px solid #ccc;
  770. height:40px;
  771. line-height:40px;
  772. display: flex;
  773. justify-content: space-between;
  774. align-items: center;
  775. background-color:#fe6d73;
  776. color:#fff;
  777. font-size: 15px;
  778. }
  779. .iconSetPageLi{
  780. margin:0px;padding:0px;
  781. }
  782. .iconSetPageLi li{
  783. list-style: none;
  784. padding:8px 20px;
  785. }
  786. .zhihuSetPage{
  787. z-index:1000000002;position:absolute;top:0px;left:300px;background:#fff;width:300px;height:100%;
  788. }
  789. .iconSetPageInput{
  790. display: flex !important;justify-content: space-between;align-items: center;
  791. }
  792. .zhihuSetPageLi{
  793. margin:0px;padding:0px;
  794. height:300px;
  795. overflow-y: scroll;
  796. }
  797. .zhihuSetPageLi::-webkit-scrollbar {
  798. /*滚动条整体样式*/
  799. width : 2px; /*高宽分别对应横竖滚动条的尺寸*/
  800. height: 1px;
  801. }
  802. .zhihuSetPageLi::-webkit-scrollbar-thumb {
  803. /*滚动条里面小方块*/
  804. border-radius : 2px;
  805. background-color: #fe6d73;
  806. }
  807. .zhihuSetPageLi::-webkit-scrollbar-track {
  808. /*滚动条里面轨道*/
  809. box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2);
  810. background : #ededed;
  811. border-radius: 10px;
  812. }
  813. .zhihuSetPageLi li{
  814. border-bottom:1px solid #eee;padding:12px 20px;display:block;
  815. }
  816. .zhihuSetPageContent{
  817. display: flex !important;justify-content: space-between;align-items: center;
  818. }
  819.  
  820. .circular{
  821. width: 40px;height: 20px;border-radius: 16px;transition: .3s;cursor: pointer;box-shadow: 0 0 3px #999 inset;
  822. }
  823. .round-button{
  824. width: 20px;height: 20px;;border-radius: 50%;box-shadow: 0 1px 5px rgba(0,0,0,.5);transition: .3s;position: relative;
  825. }
  826. .back{
  827. border: solid #FFF; border-width: 0 3px 3px 0; display: inline-block; padding: 3px;transform: rotate(135deg); -webkit-transform: rotate(135deg);margin-left:10px;cursor:pointer;
  828. }
  829. .to-right{
  830. margin-left:20px; display: inline-block; padding: 3px;transform: rotate(-45deg); -webkit-transform: rotate(-45deg);cursor:pointer;
  831.  
  832. }
  833. .iconSetSave{
  834. font-size:24px;cursor:pointer;margin-right:5px;margin-bottom:4px;color:#FFF;
  835. }
  836. .zhm_set_page{
  837. z-index:1000000003;
  838. position:absolute;
  839. top:0px;left:300px;
  840. background:#fff;
  841. width:300px;
  842. height:100%;
  843. }
  844. .zhm_set_page_header{
  845. border-bottom:1px solid #ccc;
  846. height:40px;
  847. line-height:40px;
  848. display: flex;
  849. justify-content: space-between;
  850. align-items: center;
  851. background-color:#fe6d73;
  852. color:#fff;
  853. font-size: 15px;
  854. }
  855. .zhm_set_page_content{
  856. display: flex !important;justify-content: space-between;align-items: center;
  857. }
  858. .zhm_set_page_list{
  859. margin:0px;padding:0px;
  860. }
  861. .zhm_set_page_list li{
  862. /*border-bottom:1px solid #ccc;*/
  863. padding:12px 20px;
  864. display:block;
  865. border-bottom:1px solid #eee;
  866. }
  867. li:last-child{
  868. border-bottom:none;
  869. }
  870. /*-form-*/
  871. :root {
  872. --base-color: #434a56;
  873. --white-color-primary: #f7f8f8;
  874. --white-color-secondary: #fefefe;
  875. --gray-color-primary: #c2c2c2;
  876. --gray-color-secondary: #c2c2c2;
  877. --gray-color-tertiary: #676f79;
  878. --active-color: #227c9d;
  879. --valid-color: #c2c2c2;
  880. --invalid-color: #f72f47;
  881. --invalid-icon: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%20%3Cpath%20d%3D%22M13.41%2012l4.3-4.29a1%201%200%201%200-1.42-1.42L12%2010.59l-4.29-4.3a1%201%200%200%200-1.42%201.42l4.3%204.29-4.3%204.29a1%201%200%200%200%200%201.42%201%201%200%200%200%201.42%200l4.29-4.3%204.29%204.3a1%201%200%200%200%201.42%200%201%201%200%200%200%200-1.42z%22%20fill%3D%22%23f72f47%22%20%2F%3E%3C%2Fsvg%3E");
  882. }
  883. .text-input {
  884. font-size: 16px;
  885. position: relative;
  886. right:0px;
  887. z-index: 0;
  888. }
  889. .text-input__body {
  890. -webkit-appearance: none;
  891. -moz-appearance: none;
  892. appearance: none;
  893. background-color: transparent;
  894. border: 1px solid var(--gray-color-primary);
  895. border-radius: 3px;
  896. height: 1.7em;
  897. line-height: 1.7;
  898. overflow: hidden;
  899. padding: 2px 1em;
  900. text-overflow: ellipsis;
  901. transition: background-color 0.3s;
  902. width:55%;
  903. font-size:14px;
  904. }
  905. .text-input__body:-ms-input-placeholder {
  906. color: var(--gray-color-secondary);
  907. }
  908. .text-input__body::-moz-placeholder {
  909. color: var(--gray-color-secondary);
  910. }
  911. .text-input__body::placeholder {
  912. color: var(--gray-color-secondary);
  913. }
  914. *, ::after, ::before {
  915. box-sizing: initial !important;
  916. }
  917. .text-input__body[data-is-valid] {
  918. padding-right: 1em;
  919. }
  920. .text-input__body[data-is-valid=true] {
  921. border-color: var(--valid-color);
  922. }
  923. .text-input__body[data-is-valid=false] {
  924. border-color: var(--invalid-color);
  925. box-shadow: inset 0 0 0 1px var(--invalid-color);
  926. }
  927. .text-input__body:focus {
  928. border-color: var(--active-color);
  929. box-shadow: inset 0 0 0 1px var(--active-color);
  930. outline: none;
  931. }
  932. .text-input__body:-webkit-autofill {
  933. transition-delay: 9999s;
  934. -webkit-transition-property: background-color;
  935. transition-property: background-color;
  936. }
  937. .text-input__validator {
  938. background-position: right 0.5em center;
  939. background-repeat: no-repeat;
  940. background-size: 1.5em;
  941. display: inline-block;
  942. height: 100%;
  943. left: 0;
  944. position: absolute;
  945. top: 0;
  946. width: 100%;
  947. z-index: -1;
  948. }
  949. .text-input__body[data-is-valid=false] + .text-input__validator {
  950. background-image: var(--invalid-icon);
  951. }
  952. .select-box {
  953. box-sizing: inherit;
  954. font-size: 16px;
  955. position: relative;
  956. transition: background-color 0.5s ease-out;
  957. width:90px;
  958. }
  959. .select-box::after {
  960. border-color: var(--gray-color-secondary) transparent transparent transparent;
  961. border-style: solid;
  962. border-width: 6px 4px 0;
  963. bottom: 0;
  964. content: "";
  965. display: inline-block;
  966. height: 0;
  967. margin: auto 0;
  968. pointer-events: none;
  969. position: absolute;
  970. right: -72px;
  971. top: 0;
  972. width: 0;
  973. z-index: 1;
  974. }
  975. .select-box__body {
  976. box-sizing: inherit;
  977. -webkit-appearance: none;
  978. -moz-appearance: none;
  979. appearance: none;
  980. background-color: transparent;
  981. border: 1px solid var(--gray-color-primary);
  982. border-radius: 3px;
  983. cursor: pointer;
  984. height: 1.7em;
  985. line-height: 1.7;
  986. padding-left: 1em;
  987. padding-right: calc(1em + 16px);
  988. width: 140%;
  989. font-size:14px;
  990. padding-top:2px;
  991. padding-bottom:2px;
  992. }
  993. .select-box__body[data-is-valid=true] {
  994. border-color: var(--valid-color);
  995. box-shadow: inset 0 0 0 1px var(--valid-color);
  996. }
  997. .select-box__body[data-is-valid=false] {
  998. border-color: var(--invalid-color);
  999. box-shadow: inset 0 0 0 1px var(--invalid-color);
  1000. }
  1001. .select-box__body.focus-visible {
  1002. border-color: var(--active-color);
  1003. box-shadow: inset 0 0 0 1px var(--active-color);
  1004. outline: none;
  1005. }
  1006. .select-box__body:-webkit-autofill {
  1007. transition-delay: 9999s;
  1008. -webkit-transition-property: background-color;
  1009. transition-property: background-color;
  1010. }
  1011. .textarea__body {
  1012. -webkit-appearance: none;
  1013. -moz-appearance: none;
  1014. appearance: none;
  1015. background-color: transparent;
  1016. border: 1px solid var(--gray-color-primary);
  1017. border-radius: 0;
  1018. box-sizing: border-box;
  1019. font: inherit;
  1020. left: 0;
  1021. letter-spacing: inherit;
  1022. overflow: hidden;
  1023. padding: 1em;
  1024. position: absolute;
  1025. resize: none;
  1026. top: 0;
  1027. transition: background-color 0.5s ease-out;
  1028. width: 100%;
  1029. }
  1030. .textarea__body:only-child {
  1031. position: relative;
  1032. resize: vertical;
  1033. }
  1034. .textarea__body:focus {
  1035. border-color: var(--active-color);
  1036. box-shadow: inset 0 0 0 1px var(--active-color);
  1037. outline: none;
  1038. }
  1039. .textarea__body[data-is-valid=true] {
  1040. border-color: var(--valid-color);
  1041. box-shadow: inset 0 0 0 1px var(--valid-color);
  1042. }
  1043. .textarea__body[data-is-valid=false] {
  1044. border-color: var(--invalid-color);
  1045. box-shadow: inset 0 0 0 1px var(--invalid-color);
  1046. }
  1047.  
  1048. .textarea ._dummy-box {
  1049. border: 1px solid;
  1050. box-sizing: border-box;
  1051. min-height: 240px;
  1052. overflow: hidden;
  1053. overflow-wrap: break-word;
  1054. padding: 1em;
  1055. visibility: hidden;
  1056. white-space: pre-wrap;
  1057. word-wrap: break-word;
  1058. }
  1059. .toLeftMove{
  1060. nimation:moveToLeft 0.5s infinite;
  1061. -webkit-animation:moveToLeft 0.5s infinite; /*Safari and Chrome*/
  1062. animation-iteration-count:1;
  1063. animation-fill-mode: forwards;
  1064. }
  1065.  
  1066. @keyframes moveToLeft{
  1067. from {left:200px;}
  1068. to {left:0px;}
  1069. }
  1070.  
  1071. @-webkit-keyframes moveToLeft /*Safari and Chrome*/{
  1072. from {left:200px;}
  1073. to {left:0px;}
  1074. }
  1075.  
  1076. .toRightMove{
  1077. nimation:moveToRight 2s infinite;
  1078. -webkit-animation:moveToRight 2s infinite; /*Safari and Chrome*/
  1079. animation-iteration-count:1;
  1080. animation-fill-mode: forwards;
  1081. }
  1082. @keyframes moveToRight{
  1083. from {left:0px;}
  1084. to {left:2000px;}
  1085. }
  1086.  
  1087. @-webkit-keyframes moveToRight /*Safari and Chrome*/{
  1088. from {left:0px;}
  1089. to {left:200px;}
  1090. }
  1091. `;
  1092.  
  1093. domStyle .appendChild(document.createTextNode(menuSetStyle));
  1094.  
  1095. domHead.appendChild(domStyle);
  1096.  
  1097. var setListJson= [
  1098. {'listName':lang.iconPosition,'setListID':'iconPositionSetPage','setPageID':'movieIconSetPage','takePlace':'0px'},
  1099. {'listName':lang.playVideo,'setListID':'movieList','setPageID':'movieVideoSetPage','takePlace':'0px'},
  1100. {'listName':lang.playMusic,'setListID':'musicList','setPageID':'','takePlace':'0px'},
  1101. {'listName':lang.zhNice,'setListID':'zhihuList','setPageID':'zhihuIconSetPage','takePlace':'0px'},
  1102. {'listName':lang.videoDownload,'setListID':'videoDownloadList','setPageID':'videoDownloadSetPage','takePlace':'0px'},
  1103. {'listName':lang.baiduDownload,'setListID':'baiduList','setPageID':'','takePlace':'0px'},
  1104. ];
  1105.  
  1106. var zhihuOptionJson = [
  1107. {'optionName':lang.zhVideoClose,'optionID':'removeVideo','default':'0'},
  1108. {'optionName':lang.zhVideoDownload,'optionID':'downloadVideo','default':'22'},
  1109. {'optionName':lang.zhADClose,'optionID':'removeAD','default':'22'},
  1110. {'optionName':lang.zhCloseLeft,'optionID':'removeRight','default':'0'},
  1111. {'optionName':lang.zhChangeLink,'optionID':'changeLink','default':'22'},
  1112. {'optionName':lang.specialColumn,'optionID':'specialColumn','default':22},
  1113. {'optionName':lang.videoTitle,'optionID':'videoTitle','default':22},
  1114. {'optionName':lang.zhKeywordClose,'optionID':'removeKeyword','default':'0'},
  1115. {'optionName':lang.authorNameClose,'optionID':'removeAuthorName','default':'0'},
  1116. {'optionName':lang.yanxuanClose,'optionID':'removeYanxuan','default':'0'}
  1117. ];
  1118.  
  1119. var playVideoOptionJson = [{'optionName':'添加线路','optionID':'videoPlayLineAdd','default':videoPlayLineAdd}];
  1120.  
  1121. var videoDownloadOptionJson = [
  1122. {'optionName':lang.dyVideoDownload,'optionID':'dyVideoDownload','default':dyVideoDownload},
  1123. {'optionName':lang.ksVideoDownload,'optionID':'ksVideoDownload','default':ksVideoDownload},
  1124. {'optionName':lang.xiguaVideoDownload,'optionID':'xiguaVideoDownload','default':xiguaVideoDownload},
  1125. {'optionName':lang.biliVideoDownload,'optionID':'biliVideoDownload','default':biliVideoDownload},
  1126. {'optionName':lang.youtubeVideoDownload,'optionID':'youtubeVideoDownload','default':youtubeVideoDownload},
  1127. ];
  1128.  
  1129. var setHtml = "<div id='setMask' class='zhmMask'></div>";
  1130.  
  1131. setHtml +="<div class='wrap-box' id='setWrap'>";
  1132.  
  1133. setHtml +="<div class='iconSetPage' id='movieIconSetPage'>";
  1134.  
  1135. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span class='back'></span><span>"+lang.iconPosition+"</span><span class='iconSetSave'>×</span></li></ul>";
  1136.  
  1137. setHtml +="<ul class='iconSetPageLi'>";
  1138.  
  1139. setHtml +="<li>"+lang.iconHeight+":<span class='text-input'><input class='text-input__body' id='iconTop' value='"+iconVipTop+"' placeholder='"+lang.tipIconHeight+"'><span class='text-input__validator'></span></span></li>";
  1140.  
  1141. setHtml += "<li style='display: inline-flex;'><span style='padding-top:4px;'>"+lang.iconLine+":</span><div class='select-box'><select class='select-box__body' id='iconPosition'>";
  1142.  
  1143. setHtml +="<option value='left' "+selectedLeft+">"+lang.iconLeft+"</option><option value='right' "+selectedRight+">"+lang.iconRight+"</option>";
  1144.  
  1145. setHtml +="</select></div></li>"
  1146.  
  1147. setHtml +="<li>"+lang.iconWidth+":<span class='text-input'><input class='text-input__body' id='iconWidth' value='"+iconVipWidth+"' placeholder='"+lang.tipIconWidth+"'><span class='text-input__validator'></span></span></li>";
  1148.  
  1149. setHtml += "<li style='display: inline-flex;'><span style='padding-top:4px;'>"+lang.iconWaitTime+":</span><div class='select-box'><select class='select-box__body' id='iconWaitTime'>";
  1150.  
  1151. for(let i =1;i<=8;i++){
  1152.  
  1153. let iconSelected = GM_getValue('iconWaitTime')==i/2?'selected':'';
  1154.  
  1155. setHtml +="<option value="+i/2+" "+iconSelected+">"+i/2+"秒</option>";
  1156.  
  1157. }
  1158.  
  1159. setHtml +="</select></div></li>"
  1160.  
  1161. setHtml +="</ul></div>";
  1162.  
  1163. setHtml +="<div class='zhm_set_page' id='videoDownloadSetPage'>";
  1164.  
  1165. setHtml +="<ul class='iconSetUlHead'><li class='zhm_set_page_header'><span class='back'></span><span>"+lang.videoDownload+"</span><span class='iconSetSave'>×</li></ul>";
  1166.  
  1167. setHtml +="<ul class='zhm_set_page_list'>";
  1168.  
  1169. for(let i=0;i<videoDownloadOptionJson.length;i++){
  1170.  
  1171. let backColor,switchBackCorlor,display;
  1172.  
  1173. let optionValue = GM_getValue(videoDownloadOptionJson[i].optionID,videoDownloadOptionJson[i].default);
  1174.  
  1175. if(optionValue != '22'){
  1176.  
  1177. backColor = '#fff';
  1178.  
  1179. switchBackCorlor = '#FFF';
  1180.  
  1181. display = 'none';
  1182.  
  1183. }else{
  1184.  
  1185. backColor = '#fe6d73';
  1186.  
  1187. switchBackCorlor = '#FFE5E5';
  1188.  
  1189. display = 'block';
  1190.  
  1191. }
  1192.  
  1193. setHtml +="<li>";
  1194.  
  1195. setHtml +="<div class='zhm_set_page_content'>";
  1196.  
  1197. setHtml += "<span>"+videoDownloadOptionJson[i].optionName+"</span>";
  1198.  
  1199. setHtml +="<div class='circular' style='background-color:"+switchBackCorlor+"' id='"+videoDownloadOptionJson[i].optionID+"'>";
  1200.  
  1201. setHtml +="<div class='round-button' style='background: "+backColor+"; left: "+optionValue+"px;'></div>";
  1202.  
  1203. setHtml += "</div></div>";
  1204.  
  1205. setHtml += "</li>";
  1206. }
  1207.  
  1208. setHtml +="</ul>"
  1209.  
  1210. setHtml +="</div>"
  1211.  
  1212. setHtml +="<div class='zhm_set_page' id='movieVideoSetPage'>";
  1213.  
  1214. setHtml +="<ul class='iconSetUlHead'><li class='zhm_set_page_header'><span class='back'></span><span>"+lang.setPlayVideo+"</span><span class='iconSetSave'>×</li></ul>";
  1215.  
  1216. setHtml +="<ul class='zhm_set_page_list'>";
  1217.  
  1218. for(let i=0;i<playVideoOptionJson.length;i++){
  1219.  
  1220. let backColor,switchBackCorlor,display;
  1221.  
  1222. let optionValue = GM_getValue(playVideoOptionJson[i].optionID,playVideoOptionJson[i].default);
  1223.  
  1224. if(optionValue != '22'){
  1225.  
  1226. backColor = '#fff';
  1227.  
  1228. switchBackCorlor = '#FFF';
  1229.  
  1230. display = 'none';
  1231.  
  1232. }else{
  1233.  
  1234. backColor = '#fe6d73';
  1235.  
  1236. switchBackCorlor = '#FFE5E5';
  1237.  
  1238. display = 'block';
  1239.  
  1240. }
  1241.  
  1242. setHtml +="<li>";
  1243.  
  1244. setHtml +="<div class='zhm_set_page_content'>";
  1245.  
  1246. setHtml += "<span>"+lang.playVideoLineAdd+"</span>";
  1247.  
  1248. setHtml +="<div class='circular' style='background-color:"+switchBackCorlor+"' id='"+playVideoOptionJson[i].optionID+"'>";
  1249.  
  1250. setHtml +="<div class='round-button' style='background: "+backColor+"; left: "+optionValue+"px;'></div>";
  1251.  
  1252. setHtml += "</div></div>";
  1253.  
  1254. setHtml +="<div class='form__textarea'>";
  1255.  
  1256. setHtml +="<div class='textarea js-flexible-textarea' style='margin-top: 10px; display: "+display+"; padding: 5px 0px;' id='videoPlayLineAddTextarea'>";
  1257.  
  1258. setHtml +="<textarea rows='5' class='textarea__body' placeholder='"+lang.tipPlayVideoLineAdd+"' style='width:250px;font-size:14px;padding:4px;resize:none;' id='playVideoLineTextarea'>"+GM_getValue('playVideoLineText','')+"</textarea>";
  1259.  
  1260. setHtml +="</div></div></li>";
  1261. }
  1262.  
  1263. setHtml +="</ul>"
  1264.  
  1265. setHtml +="</div>"
  1266.  
  1267. setHtml +="<div class='zhihuSetPage' id='zhihuIconSetPage'>";
  1268.  
  1269. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span class='back'></span><span>"+lang.zhSet+"</span><span class='iconSetSave'>×</li></ul>";
  1270.  
  1271. setHtml +="<ul class='zhihuSetPageLi'>";
  1272.  
  1273. for(var optionN=0;optionN<zhihuOptionJson.length;optionN++){
  1274.  
  1275. let backColor,switchBackCorlor;
  1276.  
  1277. let optionValue = GM_getValue(zhihuOptionJson[optionN].optionID,zhihuOptionJson[optionN].default);
  1278.  
  1279. if(optionValue != '22'){
  1280.  
  1281. backColor = '#fff';
  1282.  
  1283. switchBackCorlor = '#FFF';
  1284.  
  1285. }else{
  1286.  
  1287. backColor = '#fe6d73';
  1288.  
  1289. switchBackCorlor = '#FFE5E5';
  1290.  
  1291. }
  1292.  
  1293. setHtml +="<li ><div class='zhihuSetPageContent'><span>"+zhihuOptionJson[optionN].optionName+"</span>";
  1294.  
  1295. setHtml +="<div class='circular' style='background-color: "+switchBackCorlor+";' id="+zhihuOptionJson[optionN].optionID+"><div class='round-button' style='background: "+backColor+";left: "+optionValue+"px;'></div></div></div>";
  1296.  
  1297. if(zhihuOptionJson[optionN].optionID == 'removeKeyword'){
  1298.  
  1299. var keywordShow;
  1300.  
  1301. if(GM_getValue('removeKeyword','0') == '22'){
  1302.  
  1303. keywordShow = 'block';
  1304.  
  1305. }else{
  1306. keywordShow = 'none';
  1307. }
  1308.  
  1309. setHtml +="<div style='margin-top:10px;display:"+keywordShow+";padding:5px 0px;' id='zhihuKeyword'><span class='text-input'><input value='"+GM_getValue('inputZhKeyword','')+"' id='inputZhKeyword' class='text-input__body' placeholder='"+lang.tipKeyword+"' style='width:88%'><span></div>";
  1310. }
  1311.  
  1312. if(zhihuOptionJson[optionN].optionID == 'removeAuthorName'){
  1313.  
  1314. var authorNameShow;
  1315.  
  1316. if(GM_getValue('removeAuthorName','0') == '22'){
  1317.  
  1318. authorNameShow = 'block';
  1319.  
  1320. }else{
  1321. authorNameShow = 'none';
  1322. }
  1323.  
  1324. setHtml +="<div style='margin-top:10px;display:"+authorNameShow+";padding:5px 0px;' id='zhihuAuthorName'><span class='text-input'><input value='"+GM_getValue('inputZhAuthorName','')+"' id='inputZhAuthorName' class='text-input__body' placeholder='"+lang.tipAuthorName+"' style='width:88%'><span></div>";
  1325. }
  1326. setHtml +="</li>";
  1327. }
  1328.  
  1329. setHtml +="</ul>"
  1330.  
  1331. setHtml +="</div>";
  1332.  
  1333. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span></span><span>"+lang.set+"</span><span class='iconSetSave'>×</span></li></ul>";
  1334.  
  1335. setHtml +="<ul class='setWrapLi'>";
  1336.  
  1337. for(var setN=0;setN<setListJson.length;setN++){
  1338.  
  1339. var listValue = GM_getValue(setListJson[setN].setListID,'22');
  1340.  
  1341. let backColor,arrowColor,switchBackCorlor;
  1342.  
  1343. if(listValue != 22){
  1344. backColor = '#fff';
  1345. arrowColor= '#EEE';
  1346. switchBackCorlor = '#FFF';
  1347.  
  1348. }else{
  1349. backColor = '#fe6d73';
  1350. arrowColor = '#CCC';
  1351. switchBackCorlor = '#FFE5E5';
  1352. }
  1353.  
  1354. if(setListJson[setN].setPageID == ''){
  1355. arrowColor = '#EEE';
  1356. };
  1357. setHtml +="<li><span>"+setListJson[setN].listName+"</span>";
  1358.  
  1359. setHtml +="<div class='setWrapLiContent'>";
  1360.  
  1361. setHtml +="<div class='circular' id='"+setListJson[setN].setListID+"' style='background-color: "+switchBackCorlor+";'><div class='round-button' style='background: "+backColor+";left: "+listValue+"px'></div></div>";
  1362.  
  1363. setHtml +="<span class='to-right' data='"+setListJson[setN].setPageID+"' takePlace='"+setListJson[setN].takePlace+"' style='border: solid "+arrowColor+"; border-width: 0 3px 3px 0;'></span></div></li>";
  1364. }
  1365.  
  1366. setHtml +="</ul>";
  1367.  
  1368. setHtml +="<div style='height:40px;' id='zhmTakePlace'></div>";
  1369.  
  1370. setHtml +="<div class='iconSetFoot' style=''>";
  1371.  
  1372. setHtml +="<ul class='iconSetFootLi'>";
  1373.  
  1374. setHtml +="<li><a href='https://80note.com/2019/05/782.html' target='_blank'>"+lang.question+"</a></li>・<li><a href='https://www.zuihuimai.net/t/qq.html' target='_blank'>交流群</a></li>・<li><a href='https://cdn.80note.com/ds.jpg' target='_blank'>"+lang.reward+"</a></li>・<li><a href='https://cdn.80note.com/erwwma.png' target='_blank'>"+lang.redReward+"</a></li>・<li><a href='https://80note.com/2022/03/323.html' target='_blank'>"+lang.thank+"</a></li>";
  1375.  
  1376. setHtml +='</ul>';
  1377.  
  1378. setHtml +='</div>';
  1379.  
  1380. setHtml += "</div>";
  1381.  
  1382. if(document.querySelector('#setMask')) return;
  1383.  
  1384. this.createElement('div','zhmMenu');
  1385.  
  1386. let zhmMenu = document.getElementById('zhmMenu');
  1387.  
  1388. zhmMenu.innerHTML = setHtml;
  1389.  
  1390. let timerZhmIcon = setInterval(function(){
  1391.  
  1392. if (document.querySelector('#zhmMenu')){
  1393.  
  1394. clearInterval(timerZhmIcon); // 取消定时器
  1395.  
  1396. let circular = document.querySelectorAll('.circular');
  1397.  
  1398. circular.forEach(function(item){
  1399.  
  1400. item.addEventListener('click', function(_e){
  1401.  
  1402. let buttonStyle = item.children[0].style;
  1403.  
  1404. let left = buttonStyle.left;
  1405.  
  1406. left = parseInt(left);
  1407.  
  1408. let listLeftValue;
  1409.  
  1410. if(left==0){
  1411.  
  1412. buttonStyle.left = '22px';
  1413.  
  1414. buttonStyle.background = '#fe6d73';
  1415.  
  1416. item.style.background='#ffE5E5';
  1417.  
  1418. if(item.nextSibling && item.nextSibling.getAttribute('data')){
  1419.  
  1420. item.nextSibling.setAttribute('style','border: solid #ccc;border-width: 0 3px 3px 0;')
  1421. }
  1422.  
  1423. listLeftValue = 22;
  1424.  
  1425. }else{
  1426.  
  1427. buttonStyle.left = '0px';
  1428.  
  1429. buttonStyle.background = '#fff';
  1430.  
  1431. item.style.background='#fff';
  1432.  
  1433. if(item.nextSibling){
  1434.  
  1435. item.nextSibling.setAttribute('style','border: solid #EEE;border-width: 0 3px 3px 0;')
  1436.  
  1437. }
  1438.  
  1439. listLeftValue = 0;
  1440. }
  1441.  
  1442. let setListID = item.id;
  1443.  
  1444. if(setListID == 'removeKeyword' && listLeftValue==22){
  1445.  
  1446. document.querySelector('#zhihuKeyword').style.display='block';
  1447.  
  1448. //document.querySelector('#zhmTakePlace').style= 'height:220px';
  1449. }
  1450.  
  1451. if(setListID == 'removeKeyword' && listLeftValue==0){
  1452.  
  1453. document.querySelector('#zhihuKeyword').style.display='none';
  1454.  
  1455. //document.querySelector('#zhmTakePlace').style= 'height:180px';
  1456. }
  1457.  
  1458. if(setListID == 'removeAuthorName' && listLeftValue==22){
  1459.  
  1460. document.querySelector('#zhihuAuthorName').style.display='block';
  1461.  
  1462. //document.querySelector('#zhmTakePlace').style= 'height:260px';
  1463. }
  1464.  
  1465. if(setListID == 'removeAuthorName' && listLeftValue==0){
  1466.  
  1467. document.querySelector('#zhihuAuthorName').style.display='none';
  1468.  
  1469. //document.querySelector('#zhmTakePlace').style= 'height:120px';
  1470. }
  1471.  
  1472. if(setListID == 'videoPlayLineAdd' && listLeftValue==22){
  1473.  
  1474. document.querySelector('#videoPlayLineAddTextarea').style.display='block';
  1475. }
  1476.  
  1477. if(setListID == 'videoPlayLineAdd' && listLeftValue==0){
  1478.  
  1479. document.querySelector('#videoPlayLineAddTextarea').style.display='none';
  1480. }
  1481.  
  1482. GM_setValue(setListID,listLeftValue);
  1483.  
  1484. })
  1485.  
  1486. });
  1487.  
  1488. let toRight = document.querySelectorAll('.to-right');
  1489.  
  1490. toRight.forEach(function(item){
  1491.  
  1492. item.addEventListener('click', function(e){
  1493.  
  1494. let left = item.previousSibling.children[0].style.left;
  1495.  
  1496. left = parseInt(left);
  1497.  
  1498. if(left != 22) return;
  1499.  
  1500. let setPageID = item.getAttribute('data');
  1501.  
  1502. let pageId = document.getElementById(setPageID);
  1503.  
  1504. pageId.className='iconSetPage toLeftMove';
  1505.  
  1506. //知乎设置暂位高度
  1507.  
  1508. if(setPageID=='zhihuIconSetPage'){
  1509.  
  1510. document.querySelector('#zhmTakePlace').style= `height:68px`;
  1511.  
  1512. }
  1513. //实时图标高度
  1514. if(setPageID == 'movieIconSetPage'){
  1515.  
  1516. document.querySelector('#iconTop').value=document.querySelector("#zhmlogo").offsetTop;
  1517.  
  1518. }
  1519.  
  1520. })
  1521.  
  1522. })
  1523.  
  1524. let toBack = document.querySelectorAll('.back');
  1525.  
  1526. toBack.forEach(function(item){
  1527.  
  1528. item.addEventListener('click', function(e){
  1529.  
  1530. let parentDom = item.parentNode.parentNode.parentNode;
  1531.  
  1532. parentDom.className='iconSetPage toRightMove';
  1533.  
  1534. document.querySelector('#zhmTakePlace').style='height:40px;'
  1535.  
  1536. })
  1537.  
  1538. })
  1539.  
  1540. let setSave = document.querySelectorAll('.iconSetSave');
  1541.  
  1542. setSave.forEach(function(item){
  1543.  
  1544. item.addEventListener('click',()=>{
  1545.  
  1546. let iconTop = document.getElementById('iconTop').value;
  1547.  
  1548. let iconPosition = document.getElementById('iconPosition').value;
  1549.  
  1550. let iconWidth = document.getElementById('iconWidth').value;
  1551.  
  1552. let iconWaitTime = document.getElementById('iconWaitTime').value;
  1553.  
  1554. let playVideoLineText = document.querySelector('#playVideoLineTextarea').value;
  1555.  
  1556. let playVideoLineLeft = document.querySelector('#videoPlayLineAdd').children[0].style.left;
  1557.  
  1558. let inputZhKeyword = document.getElementById('inputZhKeyword').value;
  1559.  
  1560. let inputAuthorName = document.getElementById('inputZhAuthorName').value;
  1561.  
  1562. if(iconTop != ''){
  1563.  
  1564. if(!(/(^[0-9][0-9]{0,2}$)/.test(iconTop))){
  1565.  
  1566. alert(lang.tipErrorIconHeight);
  1567.  
  1568. return false;
  1569. }
  1570.  
  1571. GM_setValue('iconTop',iconTop);
  1572. }
  1573.  
  1574. if(iconPosition != ''){
  1575.  
  1576. GM_setValue('iconPosition',iconPosition);
  1577. }
  1578.  
  1579. if(iconWaitTime != ''){
  1580.  
  1581. GM_setValue('iconWaitTime',iconWaitTime);
  1582. }
  1583.  
  1584. if(iconWidth !=''){
  1585.  
  1586. if(!(/(^([1-9][0-9]?)$)/.test(iconWidth))){
  1587.  
  1588. alert(lang.tipErrorIconWidth);
  1589.  
  1590. return false;
  1591. }
  1592.  
  1593. GM_setValue('iconWidth',iconWidth);
  1594. }
  1595.  
  1596. if(GM_getValue('videoPlayLineAdd') == 22){
  1597.  
  1598. if(playVideoLineText){
  1599.  
  1600. let lineObj = _this.getLine(playVideoLineText);
  1601.  
  1602. if(lineObj.length>0){
  1603.  
  1604. GM_setValue('playVideoLineText',playVideoLineText);
  1605.  
  1606. }else{
  1607. alert('线路输入不正确');
  1608. return;
  1609. }
  1610.  
  1611. }else{
  1612.  
  1613. GM_setValue('playVideoLineText','');
  1614. }
  1615.  
  1616. }else{
  1617.  
  1618. GM_setValue('playVideoLineText',playVideoLineText);
  1619. }
  1620.  
  1621. if(inputZhKeyword != ''){
  1622.  
  1623. GM_setValue('inputZhKeyword',inputZhKeyword);
  1624.  
  1625. }else{
  1626.  
  1627. if(GM_getValue('inputZhKeyword')){
  1628.  
  1629. GM_deleteValue('inputZhKeyword');
  1630. }
  1631.  
  1632. }
  1633.  
  1634. if(inputAuthorName != ''){
  1635.  
  1636. GM_setValue('inputZhAuthorName',inputAuthorName);
  1637.  
  1638. }else{
  1639.  
  1640. if(GM_getValue('inputZhAuthorName')){
  1641.  
  1642. GM_deleteValue('inputZhAuthorName');
  1643. }
  1644.  
  1645. }
  1646.  
  1647. history.go(0);
  1648. })
  1649. })
  1650.  
  1651. document.getElementById('iconTop').addEventListener('change',function(){
  1652.  
  1653. let iconTop = this.value;
  1654.  
  1655. if(!(/(^[1-9]\d*$)/.test(iconTop))){
  1656.  
  1657. this.setAttribute('data-is-valid','false')
  1658.  
  1659.  
  1660. }else{
  1661.  
  1662. this.setAttribute('data-is-valid','true')
  1663. }
  1664.  
  1665. return false;
  1666.  
  1667. })
  1668.  
  1669. document.getElementById('iconWidth').addEventListener('change',function(){
  1670.  
  1671. let iconWidth = this.value;
  1672.  
  1673. if(!(/(^[1-9]\d*$)/.test(iconWidth))){
  1674.  
  1675. this.setAttribute('data-is-valid','false')
  1676.  
  1677.  
  1678. }else{
  1679.  
  1680. this.setAttribute('data-is-valid','true')
  1681. }
  1682.  
  1683. return false;
  1684.  
  1685. })
  1686. //腾讯视频快捷键冲突
  1687. if(couponUrl.match(/v\.qq\.com\/x\/cover/)){
  1688.  
  1689. let addLineText =document.querySelector('#playVideoLineTextarea');
  1690.  
  1691. addLineText.addEventListener('keydown',function(e){
  1692.  
  1693. let startPos = addLineText.selectionStart;
  1694.  
  1695. let endPos = addLineText.selectionEnd;
  1696.  
  1697. if (startPos === undefined || endPos === undefined) return;
  1698.  
  1699. keyCode.forEach(function(item){
  1700.  
  1701. if(e.keyCode == item.code && e.shiftKey==item.isShift){
  1702.  
  1703. let textValue = addLineText.value;
  1704.  
  1705. let startValue = textValue.substring(0,startPos);
  1706.  
  1707. let endValue = textValue.substring(startPos);
  1708.  
  1709. let allValue = startValue+item.value+endValue;
  1710.  
  1711. addLineText.value=allValue;
  1712.  
  1713. addLineText.selectionStart = startPos+1;
  1714.  
  1715. addLineText.selectionEnd = endPos+1;
  1716.  
  1717. }
  1718. })
  1719.  
  1720. })
  1721. }
  1722. }
  1723.  
  1724. })
  1725.  
  1726. }
  1727.  
  1728. createElement(dom,domId){
  1729.  
  1730. var rootElement = document.body;
  1731.  
  1732. var newElement = document.createElement(dom);
  1733.  
  1734. newElement.id = domId;
  1735.  
  1736. var newElementHtmlContent = document.createTextNode('');
  1737.  
  1738. rootElement.appendChild(newElement);
  1739.  
  1740. newElement.appendChild(newElementHtmlContent);
  1741.  
  1742. }
  1743.  
  1744. request(method,url,data,isCookie=''){
  1745.  
  1746. let request = new XMLHttpRequest();
  1747.  
  1748. return new Promise((resolve,reject)=>{
  1749.  
  1750. request.onreadystatechange=function(){
  1751.  
  1752. if(request.readyState==4){
  1753.  
  1754. if(request.status==200){
  1755.  
  1756. resolve(request.responseText);
  1757.  
  1758. }else{
  1759.  
  1760. reject(request.status);
  1761. }
  1762.  
  1763. }
  1764. }
  1765.  
  1766. request.open(method,url);
  1767. if(isCookie){
  1768. request.withCredentials = true;
  1769. }
  1770. request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  1771. request.send(data);
  1772.  
  1773. })
  1774.  
  1775. }
  1776.  
  1777. setCookie(cname,cvalue,exdays){
  1778.  
  1779. var d = new Date();
  1780.  
  1781. d.setTime(d.getTime()+(exdays*24*60*60*1000));
  1782.  
  1783. var expires = "expires="+d.toGMTString();
  1784.  
  1785. document.cookie = cname+"="+cvalue+"; "+expires;
  1786. }
  1787.  
  1788. getCookie(cname){
  1789. var name = cname + "=";
  1790. var ca = document.cookie.split(';');
  1791. for(var i=0; i<ca.length; i++) {
  1792. var c = ca[i].trim();
  1793. if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
  1794. }
  1795. return "";
  1796. }
  1797.  
  1798. getQueryString(e) {
  1799. var t = new RegExp("(^|&)" + e + "=([^&]*)(&|$)");
  1800. var a = window.location.search.substr(1).match(t);
  1801. if (a != null) return a[2];
  1802. return "";
  1803. }
  1804.  
  1805. getUrlParams(url){
  1806. let reg = /([^?&+#]+)=([^?&+#]+)/g;
  1807. let obj={};
  1808. url.replace(reg,(res,$1,$2)=>{obj[$1]=$2});
  1809. return obj;
  1810. }
  1811.  
  1812. getLine(text){
  1813.  
  1814. let textArr = text.split('\n');
  1815.  
  1816. if(textArr.length > 0){
  1817.  
  1818. let lineObj = [];
  1819.  
  1820. let match = /^(.+)(https?:\/\/.+)$/;
  1821.  
  1822. textArr.forEach(function(item){
  1823.  
  1824. item = item.replace(/\s*,*/g,'');
  1825.  
  1826. if(!item) return true;
  1827.  
  1828. let lineMatch = item.match(match);
  1829.  
  1830. if(lineMatch){
  1831.  
  1832. lineObj.push({'name':lineMatch[1].substring(0,4),'url':lineMatch[2]});
  1833.  
  1834. }else{
  1835.  
  1836. lineObj=[];
  1837.  
  1838. return false;
  1839. }
  1840.  
  1841. })
  1842.  
  1843. return lineObj;
  1844.  
  1845. }
  1846. }
  1847.  
  1848. static getElement(css){
  1849.  
  1850. return new Promise((resolve,reject)=>{
  1851.  
  1852. let num = 0;
  1853.  
  1854. let timer = setInterval(function(){
  1855.  
  1856. num++
  1857.  
  1858. let dom = document.querySelector(css);
  1859.  
  1860. if(dom){
  1861.  
  1862. clearInterval(timer);
  1863.  
  1864. resolve(dom);
  1865.  
  1866. }else{
  1867.  
  1868. if(num==20){clearInterval(timer);resolve(false);}
  1869. }
  1870.  
  1871. },300)
  1872.  
  1873. })
  1874.  
  1875.  
  1876. }
  1877.  
  1878. static toast(msg,duration){
  1879.  
  1880. duration=isNaN(duration)?3000:duration;
  1881.  
  1882. let toastDom = document.createElement('div');
  1883.  
  1884. toastDom.innerHTML = msg;
  1885.  
  1886. //toastDom.style.cssText="width: 60%;min-width: 150px;opacity: 0.7;height: 30px;color: rgb(255, 255, 255);line-height: 30px;text-align: center;border-radius: 5px;position: fixed;top: 40%;left: 20%;z-index: 999999;background: rgb(0, 0, 0);font-size: 12px;";
  1887. toastDom.style.cssText='padding:2px 15px;min-height: 36px;line-height: 36px;text-align: center;transform: translate(-50%);border-radius: 4px;color: rgb(255, 255, 255);position: fixed;top: 50%;left: 50%;z-index: 9999999;background: rgb(0, 0, 0);font-size: 16px;'
  1888.  
  1889. document.body.appendChild(toastDom);
  1890.  
  1891. setTimeout(function() {
  1892.  
  1893. var d = 0.5;
  1894.  
  1895. toastDom.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
  1896.  
  1897. toastDom.style.opacity = '0';
  1898.  
  1899. setTimeout(function() { document.body.removeChild(toastDom) }, d * 1000);
  1900.  
  1901. }, duration);
  1902.  
  1903. }
  1904. //create zhmLogoIcon
  1905. zhmLogo(){
  1906.  
  1907. var _this = this;
  1908. let sortDiv = iconVipPosition=='left'?'row':'row-reverse';
  1909. let playVideoStyle = `
  1910. .zhm_play_vidoe_icon{
  1911. padding-top:2px;
  1912. cursor:pointer;
  1913. z-index:9999999;
  1914. position:fixed;${iconVipPosition}:5px;top:${iconVipTop}px;
  1915. text-align:center;
  1916. overflow:visible;
  1917. display:flex;
  1918. flex-direction:${sortDiv};
  1919. width:auto;
  1920. }
  1921. .zhm_play_video_wrap{
  1922. z-index:9999999;
  1923. overflow: hidden;
  1924. width:300px;
  1925. }
  1926. .zhm_play_video_line{
  1927. width:320px;
  1928. height:316px;
  1929. overflow-y:scroll;
  1930. overflow-x:hidden;
  1931. }
  1932. .zhm_play_vide_line_ul{
  1933. width:300px;
  1934. display: flex;
  1935. justify-content: flex-start;
  1936. flex-flow: row wrap;
  1937. list-style: none;
  1938. padding:0px;
  1939. margin:0px;
  1940. }
  1941. .zhm_play_video_line_ul_li{
  1942. padding:4px 0px;
  1943. margin:2px;
  1944. width:30%;
  1945. color:#FFF;
  1946. text-align:center;
  1947. background-color:#f24443;
  1948. box-shadow:0px 0px 10px #fff;
  1949. font-size:14px;
  1950. }
  1951. .zhm_play_video_line_ul_li:hover{
  1952. color:#260033;
  1953. background-color:#fcc0c0
  1954. }
  1955. .zhm_line_selected{
  1956. color:#260033;
  1957. background-color:#fcc0c0
  1958. }
  1959. .zhm_play_video_jx{
  1960. width:100%;
  1961. height:100%;
  1962. z-index:999999;
  1963. position: absolute;top:0px;padding:0px;
  1964. }
  1965. `;
  1966. domStyle .appendChild(document.createTextNode(playVideoStyle));
  1967. domHead.appendChild(domStyle);
  1968. let playWrapHtml = "<div href='javascript:void(0)' target='_blank' style='' class='playButton zhm_play_vidoe_icon' id='zhmlogo'>";
  1969. playWrapHtml += "<img class='iconLogo' style='width:"+iconVipWidth+"px;height:"+iconVipWidth*1.5+"px' src='data:image/gif;base64,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'>"
  1970. playWrapHtml += "<div>";
  1971. _this.createElement('div','zhmIcon');
  1972. let zhmPlay = document.getElementById('zhmIcon');
  1973. zhmPlay.innerHTML = playWrapHtml;
  1974. }
  1975. //左键按下拖动
  1976. //type:根据不同类型,处理图标单击事务
  1977. zhmLogoDrag(type,web){
  1978. var _this = this;
  1979. var zhmLogoDrag=document.querySelector("#zhmlogo");
  1980. var zhmLogoIcon = document.querySelector(".iconLogo");
  1981. if(!zhmLogoDrag || !zhmLogoIcon)return;
  1982. zhmLogoDrag.onmousedown = function(event){
  1983. if(event.which==3)return false;//屏蔽右键
  1984. let sedownTop = zhmLogoDrag.offsetTop;
  1985. let zhmLogoIconHeight = zhmLogoIcon.offsetHeight;
  1986. let bottomSpace = 10;
  1987. if(event.target.className != 'iconLogo')return;
  1988. //let shiftX = event.clientX - zhmLogoDrag.getBoundingClientRect().left;
  1989. let shiftx = 5;
  1990. let shiftY = event.clientY-zhmLogoDrag.getBoundingClientRect().top;
  1991. zhmLogoDrag.style.position = 'fixed';
  1992. zhmLogoDrag.style.zIndex = 9999999;
  1993. document.body.append(zhmLogoDrag);
  1994. function onMouseMove(event){
  1995. //zhmLogoDrag.style.left = pageX - shiftX + 'px';
  1996. zhmLogoDrag.style.left = '5px';
  1997. let height = window.innerHeight - zhmLogoIconHeight-bottomSpace;
  1998. let y = event.pageY-shiftY;
  1999. y = Math.min(Math.max(0, y), height);
  2000. zhmLogoDrag.style.top = y+'px';
  2001. }
  2002. //在mousemove事件上移动图标
  2003. document.addEventListener('mousemove',onMouseMove);
  2004. //松开事件
  2005. document.onmouseup = function(e){
  2006. GM_setValue('iconTop',zhmLogoDrag.offsetTop);
  2007. document.removeEventListener('mousemove', onMouseMove);
  2008. zhmLogoDrag.onmouseup = null;
  2009. let height = zhmLogoDrag.offsetTop+zhmLogoIconHeight+bottomSpace;
  2010. if(zhmLogoDrag.offsetTop < 0){
  2011. zhmLogoDrag.style.top ='0px';
  2012. }
  2013. if(window.innerHeight < height){
  2014. zhmLogoDrag.style.top =window.innerHeight-zhmLogoIconHeight-bottomSpace+'px';
  2015. }
  2016. //click事件处理
  2017. switch(type){
  2018. case 'video':
  2019. if(zhmLogoDrag.offsetTop==sedownTop && web.length > 0 && zhmLogoDrag.offsetTop>0 && window.innerHeight > height){
  2020. _this.request('get',`${zhmApiUrl}/jxcode.php?in=${jxCodeInfo.in}&code=${jxCodeInfo.code}`).then((result)=>{
  2021. location.href=`${zhmApiUrl}/jxjx.php?lrspm=${result}&zhm_jx=${location.href}`;
  2022. }).cath(err=>{})
  2023. }
  2024. if(zhmLogoDrag.offsetTop==sedownTop && web.length == 0 && zhmLogoDrag.offsetTop>0 && window.innerHeight > height){
  2025. BaseClass.toast('请在视频播放页点击图标');
  2026. }
  2027. break;
  2028. case 'music':
  2029. if(zhmLogoDrag.offsetTop==sedownTop && e.target.className == 'iconLogo'){
  2030. //document.removeEventListener('mousemove', onMouseMove);
  2031. //zhmLogoDrag.onmouseup = null;
  2032. let musicUrlData = [
  2033. {match:/^https?:\/\/music\.163\.com\/#\/(?:song|dj)\?id/},
  2034. {match:/^https?:\/\/y\.music\.163\.com\/m\/(?:song|dj)\?id/},
  2035. {match:/^https?:\/\/music\.163\.com\/(?:song|dj)\?id/},
  2036. {match:/^https?:\/\/y\.qq\.com\/n\/ryqq\/player/},
  2037. {match:/kugou\.com/},
  2038. {match:/kuwo\.cn/},
  2039. {match:/^https?:\/\/www\.ximalaya\.com/},
  2040. ]
  2041. let musicUrl = musicUrlData.filter(function(item){
  2042. return location.href.match(item.match);
  2043. })
  2044. if(musicUrl.length==0){
  2045. BaseClass.toast(web[0].tip);
  2046. return;
  2047. }
  2048. switch(web[0].name){
  2049. case 'netease':
  2050. neteaseFun();
  2051. break;
  2052. case 'qq':
  2053. qqFun();
  2054. break;
  2055. case 'kugou':
  2056. kugouFun();
  2057. break;
  2058. case 'kuwo':
  2059. kuwoFun();
  2060. break;
  2061. case 'ximalaya':
  2062. ximalayaFun();
  2063. break;
  2064. }
  2065. function neteaseFun(){
  2066. let urlParams = _this.getUrlParams(location.href);
  2067. if(urlParams.id == undefined) return;
  2068. let neteaseUrlEncode = encodeURIComponent('https://music.163.com/song?id='+urlParams.id);
  2069. let openUrl = webUrl+'?url='+neteaseUrlEncode;
  2070. window.open(openUrl);
  2071. }
  2072. function qqFun(){
  2073. let qqSongMatch;
  2074. if(document.querySelector(".player_music__info")){
  2075. qqSongMatch = document.querySelector(".player_music__info").childNodes[0].href.match(/songDetail\/(\S*)\?/);
  2076. }else if(document.querySelector("#sim_song_info")){
  2077. qqSongMatch = document.querySelector("#sim_song_info").childNodes[0].href.match(/song\/(\S*).html/);
  2078. }else{
  2079. qqSongMatch = '';
  2080. }
  2081. if(!qqSongMatch[1]){console.log('没有获取到歌曲ID'); return};
  2082. let audioLink = encodeURIComponent(document.querySelector("audio").src);
  2083. let openUrl = webUrl+'?id='+qqSongMatch[1]+'&type=qq&playUrl='+audioLink;
  2084. window.open(openUrl);
  2085. }
  2086. function kugouFun(){
  2087. let audioModule = document.querySelector('#audioModule');
  2088. if(audioModule){
  2089. document.querySelector('#audioModule').style='bottom:0px;';
  2090. document.querySelector('#showHide_playbar').className = 'icon show-playbar-btn';
  2091. }
  2092. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  2093.  
  2094. }
  2095. function kuwoFun(){
  2096. document.querySelector('.playControl').style='bottom:0px';
  2097. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  2098.  
  2099. }
  2100. function ximalayaFun(){
  2101. document.querySelector('.xm-player').style='bottom:0px';
  2102. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  2103. }
  2104. }
  2105. break;
  2106. case 'youtube':
  2107. break;
  2108. }
  2109. };
  2110. };
  2111. zhmLogoDrag.ondragstart = function(){
  2112. return false;
  2113. };
  2114. }
  2115.  
  2116. }
  2117.  
  2118. class CouponClass extends BaseClass{
  2119.  
  2120. constructor(){
  2121.  
  2122. super();
  2123.  
  2124. this.divElement = document.createElement("div");
  2125.  
  2126. this.divElement.id='zhm_div_s';
  2127.  
  2128. }
  2129. taobao(){
  2130.  
  2131. let node = document.querySelector('#J_juValid');
  2132.  
  2133. node.style='overflow:inherit;'
  2134.  
  2135. let className = 'zhm_tab_taobao';
  2136.  
  2137. this.getCouponInfo(node,className);
  2138. }
  2139. tmall(){
  2140.  
  2141. let node = document.querySelector('.Actions--leftButtons--1M3KkF7')?document.querySelector('.Actions--leftButtons--1M3KkF7'):document.querySelector('#J_LinkBuy').parentNode;
  2142.  
  2143. let className = 'zhm_tab_tmall';
  2144.  
  2145. this.getCouponInfo(node,className);
  2146. }
  2147. tmallCaoshi(){
  2148.  
  2149. let node = document.querySelector('#J_LinkBuy').parentNode;
  2150.  
  2151. let className = 'zhm_tab_tmall';
  2152.  
  2153. this.getCouponInfo(node,className);
  2154. }
  2155. tmallOther(){
  2156.  
  2157. let node = document.querySelector('.tm-msg-box');
  2158.  
  2159. let className = 'zhm_tab_tmall';
  2160.  
  2161. this.getCouponInfo(node,className);
  2162. }
  2163. jd(){
  2164. setTimeout(()=>{
  2165.  
  2166. let jdGoodsId = couponUrl.match(/jd\.com\/(\S*).html/);
  2167.  
  2168. let node= document.querySelector('#choose-btns');
  2169.  
  2170. node.before(this.divElement);
  2171.  
  2172. this.request('get',`https://zuihuimai.net/vrhr/index_jd_new.php?goods_id=${jdGoodsId[1]}`).then((result)=>{
  2173.  
  2174. let resp= JSON.parse(result);
  2175.  
  2176. let html='';
  2177.  
  2178. resp.forEach(function(item){
  2179.  
  2180. html +=
  2181. `
  2182. <div class="zhm_coupon" style="margin-left:10px;">
  2183. <div class="zhm_left">
  2184. <div class="zhm_img_icon">
  2185. <img src="data:image/gif;base64,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" > </div>
  2186. <div class="zhm_content">
  2187. <div class="zhm_money" style='margin-top:7px;'>
  2188. <div class="zhm_amount_money">
  2189. <div class="zhm_money_sign" style='margin-top:-10px;'>¥</div>
  2190. <div class="zhm_money_num">${item.discount}</div>
  2191. </div>
  2192. <div class="zhm_condition">满${item.quota}元可用</div>
  2193. </div>
  2194. <div class="zhm_time" style='margin-top:10px;'>
  2195. <div class="zhm_term">有效期</div>
  2196. <div class="zhm_date">${item.endTime}</div>
  2197. </div>
  2198. </div>
  2199. </div>
  2200. <div class="zhm_circle"></div>
  2201. <div class="zhm_link_coupon">
  2202. <a class="zhm_link_text" href="${item.coupon_link}" target='_blank' rel='noopener noreferrer nofollow' style="margin-left:16px;width:34px;">领取</a>
  2203. </div>
  2204. </div>
  2205. `
  2206. });
  2207.  
  2208. document.getElementById('zhm_div_s').innerHTML = html;
  2209.  
  2210. })
  2211.  
  2212.  
  2213.  
  2214. },couponWaitTime)
  2215. }
  2216.  
  2217. getCouponInfo(node,className){
  2218.  
  2219. setTimeout(()=>{
  2220.  
  2221. let goods_id = this.getQueryString('id');
  2222.  
  2223. if(!goods_id){console.log('goods_id');return};
  2224.  
  2225. if(className == 'zhm_tab_taobao'){
  2226.  
  2227. node.querySelector('div:nth-of-type(1)').before(this.divElement);
  2228.  
  2229. }else{
  2230. node.before(this.divElement);
  2231. }
  2232.  
  2233. this.request('get',`https://www.zuihuimai.net/vrhr/index_new.php?goods_id=${goods_id}`).then((result)=>{
  2234.  
  2235. if(result){
  2236.  
  2237. let resp= JSON.parse(result);
  2238.  
  2239. let html =
  2240. `
  2241. <div class="zhm_coupon">
  2242. <div class="zhm_left">
  2243. <div class="zhm_img_icon">
  2244. <img src="data:image/gif;base64,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" > </div>
  2245. <div class="zhm_content">
  2246. <div class="zhm_money">
  2247. <div class="zhm_amount_money">
  2248. <div class="zhm_money_sign">¥</div>
  2249. <div class="zhm_money_num">${resp.youhuiquan}</div>
  2250. </div>
  2251. <div class="zhm_condition">${resp.coupon_info}</div>
  2252. </div>
  2253. <div class="zhm_time">
  2254. <div class="zhm_term">有效期</div>
  2255. <div class="zhm_date">${resp.coupon_end_time}</div>
  2256. </div>
  2257. </div>
  2258. </div>
  2259. <div class="zhm_circle"></div>
  2260. <div class="zhm_link_coupon" style="margin-right:">
  2261. <a class="zhm_link_text" onclick="window.open('${resp.coupon_link}')">领取</a>
  2262. </div>
  2263. </div>
  2264. `;
  2265. document.getElementById('zhm_div_s').innerHTML=html;
  2266.  
  2267. }
  2268.  
  2269. })
  2270.  
  2271. },couponWaitTime);
  2272. }
  2273.  
  2274. }
  2275.  
  2276. class PlayVideoClass extends BaseClass{
  2277. constructor(){
  2278. super();
  2279. }
  2280.  
  2281. }
  2282.  
  2283. class PlayMusicClass extends BaseClass{
  2284. constructor(){
  2285. super();
  2286. }
  2287.  
  2288. xmlyCreateCheckbox(){
  2289.  
  2290. let soundListli = document.querySelectorAll('.sound-list ul li');
  2291.  
  2292. soundListli.forEach(function(item){
  2293.  
  2294. let checkboxed = item.querySelector('input');
  2295.  
  2296. if(checkboxed){
  2297. return;
  2298. }
  2299.  
  2300. let title = item.querySelector('.text');
  2301.  
  2302. if(!title){
  2303. return;
  2304. };
  2305.  
  2306. title.style = "width:360px";
  2307.  
  2308. let src = title.querySelector('a').getAttribute('href');
  2309.  
  2310. let firstDom = item.querySelector('.icon-wrapper');
  2311.  
  2312. let inputDom = firstDom.cloneNode(true);
  2313.  
  2314. inputDom.style= 'min-width: 0px;';
  2315.  
  2316. inputDom.innerHTML = "<input type='checkbox' name='zhmCheckbox' value="+src+" >";
  2317.  
  2318. firstDom.before(inputDom);
  2319.  
  2320. })
  2321.  
  2322. }
  2323. }
  2324.  
  2325. class ZhClass extends BaseClass{
  2326.  
  2327. constructor(){
  2328. super();
  2329. }
  2330. showSpecialColumn(){
  2331.  
  2332. if(location.href == 'https://www.zhihu.com/'){
  2333.  
  2334. let cardRecommend = document.querySelectorAll('.Feed');
  2335.  
  2336. if(cardRecommend.length >0){
  2337.  
  2338. cardRecommend.forEach(function(item){
  2339.  
  2340. if(item.querySelector('.specialColumn')){
  2341. return;
  2342. }
  2343.  
  2344. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  2345.  
  2346. if(!dataZop)return;
  2347.  
  2348. let type = dataZop.card.content.type;
  2349.  
  2350. if(type == 'Post'){
  2351.  
  2352. let title = item.querySelector('div>div>h2>span>a');
  2353.  
  2354. if(!title)return;
  2355.  
  2356. let newElement = document.createElement('button');
  2357.  
  2358. newElement.className = 'specialColumn Button VoteButton VoteButton--up';
  2359.  
  2360. newElement.style = 'line-height:20px;padding:0px 5px;margin-right:5px;border-radius:2px;';
  2361.  
  2362. newElement.innerText = '文章';
  2363.  
  2364. title.before(newElement);
  2365.  
  2366. }
  2367. })
  2368. }
  2369.  
  2370. }
  2371.  
  2372. if(location.href.match(/https?:\/\/www.zhihu.com\/search/)){
  2373. let n=0;
  2374.  
  2375. let timer= setInterval(function(){
  2376.  
  2377. let cardSearch = document.querySelectorAll('.SearchResult-Card');
  2378.  
  2379. if(n++>600){
  2380. clearInterval(timer);
  2381. }
  2382.  
  2383. if(cardSearch.length >0){
  2384.  
  2385. clearInterval(timer);
  2386.  
  2387. cardSearch.forEach(function(item){
  2388.  
  2389. if(item.querySelector('.specialColumn')){
  2390. return;
  2391. }
  2392.  
  2393. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  2394.  
  2395. if(!dataZop)return;
  2396.  
  2397. let type = dataZop.card.content.type;
  2398.  
  2399. if(type == 'Post'){
  2400.  
  2401. let title = item.querySelector('div>div>h2>span>div>a');
  2402.  
  2403. if(!title)return;
  2404.  
  2405. let newElement = document.createElement('button');
  2406.  
  2407. newElement.className = 'specialColumn Button VoteButton VoteButton--up';
  2408.  
  2409. newElement.style = 'line-height:20px;padding:0px 5px;margin-right:5px;';
  2410.  
  2411. newElement.innerText = '文章';
  2412.  
  2413. title.before(newElement);
  2414.  
  2415. }
  2416. })
  2417. }
  2418.  
  2419.  
  2420. })
  2421. }
  2422. }
  2423. showVideoTitle(){
  2424.  
  2425. if(location.href == 'https://www.zhihu.com/'){
  2426.  
  2427. let cardRecommend = document.querySelectorAll('.Feed');
  2428.  
  2429. if(cardRecommend.length >0){
  2430.  
  2431. cardRecommend.forEach(function(item){
  2432.  
  2433. if(item.querySelector('.videoTitle')){
  2434. return;
  2435. }
  2436.  
  2437. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  2438.  
  2439. if(!dataZop)return;
  2440.  
  2441. let hasVideo = dataZop.card.has_video;
  2442.  
  2443. if(hasVideo == true){
  2444.  
  2445. let title;
  2446.  
  2447. if(item.querySelector('div>div>h2>div>a')){
  2448.  
  2449. title = item.querySelector('div>div>h2>div>a');
  2450.  
  2451. }else if(item.querySelector('div>div>h2>span>a')){
  2452.  
  2453. title = item.querySelector('div>div>h2>span>a');
  2454.  
  2455. }else{
  2456.  
  2457. return;
  2458. }
  2459.  
  2460. let newElement = document.createElement('button');
  2461.  
  2462. newElement.className = 'videoTitle';
  2463.  
  2464. newElement.style = 'background: rgba(255, 131, 86, 0.12);color: rgb(255, 73, 12);line-height:20px;padding:1px 6px;margin-right:5px;border-radius:2px;font-size:14px;';
  2465.  
  2466. newElement.innerText = '视频';
  2467.  
  2468. title.before(newElement);
  2469.  
  2470. }
  2471. })
  2472. }
  2473.  
  2474. }
  2475.  
  2476. if(location.href.match(/https?:\/\/www.zhihu.com\/search/)){
  2477.  
  2478. let n=0;
  2479.  
  2480. let timer= setInterval(function(){
  2481.  
  2482. let cardSearch = document.querySelectorAll('.SearchResult-Card');
  2483.  
  2484. if(n++>600){
  2485. clearInterval(timer);
  2486. }
  2487.  
  2488. if(cardSearch.length >0){
  2489.  
  2490. clearInterval(timer);
  2491.  
  2492. cardSearch.forEach(function(item){
  2493.  
  2494. if(item.querySelector('.videoTitle')){
  2495. return;
  2496. }
  2497.  
  2498. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  2499.  
  2500. if(!dataZop)return;
  2501.  
  2502. let type = dataZop.card.content.type;
  2503.  
  2504. if(type == 'Zvideo' ){
  2505.  
  2506. let title = item.querySelector('div>div>h2>span>div>a');
  2507.  
  2508. if(!title)return;
  2509.  
  2510. let newElement = document.createElement('button');
  2511.  
  2512. newElement.className = 'videoTitle';
  2513.  
  2514. newElement.style = 'background: rgba(255, 131, 86, 0.12);color: rgb(255, 73, 12);line-height:20px;padding:1px 6px;margin-right:5px;border-radius:2px;font-size:14px;';
  2515.  
  2516. newElement.innerText = '视频';
  2517.  
  2518. title.before(newElement);
  2519.  
  2520. }
  2521. })
  2522. }
  2523.  
  2524.  
  2525. })
  2526. }
  2527.  
  2528. }
  2529. removeVideo(){
  2530.  
  2531. let card = document.querySelectorAll('.Feed');
  2532.  
  2533. card.forEach(function(item){
  2534.  
  2535. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  2536.  
  2537. let video = dataZop.card.content.video_id;
  2538.  
  2539. if(video){
  2540.  
  2541. item.parentNode.style='display:none;';
  2542.  
  2543. }
  2544. })
  2545.  
  2546. }
  2547. removeAD(){
  2548.  
  2549. let zhHideAD = `.Pc-card,.Pc-word{display:none !important;}.TopstoryItem--advertCard{display:none !important}`;
  2550.  
  2551. domStyle .appendChild(document.createTextNode(zhHideAD));
  2552.  
  2553. domHead.appendChild(domStyle);
  2554.  
  2555. }
  2556. downloadVideo(){
  2557.  
  2558. var _this = this;
  2559.  
  2560. window.addEventListener('click',(e)=>{
  2561.  
  2562. if(e.target.innerText == '下载'){
  2563.  
  2564. let videoDom;
  2565.  
  2566. for(let i=0;i<e.path.length;i++){
  2567.  
  2568. if(e.path[i].className == 'Feed'){
  2569.  
  2570. videoDom = e.path[i];
  2571. break;
  2572. }
  2573.  
  2574. }
  2575.  
  2576. var videoId;
  2577.  
  2578. if(videoDom){
  2579.  
  2580. let videoData = JSON.parse(videoDom.getAttribute('data-za-extra-module'));
  2581.  
  2582. videoId = videoData.card.content.video_id;
  2583.  
  2584. }else{
  2585.  
  2586. let videoUrl = window.location.href;
  2587.  
  2588. let videoObj = videoUrl.split('?');
  2589.  
  2590. videoId = videoObj[0].split('/').pop();
  2591.  
  2592. if(document.querySelector('video')){
  2593.  
  2594. let videoUrl = document.querySelector('video').src;
  2595.  
  2596. GM_download(videoUrl,videoId);
  2597.  
  2598.  
  2599. }
  2600.  
  2601. return;
  2602.  
  2603. }
  2604.  
  2605. if(!videoId){
  2606. console.log('为获取视频id');
  2607. }
  2608.  
  2609. let url = 'https://lens.zhihu.com/api/v4/videos/'+videoId;
  2610.  
  2611. _this.request('get',url).then((result)=>{
  2612.  
  2613. let data = JSON.parse(result);
  2614.  
  2615. if(data.playlist != undefined){
  2616.  
  2617. let play_url = data.playlist.LD.play_url;
  2618.  
  2619. let videoName = videoId+".mp4";
  2620.  
  2621. GM_download(play_url,videoName);
  2622.  
  2623. }else{
  2624.  
  2625. BaseClass.toast('下载失败!');
  2626.  
  2627. }
  2628. });
  2629. }
  2630. })
  2631.  
  2632. document.addEventListener('DOMNodeInserted',(e) => {
  2633.  
  2634. if(!e.relatedNode.querySelector) return;
  2635.  
  2636. var playBar = e.relatedNode.querySelector(':scope > div:last-child > div:first-child > div:nth-of-type(2)');
  2637.  
  2638. if(!playBar || playBar.querySelector('.zhmDownload')) return;
  2639.  
  2640. var playBut = playBar.querySelector(':scope > div:last-child');
  2641.  
  2642. if(!playBut) return;
  2643.  
  2644. var playButLi = playBut.querySelector('div:first-child');
  2645.  
  2646. if(!playButLi) return;
  2647.  
  2648. var downloadBut = playButLi.cloneNode(true);
  2649.  
  2650. downloadBut.className = playButLi.className + ' zhmDownload';
  2651.  
  2652. if(!downloadBut.querySelector('._1tg8oir')) return;
  2653.  
  2654. downloadBut.querySelector('._1tg8oir').innerText='下载';
  2655.  
  2656. playButLi.before(downloadBut);
  2657.  
  2658. })
  2659.  
  2660. setTimeout(function(){
  2661.  
  2662. if(document.querySelector('.zhmDownload'))return;
  2663.  
  2664. let videoDom = document.querySelector('video');
  2665.  
  2666. if(!document.querySelector('video'))return;
  2667.  
  2668. let button = document.querySelectorAll('._e296pg');
  2669.  
  2670. if(button.length<2)return;
  2671.  
  2672. let downloadBut = button[1].cloneNode(true);
  2673.  
  2674. if(!downloadBut.querySelector('._1tg8oir'))return;
  2675.  
  2676. downloadBut.querySelector('._1tg8oir').innerText='下载';
  2677.  
  2678. downloadBut.setAttribute('id','downloadVideo');
  2679.  
  2680. button[1].before(downloadBut);
  2681.  
  2682. console.log(downloadBut);
  2683.  
  2684. document.querySelector('#downloadVideo').addEventListener('click',function(){
  2685.  
  2686. var videoId;
  2687.  
  2688. if(document.querySelector('.ZVideo-player')){
  2689.  
  2690. let zVideo = document.querySelector('.ZVideo');
  2691.  
  2692. let videoData = JSON.parse(zVideo.getAttribute('data-za-extra-module'));
  2693.  
  2694. videoId = videoData.card.content.video_id;
  2695.  
  2696. }else{
  2697.  
  2698. let videoUrl = window.location.href;
  2699.  
  2700. let videoObj = videoUrl.split('?');
  2701.  
  2702. videoId = videoObj[0].split('/').pop();
  2703. }
  2704.  
  2705. if(!videoId){
  2706. console.log('为获取视频id');
  2707. }
  2708.  
  2709. let url = 'https://lens.zhihu.com/api/v4/videos/'+videoId;
  2710.  
  2711. _this.request('get',url).then((result)=>{
  2712.  
  2713. let data = JSON.parse(result);
  2714.  
  2715. if(data.playlist != undefined){
  2716.  
  2717. let play_url = data.playlist.LD.play_url;
  2718.  
  2719. let videoName = videoId+".mp4";
  2720.  
  2721. GM_download(play_url,videoName);
  2722.  
  2723. }else{
  2724.  
  2725. BaseClass.toast('下载失败!');
  2726.  
  2727. }
  2728. });
  2729. })
  2730.  
  2731. },2000);
  2732.  
  2733. }
  2734. removeRight(){
  2735. if(location.href.match(/^https?:\/\/www\.zhihu\.com\/people\/.*/)){
  2736. return false;
  2737. }
  2738.  
  2739. let zhFullScreen = `.GlobalSideBar {display: none !important;}
  2740. .css-1qyytj7{display: none !important;}
  2741. .Question-sideColumn{display:none !important}
  2742. .Topstory-mainColumn{width:100% !important}
  2743. .Question-mainColumn{width:1000px !important}
  2744. .css-cazg48{margin: 0px 16px 0px 0px !important;}
  2745. .QuestionWaiting-mainColumn{width:100% !important;}
  2746. .css-1j5d3ll{padding-left:10px;}
  2747. .css-yhjwoe{justify-content: space-between !important;}
  2748. `;
  2749. domStyle .appendChild(document.createTextNode(zhFullScreen));
  2750.  
  2751. domHead.appendChild(domStyle);
  2752. }
  2753. changeLink(){
  2754.  
  2755. if(couponUrl.indexOf('target') != -1){
  2756.  
  2757. let obj = this.getUrlParams(couponUrl);
  2758.  
  2759. if(obj.target == undefined) return;
  2760.  
  2761. let link = decodeURIComponent(obj.target);
  2762.  
  2763. location.href=link;
  2764. }
  2765. }
  2766. removeKeyword(){
  2767.  
  2768. var GMKeyword = GM_getValue('inputZhKeyword','0');
  2769.  
  2770. if(GMKeyword == '0' || GMKeyword == '') return;
  2771.  
  2772. let keyword = GMKeyword.split(',');
  2773.  
  2774. let content = document.querySelectorAll('.ContentItem');
  2775.  
  2776. keyword.forEach(function(item){
  2777.  
  2778. content.forEach(function(value){
  2779.  
  2780. let dataZop = JSON.parse(value.getAttribute('data-zop'));
  2781.  
  2782. if(dataZop && dataZop.title.indexOf(item) != -1){
  2783.  
  2784. let itemCard = value.parentNode.parentNode.parentNode;
  2785.  
  2786. let itemCardClass= itemCard.className;
  2787.  
  2788. if(itemCardClass.indexOf('TopstoryItem-isRecommend') != -1){
  2789.  
  2790. itemCard.style='display:none';
  2791. }
  2792. }
  2793.  
  2794. })
  2795. })
  2796. }
  2797. removeAuthorName(){
  2798.  
  2799. var GMAuthorName = GM_getValue('inputZhAuthorName','0');
  2800.  
  2801. if(GMAuthorName == '0' || GMAuthorName == '') return;
  2802.  
  2803. let authorName = GMAuthorName.split(',');
  2804.  
  2805. //搜索页
  2806. if(location.href.match(/^https?:\/\/www.zhihu.com\/search/)){
  2807.  
  2808. let n=0;
  2809.  
  2810. let timer = setInterval(function(){
  2811.  
  2812. let userLink = document.querySelectorAll('.Card');
  2813.  
  2814. if(userLink.length > 5){
  2815.  
  2816. clearInterval(timer);
  2817.  
  2818. userLink.forEach(function(item){
  2819.  
  2820. let author = item.querySelector('b');
  2821.  
  2822. if(author){
  2823.  
  2824. if(authorName.indexOf(author.innerText) != -1){
  2825.  
  2826. item.style = 'display:none';
  2827. }
  2828.  
  2829. }
  2830.  
  2831. })
  2832.  
  2833. }else if(n>30){
  2834.  
  2835. clearInterval(timer);
  2836.  
  2837. }else{
  2838.  
  2839. n++;
  2840. }
  2841.  
  2842. },100)
  2843. }
  2844. //回答页
  2845. if(location.href.match(/^https?:\/\/www.zhihu.com\/question\/.*/)){
  2846.  
  2847. let itemDom = document.querySelectorAll('.List-item');
  2848.  
  2849. if(itemDom.length>0){
  2850.  
  2851. itemDom.forEach(function(item){
  2852.  
  2853. let content = item.querySelector('.ContentItem');
  2854.  
  2855. if(content){
  2856.  
  2857. let dataZop = JSON.parse(content.getAttribute('data-zop'));
  2858.  
  2859. if(authorName.indexOf(dataZop.authorName) != -1){
  2860.  
  2861. item.style = 'display:none';
  2862.  
  2863. }
  2864.  
  2865. }
  2866.  
  2867. })
  2868.  
  2869. }
  2870.  
  2871. }
  2872. //等你回答页
  2873. if(location.href == 'https://www.zhihu.com/question/waiting'){
  2874.  
  2875. setTimeout(function(){
  2876.  
  2877. let questionList = document.querySelectorAll('.jsNavigable');
  2878.  
  2879. if(questionList.length>0){
  2880.  
  2881. questionList.forEach(function(item){
  2882.  
  2883. let authorDomText = item.querySelector('.css-tnsaxh').innerText;
  2884.  
  2885. if(authorDomText){
  2886.  
  2887. let author = authorDomText.replace('"','').replace('的提问','').replace(/(^\s+)|(\s+$)/g,'');
  2888.  
  2889. if(author){
  2890.  
  2891. if(authorName.indexOf(author) != -1){
  2892.  
  2893. item.style='display:none;';
  2894.  
  2895. }
  2896.  
  2897. }
  2898.  
  2899. }
  2900.  
  2901. })
  2902.  
  2903. }
  2904.  
  2905. },300)
  2906. }
  2907. //推荐页
  2908. if(location.href == 'https://www.zhihu.com/'){
  2909.  
  2910. let content = document.querySelectorAll('.ContentItem');
  2911.  
  2912. content.forEach(function(value){
  2913.  
  2914. let dataZop = JSON.parse(value.getAttribute('data-zop'));
  2915.  
  2916. if(authorName.indexOf(dataZop.authorName) != -1){
  2917.  
  2918. let itemCard = value.parentNode.parentNode.parentNode;
  2919.  
  2920. if(itemCard){
  2921.  
  2922. itemCard.style='display:none';
  2923. }
  2924. }
  2925.  
  2926. })
  2927.  
  2928. }
  2929.  
  2930. }
  2931.  
  2932. removeYanxuan(){
  2933.  
  2934. //回答页
  2935. if(location.href.match(/^https?:\/\/www.zhihu.com\/question\/.*/)){
  2936.  
  2937. let itemDom = document.querySelectorAll('.List-item');
  2938.  
  2939. if(itemDom.length>0){
  2940.  
  2941. itemDom.forEach(function(item){
  2942.  
  2943. let content = item.querySelector('.KfeCollection-OrdinaryLabel-content');
  2944.  
  2945. if(content && content.innerText.indexOf('盐选') != -1){
  2946.  
  2947. item.style = 'display:none';
  2948.  
  2949. }
  2950. })
  2951.  
  2952. }
  2953.  
  2954. let answerCard = document.querySelector('.AnswerCard');
  2955.  
  2956. if(answerCard){
  2957.  
  2958. let content = answerCard.querySelector('.KfeCollection-OrdinaryLabel-content');
  2959.  
  2960. if(content && content.innerText.indexOf('盐选') != -1){
  2961.  
  2962. answerCard.style = 'display:none';
  2963. }
  2964. }
  2965.  
  2966. }
  2967.  
  2968. //搜索页
  2969. if(location.href.match(/^https?:\/\/www.zhihu.com\/search/)){
  2970.  
  2971. let num = 0;
  2972.  
  2973. let timer = setInterval(function(){
  2974.  
  2975. let cardList = document.querySelectorAll('.Card');
  2976.  
  2977. if(cardList.length > 5){
  2978.  
  2979. clearInterval(timer);
  2980.  
  2981. cardList.forEach(function(item){
  2982.  
  2983. let type = item.querySelector('.KfeCollection-PcCollegeCard-type');
  2984.  
  2985. if(type && type.innerText.indexOf('盐选专栏') != -1){
  2986.  
  2987. item.style = 'display:none';
  2988. }
  2989.  
  2990. let author = item.querySelector('b');
  2991.  
  2992. let authorYanxuan = ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品', '历史环游记'];
  2993.  
  2994. if(author && authorYanxuan.indexOf(author.innerText) != -1){
  2995.  
  2996. item.style = 'display:none';
  2997.  
  2998. }
  2999.  
  3000. })
  3001.  
  3002. }else if(num>30){
  3003.  
  3004. clearInterval(timer);
  3005.  
  3006. }else{
  3007.  
  3008. num++;
  3009. }
  3010.  
  3011. },100)
  3012.  
  3013. }
  3014.  
  3015. //推荐页
  3016. if(location.href == 'https://www.zhihu.com/'){
  3017.  
  3018. let content = document.querySelectorAll('.ContentItem');
  3019.  
  3020. content.forEach(function(item){
  3021.  
  3022. let content = item.querySelector('.KfeCollection-OrdinaryLabel-content');
  3023.  
  3024. if(content && content.innerText.indexOf('盐选') != -1){
  3025.  
  3026. item.style = 'display:none';
  3027.  
  3028. }
  3029.  
  3030. })
  3031. }
  3032. }
  3033.  
  3034. }
  3035.  
  3036. class VideoDownloadClass extends BaseClass{
  3037.  
  3038. constructor(){
  3039.  
  3040. super();
  3041. }
  3042.  
  3043. dyVideoDownload(){
  3044.  
  3045. var _this = this;
  3046.  
  3047. window.addEventListener('load',function(){
  3048.  
  3049. async function getControls(){
  3050.  
  3051. let videoDom = await BaseClass.getElement('.xg-video-container');
  3052.  
  3053. if(!videoDom){
  3054.  
  3055. console.log('没有找到DOM');return;
  3056. }
  3057.  
  3058. let vsNav = document.querySelector('.fuy_wmct:nth-of-type(5)');
  3059.  
  3060. if((vsNav && vsNav.className.indexOf('LXX79le5') != -1) || couponUrl.indexOf('vsdetail') != -1){
  3061. console.log('综艺栏目关闭下载');return;
  3062. }
  3063.  
  3064. _this.createDyVideoDownload();
  3065.  
  3066. let videoPlayDomAll = document.querySelectorAll('video');
  3067.  
  3068. let videoIndex = videoPlayDomAll.length>1?videoPlayDomAll.length-2:videoPlayDomAll.length-1;
  3069.  
  3070. let videoPlayDom = videoPlayDomAll[videoIndex];
  3071.  
  3072. //let videoPlayDom = videoPlayDomAll.length>1?videoPlayDomAll[videoPlayDomAll.length-2]:videoPlayDomAll[videoPlayDomAll.length-1];
  3073.  
  3074. videoPlayDom.addEventListener('ended',function(){ //结束
  3075.  
  3076. console.log("播放结束");
  3077.  
  3078. let autoPlay = document.querySelector('.xg-switch-checked');
  3079.  
  3080. if(autoPlay){
  3081.  
  3082. getControls();
  3083. return;
  3084. }
  3085.  
  3086. }, false);
  3087.  
  3088. document.querySelector('#toDownload').addEventListener('click',function(){
  3089.  
  3090. BaseClass.toast('正在下载请稍侯');
  3091.  
  3092. let info = document.querySelectorAll('.Nu66P_ba');
  3093.  
  3094. let account = info[videoIndex*2].innerText;
  3095.  
  3096. let titleArr = info[videoIndex*2+1].innerText.split('#');
  3097.  
  3098. let title = titleArr[0]?titleArr[0]:titleArr[1];
  3099.  
  3100. GM_download(videoPlayDom.children[0].src,title+account+".mp4");
  3101. })
  3102.  
  3103. document.querySelector('#toCopy').addEventListener('click',function(){
  3104.  
  3105. BaseClass.toast('已复制到剪贴板');
  3106.  
  3107. GM_setClipboard(videoPlayDom.children[0].src);
  3108. })
  3109.  
  3110. document.querySelector('.toLink').addEventListener('click',function(){
  3111.  
  3112. window.open(videoPlayDom.children[0].src);
  3113.  
  3114. })
  3115.  
  3116. return;
  3117. }
  3118.  
  3119. getControls();
  3120.  
  3121. window.addEventListener("wheel",getControls);
  3122.  
  3123. window.addEventListener('keydown',function(e){
  3124.  
  3125. if(e.code=='ArrowDown' || e.code=='ArrowUp'){
  3126.  
  3127. getControls();
  3128. }
  3129.  
  3130. })
  3131.  
  3132. async function insertedDom(){
  3133.  
  3134. let videoDom = await BaseClass.getElement('video');
  3135.  
  3136. if(!videoDom){
  3137.  
  3138. console.log('没有找到DOM');return;
  3139. }
  3140.  
  3141. videoDom.addEventListener('DOMNodeInserted',(e) => {
  3142.  
  3143. getControls();
  3144.  
  3145. })
  3146.  
  3147. }
  3148.  
  3149. insertedDom();
  3150.  
  3151. window.addEventListener('click',getControls);
  3152.  
  3153. })
  3154.  
  3155. }
  3156.  
  3157. createDyVideoDownload(){
  3158.  
  3159. let controlAll = document.querySelectorAll('.xg-right-grid');
  3160.  
  3161. let controls = controlAll.length>1?controlAll[controlAll.length-2]:controlAll[controlAll.length-1];
  3162.  
  3163. let videoDownloadDom = document.querySelector('#zhmDouyinDownload');
  3164.  
  3165. if(videoDownloadDom){
  3166.  
  3167. videoDownloadDom.parentNode.parentNode.removeChild(videoDownloadDom.parentNode);
  3168.  
  3169. //videoDownloadDom.parentNode.parentNode.parentNode.removeChild(videoDownloadDom.parentNode.parentNode)
  3170. }
  3171.  
  3172. let playSeting = controls.querySelector('.xgplayer-playback-setting');
  3173.  
  3174. let downloadDom = playSeting.cloneNode(true);
  3175.  
  3176. downloadDom.style='margin-right:20px;';
  3177.  
  3178. //let downloadText = downloadDom.querySelector('div:first-child > span:first-child');
  3179.  
  3180. let downloadText = downloadDom.querySelector('div:first-child');
  3181.  
  3182. downloadText.innerText='下载';
  3183.  
  3184. downloadText.style = 'font-size:12px;font-weight:400;';
  3185.  
  3186. downloadText.setAttribute('id','zhmDouyinDownload');
  3187.  
  3188. let detail = controls.querySelector('xg-icon:nth-of-type(1)').children[0];
  3189.  
  3190. let linkUrl = detail.getAttribute('href')?detail.getAttribute('href'):location.href;
  3191.  
  3192. if(linkUrl.indexOf('www.douyin.com')==-1){
  3193.  
  3194. linkUrl='//www.douyin.com'+linkUrl;
  3195. }
  3196.  
  3197. downloadText.setAttribute('data-url',linkUrl);
  3198.  
  3199. downloadText.removeAttribute('target');
  3200.  
  3201. downloadText.setAttribute('href','javascript:void(0);');
  3202.  
  3203. downloadDom.onmouseover=function(){
  3204.  
  3205. downloadDom.className='xgplayer-playback-setting slide-show';
  3206.  
  3207. }
  3208.  
  3209. downloadDom.onmouseout=function(){
  3210.  
  3211. downloadDom.className='xgplayer-playback-setting';
  3212. }
  3213.  
  3214. let downloadHtml = '';
  3215.  
  3216. downloadOption.forEach(function(item){
  3217.  
  3218. downloadHtml += `<div class="xgplayer-playratio-item ${item.id}" id="${item.id}">${item.name}</div>`;
  3219.  
  3220. })
  3221.  
  3222. downloadDom.querySelector('.xgplayer-playratio-wrap').innerHTML = downloadHtml;
  3223.  
  3224. downloadDom.querySelector('.xgplayer-slider').style='width:60px important;';
  3225.  
  3226. let autoPlay = document.querySelector('.xgplayer-autoplay-setting');
  3227.  
  3228. autoPlay.after(downloadDom);
  3229.  
  3230. let divDom = document.createElement('div');
  3231.  
  3232. divDom.style="position: absolute;z-index:-999;height:80px;width:40px;margin-top:-80px;"
  3233.  
  3234. downloadDom.appendChild(divDom);
  3235.  
  3236. }
  3237.  
  3238. ksVideoDownload(){
  3239.  
  3240. var _this = this;
  3241.  
  3242. window.addEventListener('load',function(){
  3243.  
  3244. async function getControls(){
  3245.  
  3246. let videoDom = await BaseClass.getElement('.player-video');
  3247.  
  3248. if(!videoDom){
  3249.  
  3250. console.log('没有找到DOM');return;
  3251.  
  3252. }
  3253.  
  3254. if(videoDom.getAttribute('src').match(/^blob/)){
  3255. console.log('blob视频无法下载');return;
  3256. }
  3257.  
  3258. _this.createKsVideoDownload(videoDom);
  3259.  
  3260. videoDom.addEventListener('playing',function(){ //播放中
  3261. console.log("播放中");
  3262. });
  3263.  
  3264. videoDom.addEventListener('ended',function(){ //结束
  3265.  
  3266. console.log("播放结束");
  3267.  
  3268. let autoPlay = document.querySelector('.auto-warpper').getAttribute('autoplay');
  3269.  
  3270. if(autoPlay){
  3271. getControls();
  3272. return;
  3273.  
  3274. }
  3275.  
  3276. }, false);
  3277.  
  3278. document.querySelector('#toDownload').addEventListener('click',function(){
  3279.  
  3280. BaseClass.toast('正在下载请稍侯');
  3281.  
  3282. let playTimeTotal = document.querySelector('.total').innerText;
  3283.  
  3284. let second = playTimeTotal.match(/(.+):(.+)/);
  3285.  
  3286. let secondTotal = second[1]*60+parseInt(second[2]);
  3287.  
  3288. let dataUrl = document.querySelector('#zhmKsDownload').getAttribute('data-url');
  3289.  
  3290. let account = document.querySelector('.profile-user-name-title')?document.querySelector('.profile-user-name-title').innerText:document.querySelector('.feed-author').innerText;
  3291.  
  3292. let title = document.querySelector('.video-info-title')?document.querySelector('.video-info-title').innerText:new Date().getTime();
  3293.  
  3294. let videoFileName = (account && title)?account+'-'+title+'.mp4':new Date().getTime()+'.mp4';
  3295.  
  3296. GM_download(dataUrl,videoFileName);
  3297.  
  3298. })
  3299.  
  3300. document.querySelector('#toCopy').addEventListener('click',function(){
  3301.  
  3302. BaseClass.toast('已复制到剪贴板');
  3303.  
  3304. GM_setClipboard(videoDom.getAttribute('src'));
  3305. })
  3306.  
  3307. document.querySelector('#toLink').addEventListener('click',function(){
  3308.  
  3309. window.open(videoDom.getAttribute('src'));
  3310.  
  3311. })
  3312.  
  3313. }
  3314.  
  3315. getControls();
  3316.  
  3317. document.addEventListener('click',function(e){
  3318.  
  3319. getControls();
  3320.  
  3321. })
  3322.  
  3323. window.addEventListener("wheel",getControls);
  3324.  
  3325. window.addEventListener('keydown',function(e){
  3326.  
  3327. if(e.code=='ArrowDown' || e.code=='ArrowUp'){
  3328.  
  3329. getControls();
  3330. }
  3331.  
  3332.  
  3333. })
  3334.  
  3335. })
  3336.  
  3337.  
  3338. }
  3339.  
  3340. createKsVideoDownload(videoDom){
  3341.  
  3342. let match = /^https?:\/\/www\.kuaishou\.com\/(.+)/;
  3343.  
  3344. let resp = location.href.match(match);
  3345.  
  3346. if(!resp || (resp[1].indexOf('short-video') == -1 && resp[1].indexOf('video') ==-1 && resp[1].indexOf('new-reco') == -1)){
  3347.  
  3348. console.log('当前不是视频播放页');return;
  3349. }
  3350.  
  3351. if(resp[1].indexOf('short-video') != -1){
  3352.  
  3353. let playerArea = document.querySelector('.video-container-player');
  3354.  
  3355. let playerAreaWidth = playerArea.style.width.match(/(.+)px/);
  3356.  
  3357. let playerBarProgress = document.querySelector('.player-bar-progress');
  3358.  
  3359. playerBarProgress.style.width = playerAreaWidth[1]-300+'px';
  3360.  
  3361. let timeTotal = document.querySelector('.total');
  3362.  
  3363. timeTotal.style.right='160px';
  3364. }
  3365.  
  3366. let controls = document.querySelector('.right');
  3367.  
  3368. let videoDownloadDom = document.querySelector('#zhmKsDownload');
  3369.  
  3370. if(videoDownloadDom){
  3371.  
  3372. videoDownloadDom.parentNode.removeChild(videoDownloadDom);
  3373. }
  3374.  
  3375. let detailDom = controls.querySelector('div:nth-of-type(1)');
  3376.  
  3377. let xgIcon = detailDom.cloneNode(true);
  3378.  
  3379. let linkUrl = videoDom.getAttribute('src');
  3380.  
  3381. xgIcon.querySelector('.kwai-player-volume-sound').innerHTML="<div style='cursor:pointer;'>下载</div>";
  3382.  
  3383. let slider = xgIcon.querySelector('.pl-slider');
  3384.  
  3385. slider.style = 'width:49px;padding:10px 5px 20px;';
  3386.  
  3387. let downloadList = '';
  3388.  
  3389. downloadOption.forEach(function(item){
  3390.  
  3391. downloadList += `<div style="margin-top:10px;color:#FFF;cursor:pointer;" id="${item.id}">${item.name}</div>`;
  3392.  
  3393. })
  3394.  
  3395. slider.innerHTML = downloadList;
  3396.  
  3397. xgIcon.setAttribute('data-url',linkUrl);
  3398.  
  3399. xgIcon.setAttribute('id','zhmKsDownload');
  3400.  
  3401. //console.log(xgIcon);
  3402.  
  3403. //xgIcon.innerHTML="<div style='cursor:pointer;'>下载</div>";
  3404.  
  3405. detailDom.before(xgIcon);
  3406.  
  3407. //重构播放操作按钮
  3408.  
  3409. let zhmKsButton = document.querySelector('#zhmKsButton');
  3410.  
  3411. //console.log(zhmKsButton);
  3412.  
  3413. if(zhmKsButton){
  3414.  
  3415. //zhmKsButton.parentNode.removeChild(zhmKsButton);
  3416.  
  3417. return false;
  3418. }
  3419.  
  3420. let buttonIcon = detailDom.cloneNode(true);
  3421. //console.log(buttonIcon);
  3422. buttonIcon.setAttribute('id','zhmKsButton');
  3423.  
  3424. let buttonIconImg = buttonIcon.querySelector('.unmuted-icon');
  3425.  
  3426. if(buttonIconImg){
  3427. buttonIconImg.style = 'background: url(https://s2-10623.kwimgs.com/udata/pkg/cloudcdn/img/player-setting.ad1f5ce8.svg) no-repeat';
  3428. }
  3429. detailDom.after(buttonIcon);
  3430.  
  3431. let plSlider = buttonIcon.querySelector('.pl-slider');
  3432.  
  3433. plSlider.style='width:auto;padding:10px 10px 25px 10px;';
  3434.  
  3435. plSlider.innerHTML = "";
  3436.  
  3437. let buttonFour = controls.querySelector('div:nth-of-type(4)');
  3438.  
  3439. buttonFour.style.margin='0px';
  3440.  
  3441. let autoPlay = document.querySelector('.play-setting-container');
  3442.  
  3443. if(autoPlay){
  3444. autoPlay.style.margin='0px 40px 0px 0px';
  3445. }
  3446.  
  3447. let buttonFive = controls.querySelector('div:nth-of-type(5)');
  3448.  
  3449. if(buttonFive){
  3450.  
  3451. buttonFive.style.margin='15px 0px';
  3452.  
  3453. buttonFive.onmouseover=function(){
  3454.  
  3455. setTimeout(function(){
  3456.  
  3457. let toolTip = document.querySelector('.kwai-player-rotate-tooltip');
  3458.  
  3459. if(toolTip){
  3460.  
  3461. toolTip.parentNode.removeChild(toolTip);
  3462. }
  3463.  
  3464.  
  3465. },30)
  3466.  
  3467. }
  3468.  
  3469. plSlider.appendChild(buttonFive);
  3470. }
  3471. let buttonSix = controls.querySelector('div:nth-of-type(6)');
  3472.  
  3473. if(buttonSix){
  3474.  
  3475. buttonSix.style.margin='15px 0px';
  3476.  
  3477. let toolTip = document.querySelector('.kwai-player-fullscreen-tooltip');
  3478.  
  3479. buttonSix.onmouseover=function(){
  3480.  
  3481. setTimeout(function(){
  3482.  
  3483. let toolTip = document.querySelector('.kwai-player-fullscreen-tooltip');
  3484.  
  3485. if(toolTip){
  3486.  
  3487. toolTip.parentNode.removeChild(toolTip);
  3488.  
  3489. }
  3490.  
  3491. },30)
  3492.  
  3493. }
  3494.  
  3495. plSlider.appendChild(buttonSix);
  3496. }
  3497. plSlider.appendChild(buttonFour);
  3498.  
  3499. }
  3500.  
  3501. xiguaVideoDownload(){
  3502.  
  3503. var _this = this;
  3504.  
  3505. window.addEventListener('load',function(){
  3506.  
  3507. async function getControls(){
  3508.  
  3509. let videoDom = await BaseClass.getElement('video');
  3510.  
  3511. if(!videoDom){
  3512.  
  3513. console.log('没有找到DOM');return;
  3514.  
  3515. }
  3516.  
  3517. _this.createXiguaVideoDownload();
  3518.  
  3519. GM_xmlhttpRequest({
  3520.  
  3521. method: "get",
  3522.  
  3523. url: 'http://47.99.158.118/video-crack/v2/parse?content='+encodeURIComponent(location.href),
  3524.  
  3525. data: '',
  3526.  
  3527. headers: {'Accept': 'text/plain, text/html,application/json'},
  3528.  
  3529. onload: function(res){
  3530.  
  3531. if(res.status==200){
  3532.  
  3533. let resp = JSON.parse(res.responseText)
  3534.  
  3535. let videoSrc = '';
  3536.  
  3537. if(resp.code == 0){
  3538.  
  3539. videoSrc = resp.data.url;
  3540.  
  3541. }
  3542.  
  3543. document.querySelector('#toDownload').addEventListener('click',function(){
  3544.  
  3545. if(!videoSrc){
  3546.  
  3547. BaseClass.toast('该视频无法下载');
  3548.  
  3549. return;
  3550. }
  3551.  
  3552. let videoTitle = document.querySelector('.videoTitle h1').innerText;
  3553.  
  3554. let videoAuthor = document.querySelector('.author__userName').title;
  3555.  
  3556. BaseClass.toast('正在下载请稍侯');
  3557.  
  3558. GM_download(videoSrc,videoTitle+'@'+videoAuthor+'.mp4');
  3559. })
  3560. document.querySelector('#toCopy').addEventListener('click',function(){
  3561.  
  3562. if(!videoSrc){
  3563.  
  3564. BaseClass.toast('该视频不能复制地址');
  3565.  
  3566. return;
  3567. }
  3568.  
  3569. BaseClass.toast('已复制到剪贴板');
  3570.  
  3571. GM_setClipboard(videoSrc);
  3572. })
  3573.  
  3574. document.querySelector('#toLink').addEventListener('click',function(){
  3575.  
  3576. if(!videoSrc){
  3577.  
  3578. BaseClass.toast('该视频不能直接打开');
  3579.  
  3580. return;
  3581. }
  3582.  
  3583. window.open(videoSrc);
  3584.  
  3585. })
  3586.  
  3587. document.addEventListener('click',function(e){
  3588.  
  3589. e.path.forEach(function(item){
  3590.  
  3591. if(item.className == 'xgplayer-control-item control_playnext common-control-item'){
  3592.  
  3593. setTimeout(function(){
  3594.  
  3595. location.reload();
  3596.  
  3597. return;
  3598.  
  3599. },1000)
  3600.  
  3601. };
  3602.  
  3603. })
  3604.  
  3605. var objLink = {};
  3606.  
  3607. e.path.forEach(function(item){
  3608.  
  3609. if(item.href){
  3610.  
  3611. objLink.href = item.href?item.href:'';
  3612.  
  3613. objLink.target = item.target?item.target:'';
  3614.  
  3615. return;
  3616. }
  3617.  
  3618. })
  3619.  
  3620. if(objLink.href && objLink.target != '_blank'){
  3621.  
  3622. location.href = objLink.href;
  3623.  
  3624. return;
  3625. }
  3626. })
  3627.  
  3628. }
  3629.  
  3630. },
  3631. onerror : function(err){
  3632. console.log('error')
  3633. console.log(err)
  3634. }
  3635. });
  3636.  
  3637. document.querySelector('video').addEventListener('ended',function(){ //结束
  3638.  
  3639. console.log("播放结束");
  3640. setTimeout(function(){
  3641.  
  3642. location.reload();
  3643.  
  3644. },5500);
  3645.  
  3646. }, false);
  3647.  
  3648. }
  3649.  
  3650. getControls();
  3651. })
  3652. }
  3653.  
  3654. createXiguaVideoDownload(){
  3655.  
  3656. let rightGrid = document.querySelector('.xg-right-grid');
  3657.  
  3658. let playControl = rightGrid.querySelector('div:nth-of-type(2)');
  3659.  
  3660. let control = playControl.cloneNode(true);
  3661.  
  3662. let entry= control.querySelector('.xgplayer-control-item__entry');
  3663.  
  3664. entry.innerHTML = '<div class="xgpcPlayer_textEntry"><span>下载</span></div>';
  3665.  
  3666. let popover = control.querySelector('.xgplayer-control-item__popover');
  3667.  
  3668. let downloadList = '<ul>';
  3669.  
  3670. downloadOption.forEach(function(item){
  3671.  
  3672. downloadList += `<li tabindex="0" role="menuitemradio" aria-checked="false" id="${item.id}">${item.name}</li>`;
  3673.  
  3674. })
  3675.  
  3676. downloadList += '</ul>';
  3677.  
  3678. popover.innerHTML = downloadList;
  3679.  
  3680. playControl.before(control);
  3681.  
  3682. let divDom = document.createElement('div');
  3683.  
  3684. divDom.style="width: 80px; height: 140px;position:absolute;bottom:40px;left:20px;z-index:-1";
  3685.  
  3686. control.appendChild(divDom);
  3687.  
  3688. control.onmouseover=function(){
  3689.  
  3690. popover.style.display='block';
  3691.  
  3692. }
  3693.  
  3694. control.onmouseout=function(){
  3695.  
  3696. popover.style.display='none';
  3697.  
  3698. }
  3699.  
  3700.  
  3701. }
  3702.  
  3703. biliVideoDownload(){
  3704.  
  3705. var _this = this;
  3706.  
  3707. window.addEventListener('load',function(){
  3708.  
  3709. async function getControls(){
  3710.  
  3711. if(location.href.indexOf('bangumi') != -1){
  3712.  
  3713. let rightControl = await BaseClass.getElement('.squirtle-controller-wrap-right');
  3714.  
  3715. if(!rightControl){
  3716.  
  3717. console.log('没有找到DOM');return;
  3718. }
  3719.  
  3720. _this.createBiliVideoDownload();
  3721.  
  3722. }else{
  3723.  
  3724. let n=0;
  3725.  
  3726. let timer = setInterval(function(){
  3727.  
  3728. let dom = document.querySelector('.bilibili-player-video-btn-quality');
  3729.  
  3730. let domOther = document.querySelector('.bpx-player-ctrl-quality');
  3731.  
  3732. if(dom){
  3733.  
  3734. clearInterval(timer);
  3735.  
  3736. _this.createBiliVideoDownload();
  3737.  
  3738. return;
  3739.  
  3740. }else if(domOther){
  3741.  
  3742. clearInterval(timer);
  3743.  
  3744. _this.createBiliVideoDownloadOther();
  3745.  
  3746. return;
  3747.  
  3748. }else{
  3749. if(n++>30)clearInterval(timer);
  3750. }
  3751.  
  3752. },100)
  3753.  
  3754. return;
  3755.  
  3756. }
  3757.  
  3758. //_this.createBiliVideoDownload();
  3759.  
  3760. let timerZhmIcon = setInterval(function(){
  3761.  
  3762. let videoDom = [{name:'video',type:'dom'},{name:'bwp_video',type:'dom'},{name:'.bilibili-player-video',type:'class'}];
  3763.  
  3764. for(let i = 0;i<videoDom.length;i++){
  3765.  
  3766. let video = videoDom[i].type == 'dom'?document.querySelector(videoDom[i].name):document.querySelector(videoDom[i].name).firstChild;
  3767.  
  3768. if(video){
  3769.  
  3770. clearInterval(timerZhmIcon); //取消定时器
  3771.  
  3772. video.addEventListener('play',function(){
  3773.  
  3774. console.log("播放开始");
  3775.  
  3776. _this.createBiliVideoDownload();
  3777. });
  3778.  
  3779. video.addEventListener('ended',function(){ //结束
  3780.  
  3781. if(location.href.indexOf('bangumi') != -1){
  3782.  
  3783. let biliDownload = document.querySelector('#biliDownload');
  3784.  
  3785. console.log(biliDownload);
  3786.  
  3787. biliDownload.parentNode.removeChild(biliDownload);
  3788.  
  3789. }
  3790. })
  3791.  
  3792. break;
  3793.  
  3794. }
  3795.  
  3796. };
  3797.  
  3798. })
  3799.  
  3800. }
  3801.  
  3802. getControls();
  3803.  
  3804. })
  3805.  
  3806. }
  3807.  
  3808. createBiliVideoDownload(){
  3809.  
  3810. var _this = this;
  3811.  
  3812. async function getControls(){
  3813.  
  3814. let downloadIcon = document.querySelector('#biliDownload');
  3815.  
  3816. if(downloadIcon){
  3817. console.log('下载按钮已存在');return;
  3818. }
  3819.  
  3820. if(location.href.indexOf('bangumi') != -1){
  3821.  
  3822. let quality = await BaseClass.getElement('.squirtle-quality-wrap');
  3823.  
  3824. if(!quality){
  3825.  
  3826. console.log('没有找到DOM');return;
  3827. }
  3828.  
  3829. let control = quality.cloneNode(true);
  3830.  
  3831. control.querySelector('.squirtle-video-quality-text').innerText='下载';
  3832.  
  3833. control.setAttribute('id','biliDownload');
  3834.  
  3835. quality.before(control);
  3836.  
  3837. }else if(location.href.indexOf('video') != -1){
  3838.  
  3839. let autoIconDom = await BaseClass.getElement('.bilibili-player-video-btn-quality');
  3840.  
  3841. if(!autoIconDom){
  3842.  
  3843. console.log('没有找到DOM');return;
  3844.  
  3845. }
  3846.  
  3847. let control = autoIconDom.cloneNode(true);
  3848.  
  3849. control.style='margin-right:20px;';
  3850.  
  3851. control.querySelector('.bui-select-result').innerText='下载';
  3852.  
  3853. control.querySelector('.bui-select-result').setAttribute('id','biliDownload');
  3854.  
  3855. autoIconDom.before(control);
  3856.  
  3857. }else{
  3858.  
  3859. console.log('当前页面不是视频或番剧');return;
  3860.  
  3861. }
  3862.  
  3863. document.querySelector('#biliDownload').addEventListener('click',function(){
  3864.  
  3865. let bvid = '',avid='';
  3866.  
  3867. if(location.href.indexOf('bangumi') != -1){
  3868.  
  3869. bvid = document.querySelector('.av-link').innerText;
  3870.  
  3871. }else if(location.href.indexOf('video') != -1){
  3872.  
  3873. let params = location.href.match(/https:\/\/www.bilibili.com\/video\/(.+)\?/);
  3874.  
  3875. if(params[1].indexOf('av') !=-1){
  3876.  
  3877. avid = params[1].replace('av','');
  3878.  
  3879. }else{
  3880.  
  3881. bvid = params[1].substring(params[1].length-1)=='/'?params[1].substring(0,params[1].length-1):params[1];
  3882. }
  3883.  
  3884. }else{
  3885.  
  3886. BaseClass.toast('当前页面无法下载');return;
  3887. }
  3888.  
  3889. if(!bvid && !avid){
  3890.  
  3891. console.log('未获取bvid或avid');return;
  3892. }
  3893.  
  3894. let url = "https://api.bilibili.com/x/web-interface/view?bvid="+bvid+"&aid="+avid;
  3895.  
  3896. let uri = _this.request('get',url).then((result)=>{
  3897.  
  3898. let resp = JSON.parse(result);
  3899.  
  3900. if(resp.code < 0){
  3901.  
  3902. BaseClass.toast('该视频无法下载');
  3903.  
  3904. console.log('视频信息接口返回数据错误');return;
  3905. }
  3906.  
  3907. //选集cid
  3908.  
  3909. let pageId = _this.getQueryString('p');
  3910.  
  3911. let cid = '';
  3912.  
  3913. if(pageId){
  3914.  
  3915. cid = resp.data.pages[pageId-1].cid;
  3916.  
  3917. }else{
  3918.  
  3919. cid = resp.data.cid;
  3920. }
  3921.  
  3922. console.log(cid);
  3923.  
  3924. let link = 'https://api.bilibili.com/x/player/playurl?avid='+resp.data.aid+'&cid='+cid+'&qn=112';
  3925.  
  3926. let res = _this.request('get',link).then((result)=>{
  3927.  
  3928. let data = JSON.parse(result);
  3929.  
  3930. if(data.code < 0){
  3931. BaseClass.toast('该视频无法下载');
  3932. console.log('视频地址接口返回数据错误');return;
  3933. }
  3934.  
  3935. let downloadUrl = data.data.durl[0].url;
  3936.  
  3937. //GM_download(downloadUrl);
  3938.  
  3939. window.open(downloadUrl);
  3940.  
  3941. })
  3942.  
  3943. })
  3944. })
  3945.  
  3946. }
  3947.  
  3948. getControls();
  3949.  
  3950. }
  3951.  
  3952. createBiliVideoDownloadOther(){
  3953.  
  3954. var _this = this;
  3955.  
  3956. async function getControls(){
  3957.  
  3958. let downloadIcon = document.querySelector('#biliDownload');
  3959.  
  3960. if(downloadIcon){
  3961. console.log('下载按钮已存在');return;
  3962. }
  3963.  
  3964. if(location.href.indexOf('bangumi') != -1){
  3965.  
  3966. let quality = await BaseClass.getElement('.squirtle-quality-wrap');
  3967.  
  3968. if(!quality){
  3969.  
  3970. console.log('没有找到DOM');return;
  3971. }
  3972.  
  3973. let control = quality.cloneNode(true);
  3974.  
  3975. console.log(control.querySelector('.squirtle-video-quality-text'));
  3976.  
  3977. control.querySelector('.squirtle-video-quality-text').innerText='下载';
  3978.  
  3979. control.setAttribute('id','biliDownload');
  3980.  
  3981. quality.before(control);
  3982.  
  3983. }else if(location.href.indexOf('video') != -1){
  3984.  
  3985. let autoIconDom = await BaseClass.getElement('.bpx-player-ctrl-quality');
  3986.  
  3987. if(!autoIconDom){
  3988.  
  3989. console.log('没有找到DOM');return;
  3990.  
  3991. }
  3992.  
  3993. let control = autoIconDom.cloneNode(true);
  3994.  
  3995. control.style='margin-right:20px;';
  3996.  
  3997. control.querySelector('.bpx-player-ctrl-quality-result').innerText='下载';
  3998.  
  3999. control.querySelector('.bpx-player-ctrl-quality-menu').setAttribute('id','biliDownload');
  4000.  
  4001. let menuItems = control.querySelectorAll('.bpx-player-ctrl-quality-menu-item');
  4002.  
  4003. menuItems.forEach(function(item){
  4004.  
  4005. let dataValue = item.getAttribute('data-Value');
  4006.  
  4007. if(dataValue != 16 && dataValue != 80){
  4008.  
  4009. item.parentNode.removeChild(item);
  4010. }
  4011.  
  4012. });
  4013.  
  4014. autoIconDom.before(control);
  4015.  
  4016. control.onmouseover=()=>{
  4017.  
  4018. control.querySelector('.bpx-player-ctrl-quality-menu').style.display='block';
  4019.  
  4020. }
  4021.  
  4022. control.onmouseout=()=>{
  4023.  
  4024. control.querySelector('.bpx-player-ctrl-quality-menu').style.display='none';
  4025.  
  4026. }
  4027.  
  4028. }else{
  4029.  
  4030. console.log('当前页面不是视频或番剧');return;
  4031.  
  4032. }
  4033.  
  4034. document.querySelector('#biliDownload').addEventListener('click',function(e){
  4035.  
  4036. let biliDataValue = e.target.getAttribute('data-Value')?e.target.getAttribute('data-Value'):'';
  4037.  
  4038. if(!biliDataValue)return;
  4039.  
  4040. let bvid = '',avid='';
  4041.  
  4042. if(location.href.indexOf('bangumi') != -1){
  4043.  
  4044. bvid = document.querySelector('.av-link').innerText;
  4045.  
  4046. }else if(location.href.indexOf('video') != -1){
  4047.  
  4048. let nowUrl = location.href.split('?');
  4049.  
  4050. let params = nowUrl[0].match(/https:\/\/www.bilibili.com\/video\/(.+)/);
  4051.  
  4052. if(params[1].indexOf('av') !=-1){
  4053.  
  4054. avid = params[1].replace('av','');
  4055.  
  4056. }else{
  4057.  
  4058. bvid = params[1].substring(params[1].length-1)=='/'?params[1].substring(0,params[1].length-1):params[1];
  4059. }
  4060.  
  4061. }else{
  4062.  
  4063. BaseClass.toast('当前页面无法下载');return;
  4064. }
  4065.  
  4066. if(!bvid && !avid){
  4067.  
  4068. console.log('未获取bvid或avid');return;
  4069. }
  4070.  
  4071. let url = "https://api.bilibili.com/x/web-interface/view?bvid="+bvid+"&aid="+avid;
  4072.  
  4073. let uri = _this.request('get',url).then((result)=>{
  4074.  
  4075. let resp = JSON.parse(result);
  4076.  
  4077. if(resp.code < 0){
  4078.  
  4079. BaseClass.toast('该视频无法下载');
  4080.  
  4081. console.log('视频信息接口返回数据错误');return;
  4082. }
  4083.  
  4084. //选集cid
  4085.  
  4086. let pageId = _this.getQueryString('p');
  4087.  
  4088. let cid = '';
  4089.  
  4090. if(pageId){
  4091.  
  4092. cid = resp.data.pages[pageId-1].cid;
  4093.  
  4094. }else{
  4095.  
  4096. cid = resp.data.cid;
  4097. }
  4098.  
  4099. let link = 'https://api.bilibili.com/x/player/playurl?avid='+resp.data.aid+'&cid='+cid+'&qn='+biliDataValue;
  4100.  
  4101. let res = _this.request('get',link,'',true).then((result)=>{
  4102.  
  4103. let data = JSON.parse(result);
  4104.  
  4105. if(data.code < 0){
  4106. BaseClass.toast('该视频无法下载');
  4107. console.log('视频地址接口返回数据错误');return;
  4108. }
  4109.  
  4110. let downloadUrl = data.data.durl[0].url;
  4111.  
  4112. //GM_download(downloadUrl);
  4113.  
  4114. window.open(downloadUrl);
  4115.  
  4116. })
  4117.  
  4118. })
  4119. })
  4120.  
  4121. }
  4122.  
  4123. getControls();
  4124.  
  4125. }
  4126.  
  4127. youtubeVideoDownload(){
  4128.  
  4129. var _this = this;
  4130.  
  4131. let timer = setInterval(function(){
  4132.  
  4133. let url = location.href.match(/^https?:\/\/www\.youtube\.com\/(watch\?v=.+|shorts\/.+)/);
  4134.  
  4135. if(url){
  4136.  
  4137. let youtubeIcon = document.querySelector('#zhmlogo');
  4138.  
  4139. if(youtubeIcon){
  4140. youtubeIcon.style.opacity=1;
  4141. return;
  4142.  
  4143. }
  4144.  
  4145. _this.zhmLogo();
  4146.  
  4147. let playWrapHtml = "<div class='zhm_play_video_line'>";
  4148.  
  4149. playWrapHtml +="<ul class='zhm_play_vide_line_ul'>";
  4150.  
  4151. let playLine = [
  4152. {name:'下载线路1',url:'https://zh.savefrom.net/176/#url='},
  4153. {name:'下载线路2',url:'https://mydowndown.com/y2#'},
  4154. {name:'下载线路3',url:'https://www.ytdownfk.com/search?url='},
  4155. {name:'下载线路4',url:'https://yout.com/video/?url='}
  4156. ];
  4157.  
  4158. playLine.forEach(function(item){
  4159.  
  4160. playWrapHtml +=`<li class='playLineTd zhm_play_video_line_ul_li' url='${item.url}' >${item.name}</li>`;
  4161.  
  4162. })
  4163.  
  4164. playWrapHtml +="</ul></div>";
  4165.  
  4166. let zhmPlay = document.getElementById('zhmlogo');
  4167.  
  4168. let playLineDom = document.createElement('div');
  4169.  
  4170. playLineDom.className = 'playLineDiv zhm_play_video_wrap';
  4171.  
  4172. playLineDom.style.display = 'none';
  4173.  
  4174. playLineDom.innerHTML = playWrapHtml;
  4175.  
  4176. zhmPlay.appendChild(playLineDom);
  4177.  
  4178. let playLineTd = document.querySelectorAll('.playLineTd');
  4179.  
  4180. playLineTd.forEach(function(item){
  4181.  
  4182. item.addEventListener('click',function(){
  4183.  
  4184. window.open(item.getAttribute('url')+location.href);
  4185.  
  4186. })
  4187.  
  4188. })
  4189.  
  4190. document.querySelector('.playButton').onmouseover=()=>{
  4191.  
  4192. document.querySelector(".playLineDiv").style.display='block';
  4193.  
  4194. }
  4195.  
  4196. document.querySelector('.playButton').onmouseout=()=>{
  4197.  
  4198. document.querySelector(".playLineDiv").style.display='none';
  4199.  
  4200. }
  4201.  
  4202. _this.zhmLogoDrag('youtube','');
  4203.  
  4204. }else{
  4205.  
  4206. let zhmIcon = document.querySelector('#zhmIcon');
  4207.  
  4208. if(zhmIcon){
  4209.  
  4210. zhmIcon.parentNode.removeChild(zhmIcon);
  4211. }
  4212.  
  4213.  
  4214. let zhmlogo = document.querySelector('#zhmlogo');
  4215.  
  4216. if(zhmlogo){
  4217.  
  4218. //zhmlogo.parentNode.removeChild(zhmlogo);
  4219.  
  4220. zhmlogo.style.opacity=0;
  4221. }
  4222.  
  4223. }
  4224.  
  4225. },500)
  4226.  
  4227. }
  4228. }
  4229.  
  4230. var allWeb = [...getCoupon,...jxVideo,...jxMusic,...zhNice,...taobao,...videoDownload,...baidu];
  4231.  
  4232. var nowWeb=[];
  4233.  
  4234. allWeb.forEach(function(item){
  4235.  
  4236. if(item.isOpen == 0) return true;
  4237.  
  4238. item.web.forEach(function(val){
  4239.  
  4240. let result = location.href.match(val.match);
  4241.  
  4242. if(result){
  4243.  
  4244. nowWeb.push(val);
  4245.  
  4246. }
  4247. })
  4248.  
  4249. })
  4250.  
  4251. if(nowWeb.length==0){
  4252.  
  4253. let baseClass = new BaseClass();
  4254.  
  4255. console.log('没有匹配该网站或该模块已关闭');return;
  4256. }
  4257.  
  4258. nowWeb.forEach(function(item){
  4259.  
  4260. switch(item.funcName){
  4261. case 'coupon':
  4262.  
  4263. couponFunc(item);
  4264. break;
  4265. case 'playVideo':
  4266. playVideoFunc();
  4267. break;
  4268. case 'playMusic':
  4269. playMusicFunc(item);
  4270. break;
  4271. case 'zhNice':
  4272. zhNiceFunc();
  4273. break;
  4274. case 'baidu':
  4275. var baseClass = new BaseClass;
  4276. baiduFunc();
  4277. break;
  4278. case 'videoDownload':
  4279.  
  4280. var videoDownloadClass = new VideoDownloadClass();
  4281.  
  4282. var {funcName,match:nowMatch,node:nowNode,name:nowName} = item;
  4283.  
  4284. if(item.isWebOpen == 0){
  4285.  
  4286. console.log(item.name+'已关闭');return;
  4287.  
  4288. }else{
  4289.  
  4290. videoDownloadClass[nowName]();
  4291. }
  4292.  
  4293. break;
  4294. case 'taobaoSearch':
  4295. taobaoSearchFunc(item)
  4296. break;
  4297.  
  4298. }
  4299.  
  4300. })
  4301.  
  4302. function couponFunc(item){
  4303.  
  4304. var couponClass = new CouponClass();
  4305.  
  4306. var {funcName,match:nowMatch,node:nowNode,name:nowName} = item;
  4307.  
  4308. var couponStyle =`
  4309. html{
  4310. --right:100%;
  4311. --left:100%;
  4312. }
  4313. .zhm_coupon{
  4314. width:fit-content;
  4315. display: flex;
  4316. flex-direction:row;
  4317. justify-content: space-between;
  4318. align-items:flex-start;
  4319. font-size:14px;
  4320. position: relative;
  4321. margin-bottom:15px;
  4322. }
  4323. .zhm_left{
  4324. display: flex;
  4325. flex-direction:row;
  4326. justify-content:flex-start;
  4327. align-items: center;
  4328. font-size:14px;
  4329. background: radial-gradient(circle at right top, transparent 8px,#fff 0) top left /var(--right) 51% no-repeat,
  4330. radial-gradient(circle at right bottom, transparent 8px, #fff 0) bottom left /var(--right) 51% no-repeat;
  4331. filter: drop-shadow(2px 2px 3px #888);
  4332. height:84px;
  4333. width:100%;
  4334. }
  4335. .zhm_img_icon{
  4336. padding:4px 0px 0px 5px;
  4337. margin-right:5px;
  4338. }
  4339. .zhm_img_icon img{
  4340. width:47px;
  4341. }
  4342. .zhm_content{
  4343. display: flex;
  4344. flex-direction:column;
  4345. margin-right: 18px;
  4346. }
  4347. .zhm_money{
  4348. display: flex;
  4349. flex-direction:row;
  4350. justify-content: flex-start;
  4351. align-items: center;
  4352. }
  4353. .zhm_amount_money{
  4354. display: flex;
  4355. align-items: flex-start;
  4356. }
  4357. .zhm_money_sign{
  4358. color:#f23030;
  4359. font-size: 20px;
  4360. font-family: Arial;
  4361. }
  4362. .zhm_money_num{
  4363. color:#f23030;
  4364. font-size:36px;
  4365. margin-left: 2px;
  4366. }
  4367. .zhm_condition{
  4368. color:#fb0f3a;
  4369. background-color: #fff4ec;
  4370. margin-top:5px;
  4371. margin-left: 5px;
  4372. padding:2px 5px;
  4373. font-size:12px;
  4374. }
  4375. .zhm_time{
  4376. display: flex;
  4377. flex-direction:row;
  4378. margin-top: -5px;
  4379. padding:2px 4px;
  4380. }
  4381. .zhm_term{
  4382. color:#fb0f3a;
  4383. border: 1px solid #fb0f3a;
  4384. border-radius:2px;
  4385. align-items: center;
  4386. padding:0px 4px;
  4387. font-size:12px;
  4388. height: 18px;
  4389. }
  4390. .zhm_date{
  4391. font-size: 14px;
  4392. font-weight: 500;
  4393. padding-left:8px;
  4394.  
  4395. }
  4396. .zhm_circle{
  4397. background: #fb0f3a url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsSAAALEgHS3X78AAAAzUlEQVQYlS3NMUoDQRiG4Xcmu9lAXBQbq+1CCqucwsbOO3gAS29h4Qm8gRdIMKVglQVBFiSFjYKBqWZ2d/7PIvYPPE6SMCHvcD8HuLzBUsIKDyY8AN4RU+J9/8nH8oLYJ3wWchxBjJHtZkN1fsbp9omvhzv6ccDjQJLatlXXdZIk5awkKVzdKk9W8gBFUVDXNQA2jJTA7GSOmR2LpmkIIWA546spvO5wL29Qz3GSBBCHnnwIzO4f0fMaYoKy/Acm8A6+fxkX15ANqimY8QemCm920r1aUAAAAABJRU5ErkJggg==) repeat-y;
  4398. margin-top:10px;
  4399. width: 10px;
  4400. height:66px;
  4401. position: absolute;
  4402. right:44px;
  4403. z-index:2;
  4404. filter:none;
  4405. }
  4406. .zhm_link_coupon{
  4407. display: flex;
  4408. flex-direction:row;
  4409. align-items:center;
  4410. filter: drop-shadow(2px 2px 3px #888);
  4411. background: radial-gradient(circle at left top, transparent 8px, #fb053a 0) top right /var(--left) 50% no-repeat,
  4412. radial-gradient(circle at left bottom, transparent 8px, #fb053a 0) bottom right /var(--left) 50% no-repeat;
  4413. height: 84px;
  4414.  
  4415. }
  4416. .zhm_link_text{
  4417. cursor:pointer;
  4418. margin-top: 10px;
  4419. margin-left: 12px;
  4420. writing-mode:vertical-lr;
  4421. letter-spacing:10px;
  4422. color: #fff !important;
  4423. font-size:16px;
  4424. font-family:"Microsoft YaHei";
  4425. text-decoration:none;
  4426. width:38px;
  4427. background: radial-gradient(circle at left top, transparent 8px, #fb053a 0) top right /var(--left) 50% no-repeat,
  4428. radial-gradient(circle at left bottom, transparent 8px, #fb053a 0) bottom right /var(--left) 50% no-repeat;
  4429.  
  4430. }
  4431. .zhm_link_text:hover{
  4432. text-decoration:none;
  4433. font-weight:800;
  4434. font-family:"Microsoft YaHei";
  4435. }
  4436. `;
  4437.  
  4438. domStyle .appendChild(document.createTextNode(couponStyle));
  4439.  
  4440. domHead.appendChild(domStyle);
  4441.  
  4442. let n=0;
  4443.  
  4444. let couponTimer = setInterval(function(){
  4445.  
  4446. n++;
  4447.  
  4448. let pageNode = document.querySelector(nowNode)
  4449.  
  4450. if(pageNode){
  4451.  
  4452. clearInterval(couponTimer);
  4453.  
  4454. couponClass[nowName]();
  4455.  
  4456. }else{
  4457.  
  4458. if(n==couponTimerNum) clearInterval(couponTimer);
  4459. }
  4460.  
  4461. },100)
  4462. }
  4463.  
  4464. function playVideoFunc(){
  4465.  
  4466. var playVideoClass = new PlayVideoClass();
  4467.  
  4468. playVideoClass.zhmLogo();
  4469.  
  4470. //custom add line
  4471.  
  4472. if(GM_getValue('videoPlayLineAdd')==22 && GM_getValue('playVideoLineText')){
  4473.  
  4474. let lineObj = playVideoClass.getLine(GM_getValue('playVideoLineText'));
  4475.  
  4476. if(lineObj){
  4477.  
  4478. playLine = [...lineObj,...playLine];
  4479. }
  4480.  
  4481. }
  4482.  
  4483. //template:icon,playLine;
  4484. let playWrapHtml = "<div class='zhm_play_video_line'>";
  4485.  
  4486. playWrapHtml +="<div><ul class='zhm_play_vide_line_ul'>";
  4487.  
  4488. playLine.forEach(function(item){
  4489.  
  4490. let selected = '';
  4491.  
  4492. if(playVideoClass.getCookie('playLineAction') == item.url){
  4493.  
  4494. selected = 'zhm_line_selected';
  4495.  
  4496. }
  4497.  
  4498. playWrapHtml +=`<li class='playLineTd zhm_play_video_line_ul_li ${selected}' url='${item.url}' >${item.name}</li>`;
  4499.  
  4500. })
  4501.  
  4502. playWrapHtml += "</div>";
  4503.  
  4504. let zhmPlay = document.getElementById('zhmlogo');
  4505.  
  4506. let playLineDom = document.createElement('div');
  4507.  
  4508. playLineDom.className = 'playLineDiv zhm_play_video_wrap';
  4509.  
  4510. playLineDom.style.display = 'none';
  4511.  
  4512. playLineDom.innerHTML = playWrapHtml;
  4513.  
  4514. zhmPlay.appendChild(playLineDom);
  4515.  
  4516. //template:node;播放区域
  4517.  
  4518. let playJxHtml = "<div class='zhm_play_video_jx'>";
  4519.  
  4520. playJxHtml += "<iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='playIframe'></iframe></div>";
  4521.  
  4522. //循环判断是否在播放页,是则执行下面
  4523. let jxVideoData = [
  4524. {funcName:"playVideo", node:".player__container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  4525. {funcName:"playVideo", node:"#player-container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  4526. {funcName:"playVideo", node:".container-player" ,match:/v\.qq\.com\/x\/page/,areaClassName:'mod_episode'},
  4527. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/m\/play\?cid/},
  4528. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/play\.html\?cid=/},
  4529. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/play\.html\?cid\=/},
  4530. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/cover\/.*html/},
  4531.  
  4532. {funcName:"playVideo", node:"#flashbox",match:/^https:\/\/www\.iqiyi\.com\/[vwa]\_/,areaClassName:'qy-episode-num',name:'iqiyiPc'},
  4533. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https:\/\/m.iqiyi\.com\/[vwa]\_/,areaClassName:'m-sliding-list'},
  4534. {funcName:"playVideo", node:".intl-video-wrap",match:/^https:\/\/www\.iq\.com\/play\//,areaClassName:'m-sliding-list'},
  4535.  
  4536. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/alipay_video\/id_/},
  4537. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/video\/id_/},
  4538. {funcName:"playVideo", node:"#player",match:/v\.youku\.com\/v_show\/id_/},
  4539.  
  4540. //{funcName:"playVideo", node:".player-container",nodeType:'id',match:/www\.bilibili\.com\/video/},
  4541. {funcName:"playVideo", node:"#bilibili-player",nodeType:'id',match:/www\.bilibili\.com\/video/,name:'biliPc',areaClassName:'video-episode-card'},
  4542. {funcName:"playVideo", node:"#player_module",nodeType:'id',match:/www\.bilibili\.com\/bangumi/,areaClassName:'ep-list-wrapper report-wrap-module'},
  4543. {funcName:"playVideo", node:".player-container",nodeType:'class',match:/m\.bilibili\.com\/bangumi/,areaClassName:'ep-list-pre-container no-wrap'},
  4544. {funcName:"playVideo", node:".mplayer",nodeType:'class',match:/m\.bilibili\.com\/video\//},
  4545.  
  4546. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  4547. {funcName:"playVideo", node:"#mgtv-player-wrap",nodeType:'id',match:/mgtv\.com\/b/,areaClassName:'episode-items clearfix'},
  4548. {funcName:"playVideo", node:".x-player",nodeType:'class',match:/tv\.sohu\.com\/v/},
  4549. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  4550. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com\/album\//},
  4551.  
  4552. {funcName:"playVideo", node:"#le_playbox",nodeType:'id',match:/le\.com\/ptv\/vplay\//,areaClassName:'juji_grid'},
  4553.  
  4554. {funcName:"playVideo", node:"#player",nodeType:'id',match:/play\.tudou\.com\/v_show\/id_/},
  4555.  
  4556. {funcName:"playVideo", node:"#pptv_playpage_box",nodeType:'id',match:/v\.pptv\.com\/show\//},
  4557.  
  4558. {funcName:"playVideo", node:"#player",nodeType:'id',match:/vip\.1905.com\/play\//},
  4559.  
  4560. {funcName:"playVideo", node:"#vodPlayer",nodeType:'id',match:/www\.1905.com\/vod\/play\//},
  4561. ];
  4562.  
  4563. let jxVideoWeb = jxVideoData.filter(function(item){
  4564.  
  4565. return location.href.match(item.match);
  4566.  
  4567. })
  4568.  
  4569. playVideoClass.zhmLogoDrag('video',jxVideoWeb);
  4570.  
  4571. //是否在播放页
  4572. if(jxVideoWeb.length > 0){
  4573.  
  4574. var {funcName,match:nowMatch,node:nowNode,name:nowName} = jxVideoWeb[0];
  4575.  
  4576. //鼠标经过显示线路
  4577. document.querySelector('.playButton').onmouseover=()=>{
  4578.  
  4579. document.querySelector(".playLineDiv").style.display='block';
  4580.  
  4581. }
  4582.  
  4583. document.querySelector('.playButton').onmouseout=()=>{
  4584.  
  4585. document.querySelector(".playLineDiv").style.display='none';
  4586.  
  4587. }
  4588.  
  4589. //选择线路解析播放
  4590.  
  4591. var playLineTd = document.querySelectorAll('.playLineTd');
  4592.  
  4593. playLineTd.forEach(function(item){
  4594.  
  4595. item.addEventListener('click',function(){
  4596.  
  4597. playLineTd.forEach(function(e){
  4598.  
  4599. e.setAttribute('class','playLineTd zhm_play_video_line_ul_li');
  4600. })
  4601.  
  4602. this.setAttribute('class','playLineTd zhm_play_video_line_ul_li zhm_line_selected');
  4603.  
  4604. playVideoClass.setCookie('playLineAction',this.getAttribute('url'),30);
  4605.  
  4606. let nowWebNode = document.querySelector(nowNode);
  4607.  
  4608. if(nowWebNode){
  4609.  
  4610. nowWebNode.innerHTML = playJxHtml;
  4611.  
  4612. let playIframe = document.querySelector('#playIframe');
  4613.  
  4614. playIframe.src= item.getAttribute('url')+location.href;
  4615.  
  4616. }else{
  4617.  
  4618. console.log('视频网站结点不存在');
  4619. }
  4620.  
  4621. })
  4622.  
  4623. })
  4624.  
  4625. /*--特殊处理--*/
  4626. //优酷去广告
  4627. if(nowNode=="#player"){
  4628.  
  4629. setTimeout(function(){
  4630.  
  4631. let youkuAd = document.querySelector('.advertise-layer');
  4632.  
  4633. let ykAd = youkuAd.lastChild;
  4634.  
  4635. ykAd.parentNode.removeChild(ykAd);
  4636.  
  4637. document.querySelector('.kui-dashboard-0').style='display:flex';
  4638.  
  4639. let playVideo = document.querySelector('.video-layer video');
  4640.  
  4641. playVideo.play();
  4642.  
  4643. let n=0;
  4644.  
  4645. //暂停
  4646. document.querySelector('.kui-play-icon-0').addEventListener('click',function(){
  4647.  
  4648. let video = document.querySelector('.video-layer video');
  4649.  
  4650. if(n++%2 == 0){
  4651.  
  4652. video.pause();
  4653.  
  4654. }else{
  4655.  
  4656. video.play();
  4657. }
  4658.  
  4659. });
  4660.  
  4661. playVideo.addEventListener('timeupdate',function(){ //播放时间改变
  4662.  
  4663. let youkuAd = document.querySelector('.advertise-layer');
  4664.  
  4665. let ykAd = youkuAd.lastChild;
  4666.  
  4667.  
  4668. if(ykAd){
  4669.  
  4670. ykAd.parentNode.removeChild(ykAd);
  4671. }
  4672.  
  4673. document.querySelector('.kui-dashboard-0').style='display:flex';
  4674. });
  4675.  
  4676. },3000)
  4677. }
  4678. //爱奇艺去广告
  4679. if(nowNode=="#flashbox"){
  4680.  
  4681. setTimeout(function(){
  4682.  
  4683. let dom = document.querySelector('.skippable-after');
  4684.  
  4685. if(dom){
  4686.  
  4687. dom.click();
  4688.  
  4689. }
  4690.  
  4691. },3000)
  4692.  
  4693. }
  4694.  
  4695. //腾讯去vip弹窗
  4696. if(nowNode=="#player-container"){
  4697.  
  4698. let n = 0;
  4699.  
  4700. let timer = setInterval(function(){
  4701.  
  4702. if(n++ < 100){
  4703.  
  4704. let panelTipVip = document.querySelector('.panel-overlay');
  4705.  
  4706. if(panelTipVip){
  4707.  
  4708. panelTipVip.style.display='none';
  4709.  
  4710. clearInterval(timer);
  4711. }
  4712.  
  4713. }else{
  4714.  
  4715. clearInterval(timer);
  4716.  
  4717. }
  4718.  
  4719. },100)
  4720.  
  4721.  
  4722.  
  4723. }
  4724. //乐视选集处理
  4725. if(nowNode == "#le_playbox"){
  4726.  
  4727. setTimeout(function(){
  4728.  
  4729. let jBlock = document.querySelectorAll('.j_block');
  4730.  
  4731. if(!jBlock) return;
  4732.  
  4733. for(let i=0;i<jBlock.length;i++){
  4734.  
  4735. let videoId = jBlock[i].getAttribute('data-vid');
  4736.  
  4737. let link = `https://www.le.com/ptv/vplay/${videoId}.html`;
  4738.  
  4739. jBlock[i].firstChild.setAttribute('href',link);
  4740. }
  4741. },3000)
  4742. }
  4743.  
  4744. //B站大会员url处理,页面class不一致
  4745. if(nowNode == ".player-container"){
  4746.  
  4747. setTimeout(function(){
  4748.  
  4749. if(!document.querySelector('.player-container') && !document.querySelector('.bpx-player-container')){
  4750.  
  4751. nowNode = '.player-mask';
  4752.  
  4753. }else{
  4754.  
  4755. nowNode = '.bpx-player-container';
  4756. }
  4757.  
  4758. },3000)
  4759. }
  4760. //全局click监听
  4761. document.addEventListener('click',function(e){
  4762.  
  4763. /*爱奇艺选集去广告*/
  4764. if(nowName=='iqiyiPc'){
  4765.  
  4766. e.path.forEach(function(item){
  4767.  
  4768. if(item.className.indexOf('select-item')!= -1){
  4769.  
  4770. setTimeout(function(){
  4771.  
  4772. location.href=location.href;
  4773.  
  4774. },1000)
  4775.  
  4776. }
  4777.  
  4778. })
  4779.  
  4780. setTimeout(function(){
  4781.  
  4782. let dom = document.querySelector('.skippable-after');
  4783.  
  4784. if(dom){
  4785.  
  4786. dom.click();
  4787.  
  4788. }else{
  4789.  
  4790. return;
  4791. }
  4792.  
  4793. },5000)
  4794.  
  4795. }
  4796.  
  4797. let areaClassName = [];
  4798.  
  4799. e.path.filter(function(item){
  4800.  
  4801. if(item.className == nowWeb[0].areaClassName){
  4802.  
  4803. areaClassName=item;
  4804.  
  4805. };
  4806.  
  4807. })
  4808.  
  4809. if(areaClassName.length == 0){
  4810. console.log('不在选集范围');
  4811. return;
  4812. }
  4813.  
  4814. if(nowName=='qqPC'){
  4815.  
  4816. e.path.forEach(function(item){
  4817.  
  4818. if(item.className=='episode-list-rect__item' || item.className.indexOf('episode-item') != -1){
  4819.  
  4820. setTimeout(function(){
  4821.  
  4822. location.href=location.href;
  4823.  
  4824. },1000)
  4825.  
  4826. }
  4827.  
  4828. })
  4829. }
  4830.  
  4831. if(nowName == 'biliPc'){
  4832. //在元素范围内,不用跳转,
  4833. let className = ['bpx-player-video-area'];//点击元素范围,范围取视频播发区域。后续有跳转错误,新增区域即可。
  4834.  
  4835. let matchNum = 0;
  4836.  
  4837. e.path.filter(function(item){
  4838.  
  4839. if(className.indexOf(item.className) != -1){
  4840. matchNum++;
  4841. }
  4842.  
  4843. })
  4844.  
  4845. if(matchNum > 0){
  4846. return;
  4847. }
  4848. //视频页面选集跳转
  4849. setTimeout(function(){
  4850.  
  4851. let videoClassName = ['video-episode-card'];//视频页面续集dom
  4852.  
  4853. e.path.filter(function(item){
  4854.  
  4855. if(videoClassName.indexOf(item.className) != -1){
  4856. location.href = location.href;
  4857. }
  4858.  
  4859. })
  4860.  
  4861. })
  4862.  
  4863. }
  4864.  
  4865. var objLink = {};
  4866.  
  4867. e.path.forEach(function(item){
  4868.  
  4869. if(item.href){
  4870.  
  4871. objLink.href = item.href?item.href:'';
  4872.  
  4873. objLink.target = item.target?item.target:'';
  4874.  
  4875. return;
  4876. }
  4877.  
  4878. })
  4879.  
  4880. if(objLink.href && objLink.target != '_blank'){
  4881.  
  4882. location.href = objLink.href;
  4883.  
  4884. return;
  4885. }
  4886.  
  4887. })
  4888.  
  4889. /*腾讯视频点击其它视频跳转*/
  4890. if(nowName=='qqPC'){
  4891.  
  4892. let figure = document.querySelectorAll('.figure');
  4893.  
  4894. let figureDetail = document.querySelectorAll('.figure_detail');
  4895.  
  4896. let listItem = [...figure,...figureDetail];
  4897.  
  4898. if(listItem.length > 0){
  4899.  
  4900. listItem.forEach(function(item){
  4901.  
  4902. item.addEventListener('click',function(){
  4903.  
  4904. let link = this.getAttribute('href');
  4905.  
  4906. if(link){
  4907.  
  4908. location.href = link;
  4909.  
  4910. return;
  4911. }
  4912.  
  4913. })
  4914.  
  4915. });
  4916.  
  4917. }
  4918. }
  4919.  
  4920. }
  4921.  
  4922. }
  4923.  
  4924. function playMusicFunc(){
  4925.  
  4926. if(self.frameElement && self.frameElement.tagName == "IFRAME"){
  4927.  
  4928. return;
  4929. }
  4930.  
  4931. var playMusicClass = new PlayMusicClass();
  4932.  
  4933. var musicId = Math.ceil(Math.random()*100000000);
  4934.  
  4935. //netease 路由两次,需重定义
  4936. var newUrl = location.href;
  4937.  
  4938. let jxMusicWeb = jxMusic[0].web.filter(function(item){
  4939.  
  4940. return newUrl.match(item.match);
  4941.  
  4942. })
  4943.  
  4944. if(jxMusicWeb.length){
  4945.  
  4946. let timerZhmIcon = setInterval(function(){
  4947.  
  4948. if (document.querySelector('#zhmIcon')){
  4949.  
  4950. clearInterval(timerZhmIcon); // 取消定时器
  4951.  
  4952. if(jxMusicWeb[0].name=='kuwo'){
  4953.  
  4954. setTimeout(function(){
  4955.  
  4956. let control = document.querySelector('.icon-bar_icon_download_');
  4957.  
  4958. let icon = control.cloneNode(true);
  4959.  
  4960. icon.className = '';
  4961.  
  4962. icon.style='margin-left:10px;';
  4963.  
  4964. icon.innerHTML = "<a style='font-size:10px;white-space: nowrap;cursor:pointer;color:#555;' id='kuwoDownload'>下载</a>";
  4965.  
  4966. let controls = document.querySelector('.col_r');
  4967.  
  4968. controls.before(icon);
  4969.  
  4970. document.querySelector('#kuwoDownload').addEventListener('click',function(){
  4971.  
  4972. let audioSrc = document.querySelector("audio").src;
  4973.  
  4974. let songName = document.querySelector('.control .song_name').title;
  4975.  
  4976. let artist = document.querySelector('.control .artist').title;
  4977.  
  4978. GM_download(audioSrc,songName+'-'+artist+'.mp3');
  4979.  
  4980. })
  4981.  
  4982. },2000)
  4983. }
  4984.  
  4985. if(jxMusicWeb[0].name=='ximalaya'){
  4986.  
  4987. setTimeout(function(){
  4988. //播放器创建下载icon
  4989. let xmControls = document.querySelector('.xm-player-oprations');
  4990.  
  4991. let control = xmControls.querySelector('a:nth-of-type(2)');
  4992.  
  4993. let icon = control.cloneNode(true);
  4994.  
  4995. icon.innerHTML = "<span style='font-size:10px;white-space: nowrap;cursor:pointer;color:#FFF;' id='ximaDownload'>下载</span>";
  4996.  
  4997. xmControls.style='position: relative;margin-left:-20px;';
  4998.  
  4999. document.querySelector('.xm-player-progress').style.width='450px';
  5000.  
  5001. document.querySelector('.xm-player-playtime').style='position: absolute;right:40px;';
  5002.  
  5003. xmControls.prepend(icon);
  5004. //播放器下载事件
  5005. document.querySelector('#ximaDownload').addEventListener('click',function(){
  5006.  
  5007. let fmTitle = document.querySelector('.fm-title');
  5008.  
  5009. let fmTitleMatch = fmTitle.href.match(/^https?:\/\/www\.ximalaya\.com\/sound\/(\S*)$/);
  5010.  
  5011. let url = 'https://mobile.ximalaya.com/mobile-playpage/track/v3/baseInfo/'+new Date().getTime()+'?device=web&trackId='+fmTitleMatch[1];
  5012.  
  5013. playMusicClass.request('get',url).then((result)=>{
  5014.  
  5015. let data = JSON.parse(result);
  5016.  
  5017. let playUrl = data.trackInfo.playUrlList[1].url;
  5018.  
  5019. let str1 = playUrl.replaceAll('-','+');
  5020.  
  5021. let str2 = str1.replaceAll('_','/');
  5022.  
  5023. let num = str2.length%4;
  5024.  
  5025. if(num){
  5026.  
  5027. str2 += '===='.substr(num);
  5028. }
  5029.  
  5030. let decrypted = CryptoJS.AES.decrypt({
  5031.  
  5032. ciphertext: CryptoJS.enc.Base64.parse(str2)
  5033.  
  5034. }, CryptoJS.enc.Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"), {
  5035.  
  5036. mode: CryptoJS.mode.ECB,
  5037.  
  5038. padding: CryptoJS.pad.Pkcs7
  5039.  
  5040. }).toString(CryptoJS.enc.Utf8);
  5041.  
  5042. console.log(decrypted);
  5043.  
  5044. if(decrypted){
  5045.  
  5046. GM_download(decrypted,data.trackInfo.title+'.mp3');
  5047.  
  5048. }else{
  5049. console.log('解密地址失败');
  5050. }
  5051.  
  5052. })
  5053.  
  5054. })
  5055.  
  5056. //页面列表创建批量下载
  5057. let urlMatch = newUrl.match(/^https:\/\/www.ximalaya.com\/album\/[0-9]+/);
  5058.  
  5059. if(urlMatch){
  5060.  
  5061. let soundList = document.querySelector('#anchor_sound_list');
  5062.  
  5063. if(soundList){
  5064.  
  5065. let soundListHead = soundList.querySelector('.head');
  5066.  
  5067. let soundListHeadTitle = soundListHead.querySelector('.sort').lastChild;
  5068.  
  5069. let data = [{name:'批量下载',id:'batchDownload'},{name:'重置',id:'reset'},{name:'全选',id:'selectAll'}];
  5070.  
  5071. data.forEach(function(item){
  5072.  
  5073. let control = soundListHeadTitle.cloneNode(true);
  5074.  
  5075. control.setAttribute('id',item.id);
  5076.  
  5077. control.innerText = item.name;
  5078.  
  5079. soundListHeadTitle.after(control);
  5080.  
  5081. control.before(" | ");
  5082.  
  5083. });
  5084.  
  5085. playMusicClass.xmlyCreateCheckbox();
  5086.  
  5087. document.querySelector('#selectAll').addEventListener('click',function(){
  5088.  
  5089. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  5090.  
  5091. zhmCheckbox.forEach(function(item){
  5092.  
  5093. if(!item.checked){
  5094.  
  5095. item.checked=true;
  5096. }
  5097.  
  5098. })
  5099.  
  5100. });
  5101.  
  5102. document.querySelector('#reset').addEventListener('click',function(){
  5103.  
  5104. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  5105.  
  5106. zhmCheckbox.forEach(function(item){
  5107.  
  5108. item.checked = false;
  5109.  
  5110. })
  5111.  
  5112. })
  5113.  
  5114. document.querySelector('#batchDownload').addEventListener('click',function(){
  5115.  
  5116. //BaseClass.toast('已下载,请稍候');
  5117.  
  5118. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  5119.  
  5120. zhmCheckbox.forEach(function(item){
  5121.  
  5122. if(item.checked){
  5123.  
  5124. let scrMatch = item.value.match(/\/sound\/([0-9]+)/);
  5125.  
  5126. let url = 'https://mobile.ximalaya.com/mobile-playpage/track/v3/baseInfo/'+new Date().getTime()+'?device=web&trackId='+scrMatch[1];
  5127.  
  5128. playMusicClass.request('get',url).then((result)=>{
  5129.  
  5130. let data = JSON.parse(result);
  5131.  
  5132. let playUrl = data.trackInfo.playUrlList[1].url;
  5133.  
  5134. let str1 = playUrl.replaceAll('-','+');
  5135.  
  5136. let str2 = str1.replaceAll('_','/');
  5137.  
  5138. let num = str2.length%4;
  5139.  
  5140. if(num){
  5141.  
  5142. str2 += '===='.substr(num);
  5143. }
  5144.  
  5145. let decrypted = CryptoJS.AES.decrypt({
  5146.  
  5147. ciphertext: CryptoJS.enc.Base64.parse(str2)
  5148.  
  5149. }, CryptoJS.enc.Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"), {
  5150.  
  5151. mode: CryptoJS.mode.ECB,
  5152.  
  5153. padding: CryptoJS.pad.Pkcs7
  5154.  
  5155. }).toString(CryptoJS.enc.Utf8);
  5156.  
  5157. //console.log(decrypted);
  5158.  
  5159. if(decrypted){
  5160.  
  5161. GM_download(decrypted,data.trackInfo.title+'.mp3');
  5162.  
  5163. }else{
  5164. console.log('解密地址失败');
  5165. }
  5166.  
  5167. })
  5168.  
  5169. }
  5170.  
  5171. })
  5172.  
  5173. })
  5174.  
  5175. //正序倒序事件
  5176.  
  5177. soundListHead.querySelector('.sort').firstChild.addEventListener('click',function(){
  5178.  
  5179. setTimeout(function(){
  5180.  
  5181. playMusicClass.xmlyCreateCheckbox();
  5182.  
  5183. },2000)
  5184.  
  5185. });
  5186.  
  5187. soundListHeadTitle.addEventListener('click',function(){
  5188.  
  5189. setTimeout(function(){
  5190.  
  5191. playMusicClass.xmlyCreateCheckbox();
  5192.  
  5193. },2000)
  5194.  
  5195. });
  5196.  
  5197. //翻页事件
  5198.  
  5199. let pageBar = document.querySelector('.pagination-page');
  5200.  
  5201. pageBar.addEventListener('click',function(){
  5202.  
  5203. setTimeout(function(){
  5204.  
  5205. playMusicClass.xmlyCreateCheckbox();
  5206.  
  5207. },2000)
  5208.  
  5209. })
  5210. //跳页事件
  5211. document.querySelector('button[type=submit]').addEventListener('click',function(){
  5212.  
  5213. setTimeout(function(){
  5214.  
  5215. playMusicClass.xmlyCreateCheckbox();
  5216.  
  5217. },1000)
  5218.  
  5219. })
  5220. }
  5221. }else{
  5222. console.log('url地址错误');
  5223. }
  5224.  
  5225. },1000);
  5226.  
  5227. //全局点击事件
  5228. document.addEventListener('click',function(e){
  5229.  
  5230. var objLink = {};
  5231.  
  5232. e.path.forEach(function(item){
  5233.  
  5234. if(item.href){
  5235.  
  5236. objLink.href = item.href?item.href:'';
  5237.  
  5238. objLink.target = item.target?item.target:'';
  5239.  
  5240. return;
  5241. }
  5242.  
  5243. })
  5244.  
  5245. if(objLink.href && objLink.target != '_blank'){
  5246.  
  5247. location.href = objLink.href;
  5248.  
  5249. return;
  5250. }
  5251. })
  5252.  
  5253. }
  5254.  
  5255. if(jxMusicWeb[0].name=='kugou'){
  5256.  
  5257. let aDom = document.querySelectorAll('a');
  5258.  
  5259. aDom.forEach(function(item){
  5260.  
  5261. let dataObj = item.getAttribute('dataobj');
  5262.  
  5263. if(dataObj){
  5264.  
  5265. item.removeAttribute('dataobj');
  5266.  
  5267. item.setAttribute('target','_blank');
  5268. //console.log(dataObj);
  5269. }
  5270.  
  5271. })
  5272.  
  5273. if(couponUrl.indexOf('mixsong')!=-1 || couponUrl.indexOf('song') != -1 || couponUrl.indexOf('share') != -1){
  5274.  
  5275. setTimeout(function(){
  5276.  
  5277. let volumeDom = document.querySelector('#volume');
  5278.  
  5279. let downloadDom = volumeDom.cloneNode(true);
  5280.  
  5281. downloadDom.removeAttribute('id');
  5282.  
  5283. downloadDom.style='margin-top:30px';
  5284.  
  5285. downloadDom.innerHTML = "<a style='color:#fff;font-size:10px;white-space:nowrap;cursor:pointer;' id='kugouDownload' javascript:void(0);>下载</a>";
  5286.  
  5287. volumeDom.before(downloadDom);
  5288.  
  5289. volumeDom.style='left:50px;';
  5290.  
  5291. document.querySelector('#mode').style='margin-left:90px;';
  5292.  
  5293. document.querySelector('#pb_download').style='margin-left:130px;';
  5294.  
  5295. document.querySelector('#pb_share').style='margin-left:170px;';
  5296.  
  5297. document.querySelector('#list').style='right:-20px;';
  5298.  
  5299. document.querySelector('#kugouDownload').addEventListener('click',function(){
  5300.  
  5301. let audio = document.querySelector('#myAudio');
  5302.  
  5303. let audioSrc = audio.getAttribute('src');
  5304.  
  5305. let singerName = document.querySelector('.singerName').title;
  5306.  
  5307. let songName = document.querySelector('#songNameTemp').title;
  5308.  
  5309. GM_download(audioSrc,songName+'-'+singerName.substr(0,singerName.length-1)+'.mp3');
  5310.  
  5311. })
  5312.  
  5313. },1000)
  5314. }
  5315. console.log(couponUrl);
  5316. }
  5317.  
  5318. if(jxMusicWeb[0].name=='netease' && location.href == 'https://music.163.com/st/download'){
  5319.  
  5320. return false;
  5321. }
  5322.  
  5323. let zhmPlay = document.getElementById('zhmIcon');
  5324.  
  5325. setTimeout(function(){
  5326.  
  5327. playMusicClass.zhmLogo();
  5328.  
  5329. playMusicClass.zhmLogoDrag('music',jxMusicWeb);
  5330.  
  5331. },iconWaitTime);
  5332.  
  5333. }else{
  5334.  
  5335. playMusicClass.createElement('div','zhmIcon');
  5336. }
  5337.  
  5338. })
  5339.  
  5340. }else{
  5341.  
  5342. let zhmPlayDom = document.querySelector('#zhmIcon');
  5343.  
  5344. if(zhmPlayDom){
  5345.  
  5346. zhmPlayDom.parentNode.removeChild(zhmPlayDom);
  5347.  
  5348. }
  5349.  
  5350. console.log('当前音频网址没有添加匹配或匹配错误');
  5351.  
  5352. }
  5353.  
  5354. }
  5355.  
  5356. function zhNiceFunc(){
  5357.  
  5358. var zhClass = new ZhClass();
  5359.  
  5360. //关闭登录弹框
  5361. (async function(){
  5362.  
  5363. let loginModalWrapper = await BaseClass.getElement(".Modal-wrapper");
  5364.  
  5365. if(loginModalWrapper){
  5366.  
  5367. let closeButton = loginModalWrapper.querySelector('.Modal-closeButton');
  5368.  
  5369. if(closeButton){
  5370.  
  5371. closeButton.click();
  5372.  
  5373. }
  5374.  
  5375. }
  5376.  
  5377. })()
  5378.  
  5379. var zhData = [
  5380. {func:'removeVideo',isOpen:GM_getValue('removeVideo','0'),isOnscroll:1,onload:1},
  5381. {func:'removeAD',isOpen:GM_getValue('removeAD','22'),isOnscroll:0,onload:0},
  5382. {func:'downloadVideo',isOpen:GM_getValue('downloadVideo','22'),isOnscroll:0,onload:0},
  5383. {func:'removeRight',isOpen:GM_getValue('removeRight','0'),isOnscroll:0,onload:0},
  5384. {func:'changeLink',isOpen:GM_getValue('changeLink','22'),isOnscroll:0,onload:0},
  5385. {func:'removeKeyword',isOpen:GM_getValue('removeKeyword','0'),isOnscroll:1,onload:1},
  5386. {func:'showSpecialColumn',isOpen:GM_getValue('specialColumn','22'),isOnscroll:1,onload:1},
  5387. {func:'showVideoTitle',isOpen:GM_getValue('videoTitle','22'),isOnscroll:1,onload:1},
  5388. {func:'removeAuthorName',isOpen:GM_getValue('removeAuthorName','0'),isOnscroll:1,onload:1},
  5389. {func:'removeYanxuan',isOpen:GM_getValue('removeYanxuan','0'),isOnscroll:1,onload:1},
  5390. ]
  5391.  
  5392. zhData.forEach(function(item){
  5393. if(item.isOpen==22 && item.onload==0){
  5394. zhClass[item.func]();
  5395. }
  5396. })
  5397.  
  5398. window.onload=function(){
  5399. zhData.forEach(function(item){
  5400. if(item.isOpen==22 && item.onload==1){
  5401. zhClass[item.func]();
  5402. }
  5403. })
  5404. }
  5405. window.onscroll = function(){
  5406.  
  5407. var scrollTop = document.documentElement.scrollTop;
  5408.  
  5409. if(scrollTop > 200){
  5410.  
  5411. zhData.forEach(function(item){
  5412. if(item.isOpen==22 && item.isOnscroll==1){
  5413.  
  5414. zhClass[item.func]();
  5415. }
  5416. })
  5417.  
  5418. }
  5419.  
  5420. }
  5421.  
  5422. }
  5423.  
  5424. function taobaoSearchFunc(item){
  5425.  
  5426. let timer = setInterval(function(){
  5427.  
  5428. let taobaoIconDom = document.querySelector('#taobaoIconSelect');
  5429.  
  5430. let baseClass = new BaseClass();
  5431.  
  5432. let filterTmall = baseClass.getQueryString('filter_tianmao');
  5433.  
  5434. if(!taobaoIconDom){
  5435.  
  5436. let filters = document.querySelectorAll('.filters >a');
  5437.  
  5438. if(filters.length>0){
  5439.  
  5440. for(let i=0;i<filters.length;i++){
  5441.  
  5442. let dataValue = filters[i].getAttribute('data-value');
  5443.  
  5444. if(dataValue == 'tmall'){
  5445.  
  5446. //console.log(dataValue);
  5447.  
  5448. let taobaoDom = filters[i].cloneNode(true);
  5449.  
  5450. taobaoDom.querySelector('.text').innerText='淘宝';
  5451.  
  5452. taobaoDom.setAttribute('id','taobaoIconSelect');
  5453.  
  5454. taobaoDom.setAttribute('data-value','taobao');
  5455.  
  5456. if(filterTmall=='taobao'){
  5457. taobaoDom.setAttribute('data-action','remove');
  5458. taobaoDom.className='filter icon-tag J_Ajax icon-hover';
  5459. }else{
  5460. taobaoDom.removeAttribute('data-action');
  5461. taobaoDom.className='filter icon-tag J_Ajax';
  5462. }
  5463.  
  5464. filters[i].before(taobaoDom);
  5465. break;
  5466. }
  5467. }
  5468.  
  5469. }
  5470.  
  5471. }else{
  5472.  
  5473. if(filterTmall=='taobao'){
  5474. taobaoIconDom.setAttribute('data-action','remove');
  5475. taobaoIconDom.className='filter icon-tag J_Ajax icon-hover';
  5476. }else{
  5477. taobaoIconDom.removeAttribute('data-action');
  5478. taobaoIconDom.className='filter icon-tag J_Ajax';
  5479. }
  5480.  
  5481.  
  5482. }
  5483.  
  5484.  
  5485.  
  5486. if(filterTmall=='taobao'){
  5487.  
  5488. let goodsList = document.querySelectorAll('.items > .item');
  5489.  
  5490. goodsList.forEach(function(item){
  5491.  
  5492. let iconLiClass = item.querySelector('.icons>li>a>span');
  5493.  
  5494. let classNameTm=['icon-service-tianmao','icon-service-tianmaoguoji'];
  5495.  
  5496. if(iconLiClass && classNameTm.indexOf(iconLiClass.className) != -1){
  5497.  
  5498. item.style='display:none;';
  5499.  
  5500. }
  5501.  
  5502. })
  5503.  
  5504. //clearInterval(timer);
  5505.  
  5506. }
  5507.  
  5508. },500)
  5509.  
  5510. }
  5511.  
  5512. function baiduFunc(){
  5513. let pt = '', selectList = [], params = {}, mode = '', width = 800, pan = {}, color = '',
  5514. doc = $(document), progress = {}, request = {}, ins = {}, idm = {};
  5515. const version = '6.0.2';
  5516. const author = 'GreasyFork';
  5517. const name = '网盘直链下载助手';
  5518. const customClass = {
  5519. popup: 'pl-popup',
  5520. header: 'pl-header',
  5521. title: 'pl-title',
  5522. closeButton: 'pl-close',
  5523. content: 'pl-content',
  5524. input: 'pl-input',
  5525. footer: 'pl-footer'
  5526. };
  5527.  
  5528. const terminalType = {
  5529. wc: "Windows CMD",
  5530. wp: "Windows PowerShell",
  5531. lt: "Linux 终端",
  5532. ls: "Linux Shell",
  5533. mt: "MacOS 终端",
  5534. };
  5535.  
  5536. let toast = Swal.mixin({
  5537. toast: true,
  5538. position: 'top',
  5539. showConfirmButton: false,
  5540. timer: 3500,
  5541. timerProgressBar: false,
  5542. didOpen: (toast) => {
  5543. toast.addEventListener('mouseenter', Swal.stopTimer);
  5544. toast.addEventListener('mouseleave', Swal.resumeTimer);
  5545. }
  5546. });
  5547.  
  5548. const message = {
  5549. success: (text) => {
  5550. toast.fire({title: text, icon: 'success'});
  5551. },
  5552. error: (text) => {
  5553. toast.fire({title: text, icon: 'error'});
  5554. },
  5555. warning: (text) => {
  5556. toast.fire({title: text, icon: 'warning'});
  5557. },
  5558. info: (text) => {
  5559. toast.fire({title: text, icon: 'info'});
  5560. },
  5561. question: (text) => {
  5562. toast.fire({title: text, icon: 'question'});
  5563. }
  5564. };
  5565.  
  5566. let base = {
  5567.  
  5568. getCookie(name) {
  5569. let arr = document.cookie.replace(/\s/g, "").split(';');
  5570. for (let i = 0, l = arr.length; i < l; i++) {
  5571. let tempArr = arr[i].split('=');
  5572. if (tempArr[0] === name) {
  5573. return decodeURIComponent(tempArr[1]);
  5574. }
  5575. }
  5576. return '';
  5577. },
  5578.  
  5579. isType(obj) {
  5580. return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
  5581. },
  5582.  
  5583. getValue(name) {
  5584. return GM_getValue(name);
  5585. },
  5586.  
  5587. setValue(name, value) {
  5588. GM_setValue(name, value);
  5589. },
  5590.  
  5591. getStorage(key) {
  5592. try {
  5593. return JSON.parse(localStorage.getItem(key));
  5594. } catch (e) {
  5595. return localStorage.getItem(key);
  5596. }
  5597. },
  5598.  
  5599. setStorage(key, value) {
  5600. if (this.isType(value) === 'object' || this.isType(value) === 'array') {
  5601. return localStorage.setItem(key, JSON.stringify(value));
  5602. }
  5603. return localStorage.setItem(key, value);
  5604. },
  5605.  
  5606. setClipboard(text) {
  5607. GM_setClipboard(text, 'text');
  5608. },
  5609.  
  5610. e(str) {
  5611. return btoa(unescape(encodeURIComponent(str)));
  5612. },
  5613.  
  5614. d(str) {
  5615. return decodeURIComponent(escape(atob(str)));
  5616. },
  5617.  
  5618. getExtension(name) {
  5619. const reg = /(?!\.)\w+$/;
  5620. if (reg.test(name)) {
  5621. let match = name.match(reg);
  5622. return match[0].toUpperCase();
  5623. }
  5624. return '';
  5625. },
  5626.  
  5627. sizeFormat(value) {
  5628. if (value === +value) {
  5629. let unit = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
  5630. let index = Math.floor(Math.log(value) / Math.log(1024));
  5631. let size = value / Math.pow(1024, index);
  5632. size = size.toFixed(1);
  5633. return size + unit[index];
  5634. }
  5635. return '';
  5636. },
  5637.  
  5638. sortByName(arr) {
  5639. const handle = () => {
  5640. return (a, b) => {
  5641. const p1 = a.filename ? a.filename : a.server_filename;
  5642. const p2 = b.filename ? b.filename : b.server_filename;
  5643. return p1.localeCompare(p2, "zh-CN");
  5644. };
  5645. };
  5646. arr.sort(handle());
  5647. },
  5648.  
  5649. blobDownload(blob, filename) {
  5650. if (blob instanceof Blob) {
  5651. const url = URL.createObjectURL(blob);
  5652. const a = document.createElement('a');
  5653. a.href = url;
  5654. a.download = filename;
  5655. a.click();
  5656. URL.revokeObjectURL(url);
  5657. }
  5658. },
  5659.  
  5660. post(url, data, headers, type) {
  5661. if (this.isType(data) === 'object') {
  5662. data = JSON.stringify(data);
  5663. }
  5664. return new Promise((resolve, reject) => {
  5665. GM_xmlhttpRequest({
  5666. method: "POST", url, headers, data,
  5667. responseType: type || 'json',
  5668. onload: (res) => {
  5669. type === 'blob' ? resolve(res) : resolve(res.response || res.responseText);
  5670. },
  5671. onerror: (err) => {
  5672. reject(err);
  5673. },
  5674. });
  5675. });
  5676. },
  5677.  
  5678. get(url, headers, type, extra) {
  5679. return new Promise((resolve, reject) => {
  5680. let requestObj = GM_xmlhttpRequest({
  5681. method: "GET", url, headers,
  5682. responseType: type || 'json',
  5683. onload: (res) => {
  5684. if (res.status === 204) {
  5685. requestObj.abort();
  5686. idm[extra.index] = true;
  5687. }
  5688. if (type === 'blob') {
  5689. res.status === 200 && base.blobDownload(res.response, extra.filename);
  5690. resolve(res);
  5691. } else {
  5692. resolve(res.response || res.responseText);
  5693. }
  5694. },
  5695. onprogress: (res) => {
  5696. if (extra && extra.filename && extra.index) {
  5697. res.total > 0 ? progress[extra.index] = (res.loaded * 100 / res.total).toFixed(2) : progress[extra.index] = 0.00;
  5698. }
  5699. },
  5700. onloadstart() {
  5701. extra && extra.filename && extra.index && (request[extra.index] = requestObj);
  5702. },
  5703. onerror: (err) => {
  5704. reject(err);
  5705. },
  5706. });
  5707. });
  5708. },
  5709.  
  5710. getFinalUrl(url, headers) {
  5711. return new Promise((resolve, reject) => {
  5712. let requestObj = GM_xmlhttpRequest({
  5713. method: "GET", url, headers,
  5714. onload: (res) => {
  5715. resolve(res.finalUrl);
  5716. },
  5717. onerror: (err) => {
  5718. reject(err);
  5719. },
  5720. });
  5721. });
  5722. },
  5723.  
  5724. addStyle(id, tag, css) {
  5725. tag = tag || 'style';
  5726. let doc = document, styleDom = doc.getElementById(id);
  5727. if (styleDom) return;
  5728. let style = doc.createElement(tag);
  5729. style.rel = 'stylesheet';
  5730. style.id = id;
  5731. tag === 'style' ? style.innerHTML = css : style.href = css;
  5732. doc.getElementsByTagName('head')[0].appendChild(style);
  5733. },
  5734.  
  5735. findReact(dom, traverseUp = 0) {
  5736. const key = Object.keys(dom).find(key => {
  5737. return key.startsWith("__reactFiber$")
  5738. || key.startsWith("__reactInternalInstance$");
  5739. });
  5740. const domFiber = dom[key];
  5741. if (domFiber == null) return null;
  5742.  
  5743. if (domFiber._currentElement) {
  5744. let compFiber = domFiber._currentElement._owner;
  5745. for (let i = 0; i < traverseUp; i++) {
  5746. compFiber = compFiber._currentElement._owner;
  5747. }
  5748. return compFiber._instance;
  5749. }
  5750.  
  5751. const GetCompFiber = fiber => {
  5752. let parentFiber = fiber.return;
  5753. while (typeof parentFiber.type == "string") {
  5754. parentFiber = parentFiber.return;
  5755. }
  5756. return parentFiber;
  5757. };
  5758. let compFiber = GetCompFiber(domFiber);
  5759. for (let i = 0; i < traverseUp; i++) {
  5760. compFiber = GetCompFiber(compFiber);
  5761. }
  5762. return compFiber.stateNode || compFiber;
  5763. },
  5764.  
  5765. initDefaultConfig() {
  5766. let value = [{
  5767. name: 'setting_rpc_domain',
  5768. value: 'http://localhost'
  5769. }, {
  5770. name: 'setting_rpc_port',
  5771. value: '16800'
  5772. }, {
  5773. name: 'setting_rpc_path',
  5774. value: '/jsonrpc'
  5775. }, {
  5776. name: 'setting_rpc_token',
  5777. value: ''
  5778. }, {
  5779. name: 'setting_rpc_dir',
  5780. value: 'D:'
  5781. }, {
  5782. name: 'setting_terminal_type',
  5783. value: 'wc'
  5784. }, {
  5785. name: 'setting_theme_color',
  5786. value: '#09AAFF'
  5787. }, {
  5788. name: 'setting_init_code',
  5789. value: ''
  5790. }];
  5791.  
  5792. value.forEach((v) => {
  5793. base.getValue(v.name) === undefined && base.setValue(v.name, v.value);
  5794. });
  5795. },
  5796.  
  5797. showSetting() {
  5798. let dom = '', btn = '',
  5799. colorList = ['#09AAFF', '#cc3235', '#526efa', '#518c17', '#ed944b', '#f969a5', '#bca280'];
  5800. dom += `<label class="pl-setting-label"><div class="pl-label">RPC主机</div><input type="text" placeholder="主机地址,需带上http(s)://" class="pl-input listener-domain" value="${base.getValue('setting_rpc_domain')}"></label>`;
  5801. dom += `<label class="pl-setting-label"><div class="pl-label">RPC端口</div><input type="text" placeholder="端口号,例如:Motrix为16800" class="pl-input listener-port" value="${base.getValue('setting_rpc_port')}"></label>`;
  5802. dom += `<label class="pl-setting-label"><div class="pl-label">RPC路径</div><input type="text" placeholder="路径,默认为/jsonrpc" class="pl-input listener-path" value="${base.getValue('setting_rpc_path')}"></label>`;
  5803. dom += `<label class="pl-setting-label"><div class="pl-label">RPC密钥</div><input type="text" placeholder="无密钥无需填写" class="pl-input listener-token" value="${base.getValue('setting_rpc_token')}"></label>`;
  5804. dom += `<label class="pl-setting-label"><div class="pl-label">保存路径</div><input type="text" placeholder="文件下载后保存路径,例如:D:" class="pl-input listener-dir" value="${base.getValue('setting_rpc_dir')}"></label>`;
  5805.  
  5806. colorList.forEach((v) => {
  5807. btn += `<div data-color="${v}" style="background: ${v};border: 1px solid ${v}" class="pl-color-box listener-color ${v === base.getValue('setting_theme_color') ? 'checked' : ''}"></div>`;
  5808. });
  5809. dom += `<label class="pl-setting-label"><div class="pl-label">终端类型</div><select class="pl-input listener-terminal">`;
  5810. Object.keys(terminalType).forEach(k => {
  5811. dom += `<option value="${k}" ${base.getValue('setting_terminal_type') === k ? 'selected' : ''}>${terminalType[k]}</option>`;
  5812. });
  5813. dom += `</select></label>`;
  5814. dom += `<label class="pl-setting-label"><div class="pl-label">主题颜色</div> <div class="pl-color">${btn}<div></label>`;
  5815. dom = '<div>' + dom + '</div>';
  5816.  
  5817. Swal.fire({
  5818. title: '助手配置',
  5819. html: dom,
  5820. icon: 'info',
  5821. showCloseButton: true,
  5822. showConfirmButton: false,
  5823. footer: pan.footer,
  5824. }).then(() => {
  5825. message.success('设置成功!');
  5826. history.go(0);
  5827. });
  5828.  
  5829. doc.on('click', '.listener-color', async (e) => {
  5830. base.setValue('setting_theme_color', e.target.dataset.color);
  5831. message.success('设置成功!');
  5832. history.go(0);
  5833. });
  5834. doc.on('input', '.listener-domain', async (e) => {
  5835. base.setValue('setting_rpc_domain', e.target.value);
  5836. });
  5837. doc.on('input', '.listener-port', async (e) => {
  5838. base.setValue('setting_rpc_port', e.target.value);
  5839. });
  5840. doc.on('input', '.listener-path', async (e) => {
  5841. base.setValue('setting_rpc_path', e.target.value);
  5842. });
  5843. doc.on('input', '.listener-token', async (e) => {
  5844. base.setValue('setting_rpc_token', e.target.value);
  5845. });
  5846. doc.on('input', '.listener-dir', async (e) => {
  5847. base.setValue('setting_rpc_dir', e.target.value);
  5848. });
  5849. doc.on('change', '.listener-terminal', async (e) => {
  5850. base.setValue('setting_terminal_type', e.target.value);
  5851. });
  5852. },
  5853.  
  5854. registerMenuCommand() {
  5855. GM_registerMenuCommand('⚙️ 设置', () => {
  5856. this.showSetting();
  5857. });
  5858. },
  5859.  
  5860. createTip() {
  5861. $('body').append('<div class="pl-tooltip"></div>');
  5862.  
  5863. doc.on('mouseenter mouseleave', '.listener-tip', (e) => {
  5864. if (e.type === 'mouseenter') {
  5865. let filename = e.currentTarget.innerText;
  5866. let size = e.currentTarget.dataset.size;
  5867. let tip = `${filename}<span style="margin-left: 10px;color: #f56c6c;">${size}</span>`;
  5868. $(e.currentTarget).css({opacity: '0.5'});
  5869. $('.pl-tooltip').html(tip).css({
  5870. 'left': e.pageX + 10 + 'px',
  5871. 'top': e.pageY - e.currentTarget.offsetTop > 14 ? e.pageY + 'px' : e.pageY + 20 + 'px'
  5872. }).show();
  5873. } else {
  5874. $(e.currentTarget).css({opacity: '1'});
  5875. $('.pl-tooltip').hide(0);
  5876. }
  5877. });
  5878. },
  5879.  
  5880. createLoading() {
  5881. return $('<div class="pl-loading"><div class="pl-loading-box"><div><div></div><div></div></div></div></div>');
  5882. },
  5883.  
  5884. createDownloadIframe() {
  5885. let $div = $('<div style="padding:0;margin:0;display:block"></div>');
  5886. let $iframe = $('<iframe src="javascript:;" id="downloadIframe" style="display:none"></iframe>');
  5887. $div.append($iframe);
  5888. $('body').append($div);
  5889. },
  5890.  
  5891. getMirrorList(link, mirror, thread = 2) {
  5892. let host = new URL(link).host;
  5893. let mirrors = [];
  5894. for (let i = 0; i < mirror.length; i++) {
  5895. for (let j = 0; j < thread; j++) {
  5896. let item = link.replace(host, mirror[i]) + '&'.repeat(j);
  5897. mirrors.push(item);
  5898. }
  5899. }
  5900. return mirrors.join('\n');
  5901. },
  5902.  
  5903. addPanLinkerStyle() {
  5904. color = base.getValue('setting_theme_color');
  5905. let css = `
  5906. body::-webkit-scrollbar { display: none }
  5907. ::-webkit-scrollbar { width: 6px; height: 10px }
  5908. ::-webkit-scrollbar-track { border-radius: 0; background: none }
  5909. ::-webkit-scrollbar-thumb { background-color: rgba(85,85,85,.4) }
  5910. ::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover { border-radius: 5px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.2) }
  5911. ::-webkit-scrollbar-thumb:hover { background-color: rgba(85,85,85,.3) }
  5912. .swal2-popup { font-size: 16px !important; }
  5913. .pl-popup { font-size: 12px !important; }
  5914. .pl-popup a { color: ${color} !important; }
  5915. .pl-header { padding: 0!important;align-items: flex-start!important; border-bottom: 1px solid #eee!important; margin: 0 0 10px!important; padding: 0 0 5px!important; }
  5916. .pl-title { font-size: 16px!important; line-height: 1!important;white-space: nowrap!important; text-overflow: ellipsis!important;}
  5917. .pl-content { padding: 0 !important; font-size: 12px!important; }
  5918. .pl-main { max-height: 400px;overflow-y:scroll; }
  5919. .pl-footer {font-size: 12px!important;justify-content: flex-start!important; margin: 10px 0 0!important; padding: 5px 0 0!important; color: #f56c6c!important; }
  5920. .pl-item { display: flex; align-items: center; line-height: 22px; }
  5921. .pl-item-name { flex: 0 0 150px; text-align: left;margin-right: 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor:default; }
  5922. .pl-item-link { flex: 1; overflow: hidden; text-align: left; white-space: nowrap; text-overflow: ellipsis;cursor:pointer }
  5923. .pl-item-btn { background: ${color}; padding: 4px 5px; border-radius: 3px; line-height: 1; cursor: pointer; color: #fff; }
  5924. .pl-item-tip { display: flex; justify-content: space-between;flex: 1; }
  5925. .pl-back { width: 70px; background: #ddd; border-radius: 3px; cursor:pointer; margin:1px 0; }
  5926. .pl-ext { display: inline-block; width: 44px; background: #999; color: #fff; height: 16px; line-height: 16px; font-size: 12px; border-radius: 3px;}
  5927. .pl-retry {padding: 3px 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;}
  5928. .pl-browserdownload { padding: 3px 10px; background: ${color}; color: #fff; border-radius: 3px; cursor: pointer;}
  5929. .pl-item-progress { display:flex;flex: 1;align-items:center}
  5930. .pl-progress { display: inline-block;vertical-align: middle;width: 100%; box-sizing: border-box;line-height: 1;position: relative;height:15px; flex: 1}
  5931. .pl-progress-outer { height: 15px;border-radius: 100px;background-color: #ebeef5;overflow: hidden;position: relative;vertical-align: middle;}
  5932. .pl-progress-inner{ position: absolute;left: 0;top: 0;background-color: #409eff;text-align: right;border-radius: 100px;line-height: 1;white-space: nowrap;transition: width .6s ease;}
  5933. .pl-progress-inner-text { display: inline-block;vertical-align: middle;color: #d1d1d1;font-size: 12px;margin: 0 5px;height: 15px}
  5934. .pl-progress-tip{ flex:1;text-align:right}
  5935. .pl-progress-how{ flex: 0 0 90px; background: #ddd; border-radius: 3px; margin-left: 10px; cursor: pointer; text-align: center;}
  5936. .pl-progress-stop{ flex: 0 0 50px; padding: 0 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;margin-left:10px;height:20px}
  5937. .pl-progress-inner-text:after { display: inline-block;content: "";height: 100%;vertical-align: middle;}
  5938. .pl-btn-primary { background: ${color}; border: 0; border-radius: 4px; color: #ffffff; cursor: pointer; font-size: 12px; outline: none; display:flex; align-items: center; justify-content: center; margin: 2px 0; padding: 6px 0;transition: 0.3s opacity; }
  5939. .pl-btn-primary:hover { opacity: 0.9;transition: 0.3s opacity; }
  5940. .pl-btn-success { background: #55af28; animation: easeOpacity 1.2s 2; animation-fill-mode:forwards }
  5941. .pl-btn-info { background: #606266; }
  5942. .pl-btn-warning { background: #da9328; }
  5943. .pl-btn-warning { background: #da9328; }
  5944. .pl-btn-danger { background: #cc3235; }
  5945. .pl-dropdown-menu {position: absolute;right: 0;top: 30px;padding: 5px 0;color: rgb(37, 38, 43);background: #fff;z-index: 999;width: 102px;border: 1px solid #ddd;border-radius: 10px; box-shadow: 0 0 1px 1px rgb(28 28 32 / 5%), 0 8px 24px rgb(28 28 32 / 12%);}
  5946. .pl-dropdown-menu-item { height: 30px;display: flex;align-items: center;justify-content: center; }
  5947. .pl-dropdown-menu-item:hover { background-color: rgba(132,133,141,0.08);}
  5948. .pl-button .pl-dropdown-menu { display: none; }
  5949. .pl-button:hover .pl-dropdown-menu { display: block!important; }
  5950. .pl-button-init { opacity: 0.5; animation: easeInitOpacity 1.2s 3; animation-fill-mode:forwards }
  5951. @keyframes easeInitOpacity { from { opacity: 0.5; } 50% { opacity: 1 } to { opacity: 0.5; } }
  5952. @keyframes easeOpacity { from { opacity: 1; } 50% { opacity: 0.35 } to { opacity: 1; } }
  5953. .element-clicked { opacity: 0.5; }
  5954. .pl-extra { margin-top: 10px;display:flex}
  5955. .pl-extra button { flex: 1}
  5956. .pointer { cursor:pointer }
  5957. .pl-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 10px; }
  5958. .pl-label { flex: 0 0 100px;text-align:left; }
  5959. .pl-input { flex: 1; padding: 8px 10px; border: 1px solid #c2c2c2; border-radius: 5px; font-size: 14px }
  5960. .pl-color { flex: 1;display: flex;flex-wrap: wrap; margin-right: -10px;}
  5961. .pl-color-box { width: 35px;height: 35px;margin:10px 10px 0 0;; box-sizing: border-box;border:1px solid #fff;cursor:pointer }
  5962. .pl-color-box.checked { border:3px dashed #111!important }
  5963. .pl-close:focus { outline: 0; box-shadow: none; }
  5964. .tag-danger {color:#cc3235;margin: 0 5px;}
  5965. .pl-tooltip { position: absolute; color: #ffffff; max-width: 600px; font-size: 12px; padding: 5px 10px; background: #333; border-radius: 5px; z-index: 110000; line-height: 1.3; display:none; word-break: break-all;}
  5966. @keyframes load { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }
  5967. .pl-loading-box > div > div { position: absolute;border-radius: 50%;}
  5968. .pl-loading-box > div > div:nth-child(1) { top: 9px;left: 9px;width: 82px;height: 82px;background: #ffffff;}
  5969. .pl-loading-box > div > div:nth-child(2) { top: 14px;left: 38px;width: 25px;height: 25px;background: #666666;animation: load 1s linear infinite;transform-origin: 12px 36px;}
  5970. .pl-loading { width: 16px;height: 16px;display: inline-block;overflow: hidden;background: none;}
  5971. .pl-loading-box { width: 100%;height: 100%;position: relative;transform: translateZ(0) scale(0.16);backface-visibility: hidden;transform-origin: 0 0;}
  5972. .pl-loading-box div { box-sizing: content-box; }
  5973. .swal2-container { z-index:100000!important; }
  5974. body.swal2-height-auto { height: inherit!important; }
  5975. `;
  5976. this.addStyle('panlinker-style', 'style', css);
  5977. },
  5978.  
  5979. async initDialog() {
  5980. let result = await Swal.fire({
  5981. title: "请支持原创",
  5982. html: `<div><img style="width: 250px;margin-bottom: 10px;" src="${pan.img}" alt="${pan.img}"><input class="swal2-input" id="init" type="text" placeholder="请随便输入暗号"></div>`,
  5983. allowOutsideClick: false,
  5984. showCloseButton: true,
  5985. confirmButtonText: '破解'
  5986. });
  5987. if (result.isDismissed && result.dismiss === 'close') return;
  5988. if (pan.num == pan.num) {
  5989. base.setValue('setting_init_code', pan.num);
  5990. message.success("暗号正确");
  5991. setTimeout(() => {
  5992. history.go(0);
  5993. }, 1500);
  5994. } else {
  5995. await Swal.fire({
  5996. title:"暗号不正确",
  5997. text: "暗号不正确",
  5998. confirmButtonText: '重新输入',
  5999. imageUrl: pan.img,
  6000. });
  6001. await this.initDialog();
  6002. }
  6003. },
  6004. };
  6005.  
  6006. let baidu = {
  6007.  
  6008. _getExtra() {
  6009. let seKey = decodeURIComponent(base.getCookie('BDCLND'));
  6010. return '{' + '"sekey":"' + seKey + '"' + "}";
  6011. },
  6012.  
  6013. _getSurl() {
  6014. let reg = /(?<=s\/|surl=)([a-zA-Z0-9_-]+)/g;
  6015. if (reg.test(location.href)) {
  6016. return location.href.match(reg)[0];
  6017. }
  6018. return '';
  6019. },
  6020.  
  6021. _getFidList() {
  6022. let fidlist = [];
  6023. selectList.forEach(v => {
  6024. if (+v.isdir === 1) return;
  6025. fidlist.push(v.fs_id);
  6026. });
  6027. return '[' + fidlist + ']';
  6028. },
  6029.  
  6030. _resetData() {
  6031. progress = {};
  6032. $.each(request, (key) => {
  6033. (request[key]).abort();
  6034. });
  6035. $.each(ins, (key) => {
  6036. clearInterval(ins[key]);
  6037. });
  6038. idm = {};
  6039. ins = {};
  6040. request = {};
  6041. },
  6042.  
  6043. setBDUSS() {
  6044. try {
  6045. GM_cookie && GM_cookie('list', {name: 'BDUSS'}, (cookies, error) => {
  6046. if (!error) {
  6047. base.setStorage("baiduyunPlugin_BDUSS", {BDUSS: cookies[0].value});
  6048. }
  6049. });
  6050. } catch (e) {
  6051. }
  6052. },
  6053.  
  6054. getBDUSS() {
  6055. let baiduyunPlugin_BDUSS = base.getStorage('baiduyunPlugin_BDUSS') ? base.getStorage('baiduyunPlugin_BDUSS') : '{"baiduyunPlugin_BDUSS":""}';
  6056. return baiduyunPlugin_BDUSS.BDUSS || '';
  6057. },
  6058.  
  6059. convertLinkToAria(link, filename, ua) {
  6060. let BDUSS = this.getBDUSS();
  6061. if (!!BDUSS) {
  6062. filename = filename.replace(' ', '_');
  6063. return encodeURIComponent(`aria2c "${link}" --out "${filename}" --header "User-Agent: ${ua}" --header "Cookie: BDUSS=${BDUSS}"`);
  6064. }
  6065. return {
  6066. link: pan.assistant,
  6067. text: pan.init[5]
  6068. };
  6069. },
  6070.  
  6071. convertLinkToBC(link, filename, ua) {
  6072. let BDUSS = this.getBDUSS();
  6073. if (!!BDUSS) {
  6074. let cookie = `BDUSS=${BDUSS}`;
  6075. let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}&cookie=${encodeURIComponent(cookie)}&user_agent=${encodeURIComponent(ua)}ZZ`;
  6076. return encodeURIComponent(`bc://http/${base.e(bc)}`);
  6077. }
  6078. return {
  6079. link: pan.assistant,
  6080. text: pan.init[5]
  6081. };
  6082. },
  6083.  
  6084. convertLinkToCurl(link, filename, ua) {
  6085. let BDUSS = this.getBDUSS();
  6086. if (!!BDUSS) {
  6087. let terminal = base.getValue('setting_terminal_type');
  6088. filename = filename.replace(' ', '_');
  6089. return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L "${link}" --output "${filename}" -A "${ua}" -b "BDUSS=${BDUSS}"`);
  6090. }
  6091. return {
  6092. link: pan.assistant,
  6093. text: pan.init[5]
  6094. };
  6095. },
  6096.  
  6097. addPageListener() {
  6098. function _factory(e) {
  6099. let target = $(e.target);
  6100. let item = target.parents('.pl-item');
  6101. let link = item.find('.pl-item-link');
  6102. let progress = item.find('.pl-item-progress');
  6103. let tip = item.find('.pl-item-tip');
  6104. return {
  6105. item, link, progress, tip, target,
  6106. };
  6107. }
  6108.  
  6109. function _reset(i) {
  6110. ins[i] && clearInterval(ins[i]);
  6111. request[i] && request[i].abort();
  6112. progress[i] = 0;
  6113. idm[i] = false;
  6114. }
  6115.  
  6116. doc.on('mouseenter mouseleave click', '.pl-button.g-dropdown-button', (e) => {
  6117. if (e.type === 'mouseleave') {
  6118. $(e.currentTarget).removeClass('button-open');
  6119. } else {
  6120. $(e.currentTarget).addClass('button-open');
  6121. $(e.currentTarget).find('.pl-dropdown-menu').show();
  6122. }
  6123. });
  6124. doc.on('mouseleave', '.pl-button.g-dropdown-button .pl-dropdown-menu', (e) => {
  6125. $(e.currentTarget).hide();
  6126. });
  6127.  
  6128. doc.on('click', '.pl-button-mode', (e) => {
  6129. mode = e.target.dataset.mode;
  6130. Swal.showLoading();
  6131. this.getPCSLink();
  6132. });
  6133. doc.on('click', '.listener-link-api', async (e) => {
  6134. e.preventDefault();
  6135. let o = _factory(e);
  6136. let $width = o.item.find('.pl-progress-inner');
  6137. let $text = o.item.find('.pl-progress-inner-text');
  6138. let filename = o.link[0].dataset.filename;
  6139. let index = o.link[0].dataset.index;
  6140. _reset(index);
  6141. base.get(o.link[0].dataset.link, {"User-Agent": pan.ua}, 'blob', {filename, index});
  6142. ins[index] = setInterval(() => {
  6143. let prog = +progress[index] || 0;
  6144. let isIDM = idm[index] || false;
  6145. if (isIDM) {
  6146. o.tip.hide();
  6147. o.progress.hide();
  6148. o.link.text('已成功唤起IDM,请查看IDM下载框!').animate({opacity: '0.5'}, "slow").show();
  6149. clearInterval(ins[index]);
  6150. idm[index] = false;
  6151. } else {
  6152. o.link.hide();
  6153. o.tip.hide();
  6154. o.progress.show();
  6155. $width.css('width', prog + '%');
  6156. $text.text(prog + '%');
  6157. if (prog === 100) {
  6158. clearInterval(ins[index]);
  6159. progress[index] = 0;
  6160. o.item.find('.pl-progress-stop').hide();
  6161. o.item.find('.pl-progress-tip').html('下载完成,正在弹出浏览器下载框!');
  6162. }
  6163. }
  6164. }, 500);
  6165. });
  6166. doc.on('click', '.listener-retry', async (e) => {
  6167. let o = _factory(e);
  6168. o.tip.hide();
  6169. o.link.show();
  6170. });
  6171. doc.on('click', '.listener-how', async (e) => {
  6172. let o = _factory(e);
  6173. let index = o.link[0].dataset.index;
  6174. if (request[index]) {
  6175. request[index].abort();
  6176. clearInterval(ins[index]);
  6177. o.progress.hide();
  6178. o.tip.show();
  6179. }
  6180.  
  6181. });
  6182. doc.on('click', '.listener-stop', async (e) => {
  6183. let o = _factory(e);
  6184. let index = o.link[0].dataset.index;
  6185. if (request[index]) {
  6186. request[index].abort();
  6187. clearInterval(ins[index]);
  6188. o.tip.hide();
  6189. o.progress.hide();
  6190. o.link.show(0);
  6191. }
  6192. });
  6193. doc.on('click', '.listener-back', async (e) => {
  6194. let o = _factory(e);
  6195. o.tip.hide();
  6196. o.link.show();
  6197. });
  6198. doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
  6199. e.preventDefault();
  6200. if (!e.target.dataset.link) {
  6201. $(e.target).removeClass('listener-copy-all').addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank" class="pl-a">点击此处安装</a>👈`);
  6202. } else {
  6203. base.setClipboard(decodeURIComponent(e.target.dataset.link));
  6204. $(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
  6205. }
  6206. });
  6207. doc.on('click', '.listener-link-rpc', async (e) => {
  6208. let target = $(e.currentTarget);
  6209. target.find('.icon').remove();
  6210. target.find('.pl-loading').remove();
  6211. target.prepend(base.createLoading());
  6212. let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
  6213. if (res === 'success') {
  6214. $('.listener-rpc-task').show();
  6215. target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
  6216. } else if (res === 'assistant') {
  6217. target.addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank" class="pl-a">点击此处安装</a>👈`);
  6218. } else {
  6219. target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
  6220. }
  6221. });
  6222. doc.on('click', '.listener-send-rpc', (e) => {
  6223. $('.listener-link-rpc').click();
  6224. $(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
  6225. });
  6226. doc.on('click', '.listener-open-setting', () => {
  6227. base.showSetting();
  6228. });
  6229. doc.on('click', '.listener-rpc-task', () => {
  6230. let rpc = JSON.stringify({
  6231. domain: base.getValue('setting_rpc_domain'),
  6232. port: base.getValue('setting_rpc_port'),
  6233. }), url = `${pan.d}/?rpc=${base.e(rpc)}#${base.getValue('setting_rpc_token')}`;
  6234. GM_openInTab(url, {active: true});
  6235. });
  6236. document.documentElement.addEventListener('mouseup', (e) => {
  6237. if (e.target.nodeName === 'A' && ~e.target.className.indexOf('pl-a')) {
  6238. e.stopPropagation();
  6239. }
  6240. }, true);
  6241. },
  6242.  
  6243. addButton() {
  6244. if (!pt) return;
  6245. let $toolWrap;
  6246. let $button = $(`<div class="g-dropdown-button pointer pl-button"><div style="color:#fff;background: ${color};border-color:${color}" class="g-button g-button-blue"><span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span></div><div class="menu" style="width:auto;z-index:41;border-color:${color}"><div style="color:${color}" class="g-button-menu pl-button-mode" data-mode="api">API下载</div><div style="color:${color}" class="g-button-menu pl-button-mode" data-mode="aria">Aria下载</div><div style="color:${color}" class="g-button-menu pl-button-mode" data-mode="rpc">RPC下载</div><div style="color:${color}" class="g-button-menu pl-button-mode" data-mode="curl">cURL下载</div><div style="color:${color}" class="g-button-menu pl-button-mode" data-mode="bc">BC下载</div></div></div>`);
  6247. if (pt === 'home') $toolWrap = $(pan.btn.home);
  6248. if (pt === 'main') {
  6249. $toolWrap = $(pan.btn.main);
  6250. $button = $(`<div class="pl-button" style="position: relative; display: inline-block; margin-right: 8px;"><button class="u-button u-button--primary u-button--small is-round is-has-icon" style="background: ${color};border-color: ${color};font-size: 14px; padding: 8px 16px; border: none;"><i class="u-icon u-icon-download"></i><span>下载助手</span></button><ul class="dropdown-list nd-common-float-menu pl-dropdown-menu"><li class="sub cursor-p pl-button-mode" data-mode="api">API下载</li><li class="sub cursor-p pl-button-mode" data-mode="aria">Aria下载</li><li class="sub cursor-p pl-button-mode" data-mode="rpc">RPC下载</li><li class="sub cursor-p pl-button-mode" data-mode="curl">cURL下载</li><li class="sub cursor-p pl-button-mode" data-mode="bc" >BC下载</li></ul></div>`);
  6251. }
  6252. if (pt === 'share') $toolWrap = $(pan.btn.share);
  6253. $toolWrap.prepend($button);
  6254. this.setBDUSS();
  6255. this.addPageListener();
  6256. },
  6257.  
  6258. addInitButton() {
  6259. if (!pt) return;
  6260. let $toolWrap;
  6261. let $button = $(`<div class="g-dropdown-button pointer pl-button-init" style="opacity:.5"><div style="color:#fff;background: ${color};border-color:${color}" class="g-button g-button-blue"><span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span></div></div>`);
  6262. if (pt === 'home') $toolWrap = $(pan.btn.home);
  6263. if (pt === 'main') {
  6264. $toolWrap = $(pan.btn.main);
  6265. $button = $(`<div class="pl-button-init" style="opacity:.5; display: inline-block; margin-right: 8px;"><button class="u-button u-button--primary u-button--small is-round is-has-icon" style="background: ${color};border-color: ${color};font-size: 14px; padding: 8px 16px; border: none;"><i class="u-icon u-icon-download"></i><span>下载助手</span></button></div>`);
  6266. }
  6267. if (pt === 'share') $toolWrap = $(pan.btn.share);
  6268. $toolWrap.prepend($button);
  6269. $button.click(() => base.initDialog());
  6270. },
  6271.  
  6272. async getPCSLink() {
  6273. selectList = this.getSelectedList();
  6274. let fidList = this._getFidList(), url, res;
  6275.  
  6276. if (pt === 'home' || pt === 'main') {
  6277. if (selectList.length === 0) {
  6278. return message.error('提示:请先勾选要下载的文件!');
  6279. }
  6280. if (fidList.length === 2) {
  6281. return message.error('提示:请打开文件夹后勾选文件!');
  6282. }
  6283. fidList = encodeURIComponent(fidList);
  6284. url = `${pan.pcs[0]}&fsids=${fidList}`;
  6285. res = await base.get(url, {"User-Agent": pan.ua});
  6286. }
  6287. if (pt === 'share') {
  6288. this.getShareData();
  6289. if (selectList.length === 0) {
  6290. return message.error('提示:请先勾选要下载的文件!');
  6291. }
  6292. if (fidList.length === 2) {
  6293. return message.error('提示:请打开文件夹后勾选文件!');
  6294. }
  6295. if (!params.sign) {
  6296. let url = `${pan.pcs[2]}&surl=${params.surl}&logid=${params.logid}`;
  6297. let r = await base.get(url);
  6298. if (r.errno === 0) {
  6299. params.sign = r.data.sign;
  6300. params.timestamp = r.data.timestamp;
  6301. } else {
  6302. let dialog = await Swal.fire({
  6303. toast: true,
  6304. icon: 'info',
  6305. title: `提示:请将文件<span class="tag-danger">[保存到网盘]</span>👉前往<span class="tag-danger">[我的网盘]</span>中下载!`,
  6306. showConfirmButton: true,
  6307. confirmButtonText: '点击保存',
  6308. position: 'top',
  6309. });
  6310. if (dialog.isConfirmed) {
  6311. $('.tools-share-save-hb')[0].click();
  6312. }
  6313. return;
  6314. }
  6315. }
  6316. if (!params.bdstoken) {
  6317. return message.error('提示:请先登录网盘!');
  6318. }
  6319. let formData = new FormData();
  6320. formData.append('encrypt', params.encrypt);
  6321. formData.append('product', params.product);
  6322. formData.append('uk', params.uk);
  6323. formData.append('primaryid', params.primaryid);
  6324. formData.append('fid_list', fidList);
  6325. formData.append('logid', params.logid);
  6326. params.shareType === 'secret' ? formData.append('extra', params.extra) : '';
  6327. url = `${pan.pcs[1]}&sign=${params.sign}&timestamp=${params.timestamp}`;
  6328. res = await base.post(url, formData, {"User-Agent": pan.ua});
  6329. }
  6330. if (res.errno === 0) {
  6331. let html = this.generateDom(res.list);
  6332. this.showMainDialog(pan[mode][0], html, pan[mode][1]);
  6333. } else if (res.errno === 112) {
  6334. return message.error('提示:页面过期,请刷新重试!');
  6335. } else {
  6336. message.error('提示:获取下载链接失败!请刷新网页后重试!');
  6337. }
  6338. },
  6339.  
  6340. generateDom(list) {
  6341. let content = '<div class="pl-main">';
  6342. let alinkAllText = '';
  6343. base.sortByName(list);
  6344. list.forEach((v, i) => {
  6345. if (v.isdir === 1) return;
  6346. let filename = v.server_filename || v.filename;
  6347. let ext = base.getExtension(filename);
  6348. let size = base.sizeFormat(v.size);
  6349. let dlink = v.dlink;
  6350. if (mode === 'api') {
  6351. content += `<div class="pl-item">
  6352. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6353. <a class="pl-item-link pl-a listener-link-api" href="${dlink}" data-filename="${filename}" data-link="${dlink}" data-index="${i}">${dlink}</a>
  6354. <div class="pl-item-tip" style="display: none"><span>若没有弹出IDM下载框,找到IDM <b>选项</b> -> <b>文件类型</b> -> <b>第一个框</b> 中添加后缀 <span class="pl-ext">${ext}</span>,<a href="${pan.idm}" target="_blank" class="pl-a">详见此处</a></span> <span class="pl-back listener-back">返回</span></div>
  6355. <div class="pl-item-progress" style="display: none">
  6356. <div class="pl-progress">
  6357. <div class="pl-progress-outer"></div>
  6358. <div class="pl-progress-inner" style="width:5%">
  6359. <div class="pl-progress-inner-text">0%</div>
  6360. </div>
  6361. </div>
  6362. <span class="pl-progress-stop listener-stop">取消下载</span>
  6363. <span class="pl-progress-tip">未发现IDM,使用自带浏览器下载</span>
  6364. <span class="pl-progress-how listener-how">如何唤起IDM?</span>
  6365. </div></div>`;
  6366. }
  6367. if (mode === 'aria') {
  6368. let alink = this.convertLinkToAria(dlink, filename, pan.ua);
  6369. if (typeof (alink) === 'object') {
  6370. content += `<div class="pl-item">
  6371. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6372. <a class="pl-item-link pl-a" target="_blank" href="${alink.link}" title="点击复制aria2c链接" data-filename="${filename}" data-link="${alink.link}">${decodeURIComponent(alink.text)}</a> </div>`;
  6373. } else {
  6374. alinkAllText += alink + '\r\n';
  6375. content += `<div class="pl-item">
  6376. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6377. <a class="pl-item-link pl-a listener-link-aria" href="${alink}" title="点击复制aria2c链接" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  6378. }
  6379. }
  6380. if (mode === 'rpc') {
  6381. content += `<div class="pl-item">
  6382. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6383. <button class="pl-item-link listener-link-rpc pl-btn-primary pl-btn-info" data-filename="${filename}" data-link="${dlink}"><em class="icon icon-device"></em><span style="margin-left: 5px;">推送到 RPC 下载器</span></button></div>`;
  6384. }
  6385. if (mode === 'curl') {
  6386. let alink = this.convertLinkToCurl(dlink, filename, pan.ua);
  6387. if (typeof (alink) === 'object') {
  6388. content += `<div class="pl-item">
  6389. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6390. <a class="pl-item-link pl-a" target="_blank" href="${alink.link}" title="点击复制curl链接" data-filename="${filename}" data-link="${alink.link}">${decodeURIComponent(alink.text)}</a> </div>`;
  6391. } else {
  6392. alinkAllText += alink + '\r\n';
  6393. content += `<div class="pl-item">
  6394. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6395. <a class="pl-item-link pl-a listener-link-aria" href="${alink}" title="点击复制curl链接" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  6396. }
  6397. }
  6398. if (mode === 'bc') {
  6399. let alink = this.convertLinkToBC(dlink, filename, pan.ua);
  6400. if (typeof (alink) === 'object') {
  6401. content += `<div class="pl-item">
  6402. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6403. <a class="pl-item-link pl-a" href="${decodeURIComponent(alink.link)}" title="点击用比特彗星下载" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink.text)}</a> </div>`;
  6404. } else {
  6405. alinkAllText += alink + '\r\n';
  6406. content += `<div class="pl-item">
  6407. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  6408. <a class="pl-item-link pl-a" href="${decodeURIComponent(alink)}" title="点击用比特彗星下载" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  6409. }
  6410. }
  6411. });
  6412. content += '</div>';
  6413. if (mode === 'aria')
  6414. content += `<div class="pl-extra"><button class="pl-btn-primary listener-copy-all" data-link="${alinkAllText}">复制全部链接</button></div>`;
  6415. if (mode === 'rpc') {
  6416. let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
  6417. content += `<div class="pl-extra"><button class="pl-btn-primary listener-send-rpc">发送全部链接</button><button title="${rpc}" class="pl-btn-primary pl-btn-warning listener-open-setting" style="margin-left: 10px">设置 RPC 参数(当前为:${rpc})</button><button class="pl-btn-primary pl-btn-success listener-rpc-task" style="margin-left: 10px;display: none">查看下载任务</button></div>`;
  6418. }
  6419. if (mode === 'curl')
  6420. content += `<div class="pl-extra"><button class="pl-btn-primary listener-copy-all" data-link="${alinkAllText}">复制全部链接</button><button class="pl-btn-primary pl-btn-warning listener-open-setting" style="margin-left: 10px;">设置终端类型(当前为:${terminalType[base.getValue('setting_terminal_type')]})</button></div>`;
  6421. return content;
  6422. },
  6423.  
  6424. async sendLinkToRPC(filename, link) {
  6425. let rpc = {
  6426. domain: base.getValue('setting_rpc_domain'),
  6427. port: base.getValue('setting_rpc_port'),
  6428. path: base.getValue('setting_rpc_path'),
  6429. token: base.getValue('setting_rpc_token'),
  6430. dir: base.getValue('setting_rpc_dir'),
  6431. };
  6432. let BDUSS = this.getBDUSS();
  6433. if (!BDUSS) return 'assistant';
  6434.  
  6435. let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
  6436. let rpcData = {
  6437. id: new Date().getTime(),
  6438. jsonrpc: '2.0',
  6439. method: 'aria2.addUri',
  6440. params: [`token:${rpc.token}`, [link], {
  6441. dir: rpc.dir,
  6442. out: filename,
  6443. header: [`User-Agent: ${pan.ua}`, `Cookie: BDUSS=${BDUSS}`]
  6444. }]
  6445. };
  6446. try {
  6447. let res = await base.post(url, rpcData, {"User-Agent": pan.ua}, '');
  6448. if (res.result) return 'success';
  6449. return 'fail';
  6450. } catch (e) {
  6451. return 'fail';
  6452. }
  6453. },
  6454.  
  6455. getSelectedList() {
  6456. try {
  6457. return require('system-core:context/context.js').instanceForSystem.list.getSelected();
  6458. } catch (e) {
  6459. return document.querySelector('.wp-s-core-pan').__vue__.selectedList;
  6460. }
  6461. },
  6462.  
  6463. getLogid() {
  6464. let ut = require("system-core:context/context.js").instanceForSystem.tools.baseService;
  6465. return ut.base64Encode(base.getCookie("BAIDUID"));
  6466. },
  6467.  
  6468. getShareData() {
  6469. let res = locals.dump();
  6470. params.shareType = 'secret';
  6471. params.sign = '';
  6472. params.timestamp = '';
  6473. params.bdstoken = res.bdstoken.value;
  6474. params.channel = 'chunlei';
  6475. params.clienttype = 0;
  6476. params.web = 1;
  6477. params.app_id = 250528;
  6478. params.encrypt = 0;
  6479. params.product = 'share';
  6480. params.logid = this.getLogid();
  6481. params.primaryid = res.shareid.value;
  6482. params.uk = res.share_uk.value;
  6483. params.shareType === 'secret' && (params.extra = this._getExtra());
  6484. params.surl = this._getSurl();
  6485. },
  6486.  
  6487. detectPage() {
  6488. let path = location.pathname;
  6489. if (/^\/disk\/home/.test(path)) return 'home';
  6490. if (/^\/disk\/main/.test(path)) return 'main';
  6491. if (/^\/(s|share)\//.test(path)) return 'share';
  6492. return '';
  6493. return '';
  6494. },
  6495.  
  6496. showMainDialog(title, html, footer) {
  6497. Swal.fire({
  6498. title,
  6499. html,
  6500. footer,
  6501. allowOutsideClick: false,
  6502. showCloseButton: true,
  6503. showConfirmButton: false,
  6504. position: 'top',
  6505. width,
  6506. padding: '15px 20px 5px',
  6507. customClass,
  6508. }).then(() => {
  6509. this._resetData();
  6510. });
  6511. },
  6512.  
  6513. async initPanLinker() {
  6514. base.initDefaultConfig();
  6515. base.addPanLinkerStyle();
  6516. pt = this.detectPage();
  6517. let res = await base.post
  6518. (`https://api.youxiaohou.com/config?ver=${version}&a=${author}`, {}, {}, 'text');
  6519. pan = JSON.parse(base.d(res));
  6520. Object.freeze && Object.freeze(pan);
  6521. console.log(pan);
  6522. pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
  6523. base.createTip();
  6524. base.registerMenuCommand();
  6525. }
  6526. };
  6527.  
  6528. let main = {
  6529. init() {
  6530. if (/(pan|yun).baidu.com/.test(location.host)) {
  6531. baidu.initPanLinker();
  6532. }
  6533. }
  6534. };
  6535.  
  6536. main.init();
  6537. }
  6538. }
  6539. })();