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

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

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

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