4/12测试

完全免费、无广告、

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

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址