海阔视频解析

自用多功能脚本工具箱

目前為 2022-10-27 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name 海阔视频解析
  3. // @namespace xj
  4. // @version 6.6
  5. // @description 自用多功能脚本工具箱
  6. // @author
  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 *://*.pptv.com/*
  26. // @match *://item.taobao.com/*
  27. // @match *://chaoshi.detail.tmall.com/*
  28. // @match *://detail.tmall.com/*
  29. // @match *://detail.tmall.hk/*
  30. // @match *://item.jd.com/*
  31. // @match *://*.yiyaojd.com/*
  32. // @match *://*.liangxinyao.com/*
  33. // @match *://music.163.com/*
  34. // @match *://y.qq.com/*
  35. // @match *://*.kugou.com/*
  36. // @match *://*.kuwo.cn/*
  37. // @match *://*.ximalaya.com/*
  38. // @match *://*.zhihu.com/*
  39. // @match *://*.douyin.com/*
  40. // @match *://*.kuaishou.com/*
  41. // @match *://*.ixigua.com/*
  42. // @exclude *://*.zhmdy.top/*
  43. // @exclude *://*.eggvod.cn/*
  44. // @connect d.pcs.baidu.com
  45. // @connect baidu.com
  46. // @connect baidupcs.com
  47. // @connect youxiaohou.com
  48. // @connect localhost
  49. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js
  50. // @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/limonte-sweetalert2/11.4.4/sweetalert2.all.min.js
  51. // @original-script https://gf.qytechs.cn/scripts/376078
  52. // @original-author zhmai
  53. // @original-license GPL License
  54. // @original-script https://github.com/syhyz1990/baiduyun/blob/master/baiduyun.user.js
  55. // @original-author youxiaohou
  56. // @original-license AGPL License
  57. // @original-changes 将强制关注公众号改为非强制。
  58. // @antifeature referral-link 此提示为GreasyFork代码规范要求含有查券功能的脚本必须添加,实际使用无任何强制跳转,代码可查,请知悉。
  59. // @license AGPL License
  60. // @grant GM_download
  61. // @grant GM_openInTab
  62. // @grant GM_setValue
  63. // @grant GM_getValue
  64. // @grant GM_deleteValue
  65. // @grant GM_xmlhttpRequest
  66. // @grant GM_addStyle
  67. // @grant unsafeWindow
  68. // @grant GM_setClipboard
  69. // @grant GM_getResourceURL
  70. // @grant GM_getResourceText
  71. // @grant GM_info
  72. // @grant GM_registerMenuCommand
  73. // @grant GM_cookie
  74. // @connect iesdouyin.com
  75. // ==/UserScript==
  76. (function() {
  77. 'use strict';
  78. var domHead = document.getElementsByTagName('head')[0];
  79. var domStyle = document.createElement('style');
  80. domStyle.type = 'text/css';
  81. domStyle.rel = 'stylesheet';
  82. //平台判断
  83. var isMobile = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent);
  84. if(isMobile){
  85. let playLine = [
  86. {"name":"纯净1","url":"https://z1.m1907.top/?jx="},
  87. {"name":"B站1","url":"https://jx.bozrc.com:4433/player/?url="},
  88. {"name":"爱豆","url":"https://jx.aidouer.net/?url="},
  89. {"name":"CHok","url":"https://www.gai4.com/?url="},
  90. {"name":"OK","url":"https://okjx.cc/?url="},
  91. {"name":"RDHK","url":"https://jx.rdhk.net/?v="},
  92. {"name":"人人迷","url":"https://jx.blbo.cc:4433/?url="},
  93. {"name":"思古3","url":"https://jsap.attakids.com/?url="},
  94. {"name":"听乐","url":"https://jx.dj6u.com/?url="},
  95. {"name":"MAO","url":"https://www.mtosz.com/m3u8.php?url="},
  96. {"name":"盖世","url":"https://www.gai4.com/?url="},
  97. {"name":"4K","url":"https://jx.4kdv.com/?url="},
  98. ];
  99. 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'];
  100. if(useWeb.indexOf(location.host) == -1){
  101. console.log('不是应用网站');return;
  102. }
  103. function setCookie(cname,cvalue,exdays){
  104. var d = new Date();
  105. d.setTime(d.getTime()+(exdays*24*60*60*1000));
  106. var expires = "expires="+d.toGMTString();
  107. document.cookie = cname+"="+cvalue+"; "+expires;
  108. }
  109. function getCookie(cname){
  110. var name = cname + "=";
  111. var ca = document.cookie.split(';');
  112. for(var i=0; i<ca.length; i++) {
  113. var c = ca[i].trim();
  114. if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
  115. }
  116. return "";
  117. }
  118. function createElement(dom,domId){
  119. var rootElement = document.body;
  120. var newElement = document.createElement(dom);
  121. newElement.id = domId;
  122. var newElementHtmlContent = document.createTextNode('');
  123. rootElement.appendChild(newElement);
  124. newElement.appendChild(newElementHtmlContent);
  125. }
  126. function toast(msg,duration){
  127. duration=isNaN(duration)?3000:duration;
  128. let toastDom = document.createElement('div');
  129. toastDom.innerHTML = msg;
  130. 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;'
  131. document.body.appendChild(toastDom);
  132. setTimeout(function() {
  133. var d = 0.5;
  134. toastDom.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
  135. toastDom.style.opacity = '0';
  136. setTimeout(function() { document.body.removeChild(toastDom) }, d * 1000);
  137. }, duration);
  138. }
  139. function playVideoFunc(){
  140. //css
  141. let playVideoStyle = `
  142. .zhm_play_vidoe_icon{
  143. padding-top:2px;cursor:pointer;
  144. z-index:9999999;
  145. display:block;
  146. position:fixed;let:0px;top:360px;text-align:center;overflow:visible
  147. }
  148. .zhm_play_video_wrap{
  149. position:fixed;left:40px;top:360px;
  150. z-index:9999999;
  151. overflow: hidden;
  152. width:300px;
  153. }
  154. .zhm_play_video_line{
  155. width:320px;
  156. height:316px;
  157. overflow-y:scroll;
  158. overflow-x:hidden;
  159. }
  160. .zhm_play_vide_line_ul{
  161. width:300px;
  162. display: flex;
  163. justify-content: flex-start;
  164. flex-flow: row wrap;
  165. list-style: none;
  166. padding:0px;
  167. margin:0px;
  168. }
  169. .zhm_play_video_line_ul_li{
  170. padding:4px 0px;
  171. margin:2px;
  172. width:30%;
  173. color:#FFF;
  174. text-align:center;
  175. background-color:#f24443;
  176. box-shadow:0px 0px 10px #fff;
  177. font-size:14px;
  178. }
  179. .zhm_play_video_line_ul_li:hover{
  180. color:#260033;
  181. background-color:#fcc0c0
  182. }
  183. .zhm_line_selected{
  184. color:#260033;
  185. background-color:#fcc0c0
  186. }
  187. .zhm_play_video_jx{
  188. width:100%;
  189. height:100%;
  190. z-index:999999;
  191. position: absolute;top:0px;padding:0px;
  192. }
  193. `;
  194. domStyle.appendChild(document.createTextNode(playVideoStyle));
  195. domHead.appendChild(domStyle);
  196. //template:icon,playLine;
  197. 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'>";
  198. playWrapHtml += "<div class='playLineDiv zhm_play_video_wrap' style='display:none;'>"
  199. playWrapHtml += "<div class='zhm_play_video_line'>";
  200. playWrapHtml +="<div><ul class='zhm_play_vide_line_ul'>";
  201. playLine.forEach(function(item){
  202. let selected = '';
  203. if(getCookie('playLineAction') == item.url){
  204. selected='zhm_line_selected';
  205. }
  206. playWrapHtml +=`<li class='playLineTd zhm_play_video_line_ul_li ${selected}' url='${item.url}' >${item.name}</li>`;
  207. })
  208. playWrapHtml +="</div></div></div>";
  209. //template:node;播放区域
  210. let playJxHtml = "<div class='zhm_play_video_jx'>";
  211. playJxHtml += "<iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='playIframe'></iframe></div>";
  212. //循环判断是否在播放页,是则执行下面
  213. let jxVideoData = [
  214. {funcName:"playVideo", node:".player__container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  215. {funcName:"playVideo", node:"#player-container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  216. {funcName:"playVideo", node:".container-player" ,match:/v\.qq\.com\/x\/page/,areaClassName:'mod_episode'},
  217. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/m\/play\?cid/},
  218. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/play\.html\?cid=/},
  219. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/play\.html\?cid\=/},
  220. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/cover\/.*html/},
  221. {funcName:"playVideo", node:"#flashbox",match:/^https:\/\/www\.iqiyi\.com\/[vwa]\_/,areaClassName:'qy-episode-num',name:'iqiyiPc'},
  222. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https:\/\/m.iqiyi\.com\/[vwa]\_/,areaClassName:'m-sliding-list'},
  223. {funcName:"playVideo", node:".intl-video-wrap",match:/^https:\/\/www\.iq\.com\/play\//,areaClassName:'m-sliding-list'},
  224. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/alipay_video\/id_/},
  225. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/video\/id_/},
  226. {funcName:"playVideo", node:"#player",match:/v\.youku\.com\/v_show\/id_/},
  227. {funcName:"playVideo", node:"#bilibili-player",nodeType:'id',match:/www\.bilibili\.com\/video/,name:'biliPc',areaClassName:'video-episode-card'},
  228. {funcName:"playVideo", node:"#player_module",nodeType:'id',match:/www\.bilibili\.com\/bangumi/,areaClassName:'ep-list-wrapper report-wrap-module'},
  229. {funcName:"playVideo", node:".player-container",nodeType:'class',match:/m\.bilibili\.com\/bangumi/,areaClassName:'ep-list-pre-container no-wrap'},
  230. {funcName:"playVideo", node:".mplayer",nodeType:'class',match:/m\.bilibili\.com\/video\//},
  231. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  232. {funcName:"playVideo", node:"#mgtv-player-wrap",nodeType:'id',match:/mgtv\.com\/b/,areaClassName:'episode-items clearfix'},
  233. {funcName:"playVideo", node:".x-player",nodeType:'class',match:/tv\.sohu\.com\/v/},
  234. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  235. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com\/album\//},
  236. {funcName:"playVideo", node:"#le_playbox",nodeType:'id',match:/le\.com\/ptv\/vplay\//,areaClassName:'juji_grid'},
  237. {funcName:"playVideo", node:"#player",nodeType:'id',match:/play\.tudou\.com\/v_show\/id_/},
  238. {funcName:"playVideo", node:"#pptv_playpage_box",nodeType:'id',match:/v\.pptv\.com\/show\//},
  239. {funcName:"playVideo", node:"#player",nodeType:'id',match:/vip\.1905.com\/play\//},
  240. {funcName:"playVideo", node:"#vodPlayer",nodeType:'id',match:/www\.1905.com\/vod\/play\//},
  241. ];
  242. //创建logo_icon
  243. createElement('div','zhmIcon');
  244. let zhmPlay = document.getElementById('zhmIcon');
  245. zhmPlay.innerHTML = playWrapHtml;
  246. let jxVideoWeb = jxVideoData.filter(function(item){
  247. return location.href.match(item.match);
  248. })
  249. document.querySelector('#zhmlogo').addEventListener('click',function(){
  250. let jxVideoWeb = jxVideoData.filter(function(item){
  251. return location.href.match(item.match);
  252. })
  253. if(jxVideoWeb.length == 0){
  254. toast('请在视频播放页点击图标');
  255. }else{
  256. var {funcName,match:nowMatch,node:nowNode,name:nowName} = jxVideoWeb[0];
  257. let playLineDiv = document.querySelector('.zhm_play_video_wrap');
  258. let playShow = playLineDiv.style.display;
  259. playShow == 'none'? playLineDiv.style.display = 'block':playLineDiv.style.display = 'none';
  260. var playLineTd = document.querySelectorAll('.playLineTd');
  261. playLineTd.forEach(function(item){
  262. item.addEventListener('click',function(){
  263. playLineTd.forEach(function(e){
  264. e.setAttribute('class','playLineTd zhm_play_video_line_ul_li');
  265. })
  266. this.setAttribute('class','playLineTd zhm_play_video_line_ul_li zhm_line_selected');
  267. setCookie('playLineAction',this.getAttribute('url'),30);
  268. let nowWebNode = document.querySelector(nowNode);
  269. if(nowWebNode){
  270. nowWebNode.innerHTML = playJxHtml;
  271. let playIframe = document.querySelector('#playIframe');
  272. playIframe.src= item.getAttribute('url')+location.href;
  273. }else{
  274. console.log('视频网站结点不存在');
  275. }
  276. })
  277. })
  278. return false;
  279. }
  280. })
  281. document.addEventListener('click',function(e){
  282. let i=0;
  283. e.path.forEach(function(item){
  284. if(item.className=='iconLogo'){
  285. i=1;
  286. console.log(i);
  287. }
  288. })
  289. if(i==0){
  290. let isShow = document.querySelector('.zhm_play_video_wrap').style.display;
  291. if(isShow == 'block'){
  292. document.querySelector('.zhm_play_video_wrap').style.display='none';
  293. }
  294. }
  295. })
  296. }
  297. playVideoFunc();
  298. }else{
  299. /*--config--*/
  300. var Config ={
  301. couponUrl:window.location.href,
  302. couponHost:window.location.host,
  303. zhmApiUrl:'https://www.eggvod.cn/',
  304. iconVipTop:360,
  305. iconVipPosition : 'left',
  306. iconVipWidth : 40,
  307. jxCodeInfo : {'in':81516699,'code':4},
  308. couponTimerNum : 100,//100次等于10秒
  309. couponWaitTime : 100,
  310. iconWaitTime : 100,
  311. selectedLeft:'selected',
  312. selectedRight:'',
  313. videoPlayLineAdd:GM_getValue('videoPlayLineAdd',0),
  314. dyVideoDownload:GM_getValue('dyVideoDownload',22),
  315. ksVideoDownload:GM_getValue('ksVideoDownload',22),
  316. xiguaVideoDownload:GM_getValue('xiguaVideoDownload',22),
  317. biliVideoDownload:GM_getValue('biliVideoDownload',22),
  318. }
  319. var {couponUrl,
  320. couponHost,
  321. zhmApiUrl,
  322. iconVipTop,
  323. iconVipPosition,
  324. iconVipWidth,
  325. jxCodeInfo,
  326. couponTimerNum,
  327. couponWaitTime,
  328. iconWaitTime,
  329. selectedLeft,
  330. selectedRight,
  331. videoPlayLineAdd,
  332. dyVideoDownload,
  333. ksVideoDownload,
  334. xiguaVideoDownload,
  335. biliVideoDownload
  336. } = Config;
  337. /*--lang--*/
  338. var lang = {
  339. set:'设置',
  340. iconPosition:'图标位置',
  341. playVideo:'视频解析',
  342. playMusic:'音乐下载',
  343. zhNice:'知乎增强',
  344. videoDownload:'视频下载',
  345. baiduDownload:'百度下载',
  346. iconHeight:'图标高度',
  347. iconWidth:'图标大小',
  348. iconLine:'水平位置',
  349. iconWaitTime:'等待时间',
  350. iconLeft:'靠左',
  351. iconRight:'靠右',
  352. tipIconHeight:'默认360,建议1~500',
  353. tipIconWidth:'默认40,建议20~50',
  354. tipErrorIconHeight:'<图标位置>中的<图标高度>应为1000以内正整数,建议1~500',
  355. tipErrorIconWidth:'<图标位置>中的<图标大小>应为100以内正整数,建议20~50',
  356. setPlayVideo:'解析设置',
  357. playVideoLineAdd:'添加线路',
  358. tipPlayVideoLineAdd:'请输入线路名称和解析地址,例:"线路六https://jx.zdy.com/?url=",每线路一行。',
  359. zhSet:'知乎设置',
  360. zhVideoClose:'屏蔽视频',
  361. zhVideoDownload:'视频下载',
  362. zhADClose:'屏蔽广告',
  363. zhCloseLeft:'关闭侧边栏',
  364. zhChangeLink:'链接直接跳转',
  365. specialColumn:'标记文章',
  366. videoTitle:'标记视频',
  367. zhKeywordClose:'屏蔽关键词',
  368. tipKeyword:'请输入关键词,用","号隔开',
  369. authorNameClose:'屏蔽用户',
  370. tipAuthorName:'请输入用户名,用","号隔开',
  371. yanxuanClose:'屏蔽盐选',
  372. dyVideoDownload:'抖音下载',
  373. ksVideoDownload:'快手下载',
  374. xiguaVideoDownload:'西瓜下载',
  375. biliVideoDownload:'B站 (bilibili) 下载',
  376. question:'常见问题',
  377. qqGroup:'交流群',
  378. reward:'打赏',
  379. redReward:'红包',
  380. thank:'感谢',
  381. };
  382. /*--datas--*/
  383. var datas = {
  384. getCoupon:[{isOpen:22,web:[
  385. {funcName:"coupon",name:"taobao",node:".J_LinkAdd",match:/item\.taobao\.com/},
  386. {funcName:"coupon",name:"tmallCaoshi",node:"#J_LinkBuy",match:/^https?:\/\/chaoshi.detail.tmall.com\//},
  387. {funcName:"coupon",name:"tmall",node:".BasicContent--actions--1co8sx8",match:/^https?:\/\/detail\.tmall\.com/},
  388. {funcName:"coupon",name:"tmall",node:"#J_LinkBuy",match:/^https?:\/\/detail\.tmall\.com/},
  389. {funcName:"coupon",name:"tmallOther",node:".tm-msg-box",match:/^https?:\/\/detail\.tmall\.com/},
  390. {funcName:"coupon",name:"tmall",node:"#J_LinkBuy",match:/^https?:\/\/detail\.tmall\.hk/},
  391. {funcName:"coupon",name:"jd",node:"#choose-btns",match:/item\.jd\.com/},
  392. {funcName:"coupon",name:"jd",node:"#choose-btns",match:/\.yiyaojd\.com/},
  393. ]}],
  394. jxVideo:[{isOpen:GM_getValue('movieList','22'),web:[
  395. {funcName:"playVideo",match:/https?:\/\/v\.qq\.com/,name:'qqPC'},
  396. {funcName:"playVideo", match:/https?:\/\/m\.v\.qq\.com/,name:'qqMobile'},
  397. {funcName:"playVideo", match:/^https?:\/\/www\.iqiyi\.com/,name:'iqiyiPc'},
  398. {funcName:"playVideo", match:/^https?:\/\/www\.iq\.com/},
  399. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https?:\/\/m.iqiyi\.com/,areaClassName:'m-sliding-list'},
  400. {funcName:"playVideo", node:"#player",nodeType:'id',match:/m\.youku\.com\/alipay_video\/id_/},
  401. {funcName:"playVideo", node:"#player",nodeType:'id',match:/m\.youku\.com\/video\/id_/},
  402. {funcName:"playVideo", match:/^https?:\/\/.*youku\.com/},
  403. {funcName:"playVideo", match:/^https?:\/\/www\.bilibili\.com/},
  404. {funcName:"playVideo", match:/^https?:\/\/m\.bilibili\.com/},
  405. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  406. {funcName:"playVideo", match:/mgtv\.com/,areaClassName:'episode-items clearfix'},
  407. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/.tv\.sohu\.com/},
  408. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  409. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com/},
  410. {funcName:"playVideo", match:/tudou\.com/},
  411. {funcName:"playVideo",match:/le\.com/},
  412. {funcName:"playVideo",match:/pptv\.com/},
  413. {funcName:"playVideo",match:/1905\.com/},
  414. ]}],
  415. jxMusic:[{isOpen:GM_getValue('musicList','22'),web:[
  416. {funcName:"playMusic",name:'netease',match:/^https?:\/\/music\.163\.com/,tip:'请在音乐单曲页点击图标下载'},
  417. {funcName:"playMusic",name:'qq',match:/^https?:\/\/y\.qq\.com/,tip:'请点击播放需要下载的歌曲,在播放页点击图标下载'},
  418. {funcName:"playMusic",name:'kugou',match:/kugou\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'},
  419. {funcName:"playMusic",name:'kuwo',match:/kuwo\.cn/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'},
  420. {funcName:"playMusic",name:'ximalaya',match:/^https?:\/\/www\.ximalaya\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"'}
  421. ]}],
  422. playLine:[
  423. {"name":"纯净1","url":"https://z1.m1907.top/?jx=","mobile":1},
  424. {"name":"B站1","url":"https://jx.bozrc.com:4433/player/?url=","mobile":1},
  425. {"name":"爱豆","url":"https://jx.aidouer.net/?url=","mobile":1},
  426. {"name":"BL","url":"https://vip.bljiex.com/?v=","mobile":0},
  427. {"name":"冰豆","url":"https://api.qianqi.net/vip/?url=","mobile":0},
  428. {"name":"百域","url":"https://jx.618g.com/?url=","mobile":0},
  429. {"name":"CK","url":"https://www.ckplayer.vip/jiexi/?url=","mobile":0},
  430. {"name":"CHok","url":"https://www.gai4.com/?url=","mobile":1},
  431. {"name":"ckmov","url":"https://www.ckmov.vip/api.php?url=","mobile":0},
  432. {"name":"H8","url":"https://www.h8jx.com/jiexi.php?url=","mobile":0},
  433. {"name":"JY","url":"https://jx.playerjy.com/?url=","mobile":0},
  434. {"name":"解析","url":"https://ckmov.ccyjjd.com/ckmov/?url=","mobile":0},
  435. {"name":"解析la","url":"https://api.jiexi.la/?url=","mobile":0},
  436. {"name":"老板","url":"https://vip.laobandq.com/jiexi.php?url=","mobile":0},
  437. {"name":"MAO","url":"https://www.mtosz.com/m3u8.php?url=","mobile":0},
  438. {"name":"M3U8","url":"https://jx.m3u8.tv/jiexi/?url=","mobile":0},
  439. {"name":"诺讯","url":"https://www.nxflv.com/?url=","mobile":0},
  440. {"name":"OK","url":"https://okjx.cc/?url=","mobile":1},
  441. {"name":"PM","url":"https://www.playm3u8.cn/jiexi.php?url=","mobile":0},
  442. {"name":"盘古","url":"https://www.pangujiexi.cc/jiexi.php?url=","mobile":0},
  443. {"name":"七哥","url":"https://jx.mmkv.cn/tv.php?url=","mobile":0},
  444. {"name":"RDHK","url":"https://jx.rdhk.net/?v=","mobile":1},
  445. {"name":"人人迷","url":"https://jx.blbo.cc:4433/?url=","mobile":1},
  446. {"name":"思云","url":"https://jx.ap2p.cn/?url=","mobile":0},
  447. {"name":"思古3","url":"https://jsap.attakids.com/?url=","mobile":1},
  448. {"name":"听乐","url":"https://jx.dj6u.com/?url=","mobile":1},
  449. {"name":"维多","url":"https://jx.ivito.cn/?url=","mobile":0},
  450. {"name":"虾米","url":"https://jx.xmflv.com/?url=","mobile":0},
  451. {"name":"云端","url":"https://sb.5gseo.net/?url=","mobile":0},
  452. {"name":"云析","url":"https://jx.yparse.com/index.php?url=","mobile":0},
  453. {"name":"0523","url":"https://go.yh0523.cn/y.cy?url=","mobile":0},
  454. {"name":"17云","url":"https://www.1717yun.com/jx/ty.php?url=","mobile":0},
  455. {"name":"180","url":"https://jx.000180.top/jx/?url=","mobile":0},
  456. {"name":"4K","url":"https://jx.4kdv.com/?url=","mobile":1},
  457. {"name":"8090","url":"https://www.8090g.cn/?url=","mobile":0}
  458. ],
  459. zhNice:[{isOpen:GM_getValue('zhihuList','22'),web:[
  460. {funcName:'zhNice',match:/^https?:\/\/[a-z]+\.zhihu\.com/}
  461. ]}],
  462. videoDownload:[{isOpen:GM_getValue('videoDownloadList','22'),web:[
  463. {funcName:'videoDownload',name:'dyVideoDownload',match:/^https?:\/\/www\.douyin\.com\/?.+$/,isWebOpen:dyVideoDownload},
  464. {funcName:'videoDownload',name:'ksVideoDownload',match:/^https?:\/\/www\.kuaishou\.com\/?.+$/,isWebOpen:ksVideoDownload},
  465. //{funcName:'videoDownload',name:'xiguaVideoDownload',match:/^https?:\/\/www\.ixigua\.com\/[0-9]+\?.+$/,isWebOpen:xiguaVideoDownload},
  466. {funcName:'videoDownload',name:'xiguaVideoDownload',match:/^https?:\/\/www\.ixigua\.com\//,isWebOpen:xiguaVideoDownload},
  467. {funcName:'videoDownload',name:'biliVideoDownload',match:/^https?:\/\/www\.bilibili\.com\//,isWebOpen:biliVideoDownload}
  468. ]}],
  469. baidu:[{isOpen:GM_getValue('baiduList','22'),web:[
  470. {funcName:'baidu',match:/https?:\/\/pan\.baidu\.com/}
  471. ]}],
  472. keyCode:[
  473. {code:48,isShift:false,value:'0'},
  474. {code:48,isShift:true,value:')'},
  475. {code:49,isShift:false,value:'1'},
  476. {code:49,isShift:true,value:'!'},
  477. {code:50,isShift:false,value:'2'},
  478. {code:50,isShift:true,value:'@'},
  479. {code:51,isShift:false,value:'3'},
  480. {code:51,isShift:true,value:'#'},
  481. {code:52,isShift:false,value:'4'},
  482. {code:52,isShift:true,value:'$'},
  483. {code:53,isShift:false,value:'5'},
  484. {code:53,isShift:true,value:'%'},
  485. {code:54,isShift:false,value:'6'},
  486. {code:54,isShift:true,value:'^'},
  487. {code:55,isShift:false,value:'7'},
  488. {code:55,isShift:true,value:'&'},
  489. {code:56,isShift:false,value:'8'},
  490. {code:56,isShift:true,value:'*'},
  491. {code:57,isShift:false,value:'9'},
  492. {code:57,isShift:true,value:'('},
  493. {code:70,isShift:false,value:'f'},
  494. {code:70,isShift:true,value:'F'},
  495. {code:74,isShift:false,value:'j'},
  496. {code:74,isShift:true,value:'J'},
  497. {code:75,isShift:false,value:'k'},
  498. {code:75,isShift:true,value:'K'},
  499. {code:76,isShift:false,value:'l'},
  500. {code:76,isShift:true,value:'L'},
  501. ],
  502. downloadOption:[{name:'直接下载',id:'toDownload'},{name:'复制链接',id:'toCopy'},{name:'打开文件',id:'toLink'}]
  503. }
  504. var {getCoupon,jxVideo,jxMusic,playLine,zhNice,videoDownload,keyCode,downloadOption,baidu} = datas;
  505. /*--Class--*/
  506. class BaseClass{
  507. constructor(){
  508. if(GM_getValue('iconPositionSetPage') != 0){
  509. iconVipTop = this.getCookie('iconTop')?this.getCookie('iconTop'):iconVipTop;
  510. iconVipPosition = this.getCookie('iconPosition')?this.getCookie('iconPosition'):iconVipPosition;
  511. selectedLeft = iconVipPosition=='left'?'selected':'';
  512. selectedRight = iconVipPosition=='right'?'selected':'';
  513. iconVipWidth = this.getCookie('iconWidth')?this.getCookie('iconWidth'):iconVipWidth;
  514. iconWaitTime = GM_getValue('iconWaitTime')?GM_getValue('iconWaitTime')*1000:iconWaitTime;
  515. }
  516. GM_registerMenuCommand("设置", () => this.menuSet());
  517. }
  518. menuSet(){
  519. var _this = this;
  520. let menuSetStyle = `
  521. .zhmMask{
  522. z-index:999999999;
  523. background-color:#000;
  524. position: fixed;top: 0;right: 0;bottom: 0;left: 0;
  525. opacity:0.8;
  526. }
  527. .wrap-box{
  528. z-index:1000000000;
  529. position:fixed;;top: 50%;left: 50%;transform: translate(-50%, -200px);
  530. width: 300px;
  531. color: #555;
  532. background-color: #fff;
  533. border-radius: 5px;
  534. overflow:hidden;
  535. font:16px numFont,PingFangSC-Regular,Tahoma,Microsoft Yahei,sans-serif !important;
  536. font-weight:400 !important;
  537. }
  538. .setWrapHead{
  539. background-color:#f24443;height:40px;color:#fff;text-align:center;line-height:40px;
  540. }
  541. .setWrapLi{
  542. margin:0px;padding:0px;
  543. }
  544. .setWrapLi li{
  545. background-color: #fff;
  546. border-bottom:1px solid #eee;
  547. margin:0px !important;
  548. padding:12px 20px;
  549. display: flex;
  550. justify-content: space-between;align-items: center;
  551. list-style: none;
  552. }
  553. .setWrapLiContent{
  554. display: flex;justify-content: space-between;align-items: center;
  555. }
  556. .setWrapSave{
  557. position:absolute;top:-2px;right:10px;font-size:24px;cursor:pointer
  558. }
  559. .iconSetFoot{
  560. position:absolute;bottom:0px;padding:10px 20px;width:100%;
  561. z-index:1000000009;background:#fef9ef;
  562. }
  563. .iconSetFootLi{
  564. margin:0px;padding:0px;
  565. }
  566. .iconSetFootLi li{
  567. display: inline-flex;
  568. padding:0px 2px;
  569. justify-content: space-between;align-items: center;
  570. font-size: 12px;
  571. }
  572. .iconSetFootLi li a{
  573. color:#555;
  574. }
  575. .iconSetFootLi a:hover {
  576. color:#fe6d73;
  577. }
  578. .iconSetPage{
  579. z-index:1000000001;
  580. position:absolute;top:0px;left:300px;
  581. background:#fff;
  582. width:300px;
  583. height:100%;
  584. }
  585. .iconSetUlHead{
  586. padding:0px;
  587. margin:0px;
  588. }
  589. .iconSetPageHead{
  590. border-bottom:1px solid #ccc;
  591. height:40px;
  592. line-height:40px;
  593. display: flex;
  594. justify-content: space-between;
  595. align-items: center;
  596. background-color:#fe6d73;
  597. color:#fff;
  598. font-size: 15px;
  599. }
  600. .iconSetPageLi{
  601. margin:0px;padding:0px;
  602. }
  603. .iconSetPageLi li{
  604. list-style: none;
  605. padding:8px 20px;
  606. }
  607. .zhihuSetPage{
  608. z-index:1000000002;position:absolute;top:0px;left:300px;background:#fff;width:300px;height:100%;
  609. }
  610. .iconSetPageInput{
  611. display: flex !important;justify-content: space-between;align-items: center;
  612. }
  613. .zhihuSetPageLi{
  614. margin:0px;padding:0px;
  615. height:300px;
  616. overflow-y: scroll;
  617. }
  618. .zhihuSetPageLi::-webkit-scrollbar {
  619. /*滚动条整体样式*/
  620. width : 2px; /*高宽分别对应横竖滚动条的尺寸*/
  621. height: 1px;
  622. }
  623. .zhihuSetPageLi::-webkit-scrollbar-thumb {
  624. /*滚动条里面小方块*/
  625. border-radius : 2px;
  626. background-color: #fe6d73;
  627. }
  628. .zhihuSetPageLi::-webkit-scrollbar-track {
  629. /*滚动条里面轨道*/
  630. box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2);
  631. background : #ededed;
  632. border-radius: 10px;
  633. }
  634. .zhihuSetPageLi li{
  635. border-bottom:1px solid #eee;padding:12px 20px;display:block;
  636. }
  637. .zhihuSetPageContent{
  638. display: flex !important;justify-content: space-between;align-items: center;
  639. }
  640. .circular{
  641. width: 40px;height: 20px;border-radius: 16px;transition: .3s;cursor: pointer;box-shadow: 0 0 3px #999 inset;
  642. }
  643. .round-button{
  644. width: 20px;height: 20px;;border-radius: 50%;box-shadow: 0 1px 5px rgba(0,0,0,.5);transition: .3s;position: relative;
  645. }
  646. .back{
  647. 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;
  648. }
  649. .to-right{
  650. margin-left:20px; display: inline-block; padding: 3px;transform: rotate(-45deg); -webkit-transform: rotate(-45deg);cursor:pointer;
  651. }
  652. .iconSetSave{
  653. font-size:24px;cursor:pointer;margin-right:5px;margin-bottom:4px;color:#FFF;
  654. }
  655. .zhm_set_page{
  656. z-index:1000000003;
  657. position:absolute;
  658. top:0px;left:300px;
  659. background:#fff;
  660. width:300px;
  661. height:100%;
  662. }
  663. .zhm_set_page_header{
  664. border-bottom:1px solid #ccc;
  665. height:40px;
  666. line-height:40px;
  667. display: flex;
  668. justify-content: space-between;
  669. align-items: center;
  670. background-color:#fe6d73;
  671. color:#fff;
  672. font-size: 15px;
  673. }
  674. .zhm_set_page_content{
  675. display: flex !important;justify-content: space-between;align-items: center;
  676. }
  677. .zhm_set_page_list{
  678. margin:0px;padding:0px;
  679. }
  680. .zhm_set_page_list li{
  681. /*border-bottom:1px solid #ccc;*/
  682. padding:12px 20px;
  683. display:block;
  684. border-bottom:1px solid #eee;
  685. }
  686. li:last-child{
  687. border-bottom:none;
  688. }
  689. /*-form-*/
  690. :root {
  691. --base-color: #434a56;
  692. --white-color-primary: #f7f8f8;
  693. --white-color-secondary: #fefefe;
  694. --gray-color-primary: #c2c2c2;
  695. --gray-color-secondary: #c2c2c2;
  696. --gray-color-tertiary: #676f79;
  697. --active-color: #227c9d;
  698. --valid-color: #c2c2c2;
  699. --invalid-color: #f72f47;
  700. --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");
  701. }
  702. .text-input {
  703. font-size: 16px;
  704. position: relative;
  705. right:0px;
  706. z-index: 0;
  707. }
  708. .text-input__body {
  709. -webkit-appearance: none;
  710. -moz-appearance: none;
  711. appearance: none;
  712. background-color: transparent;
  713. border: 1px solid var(--gray-color-primary);
  714. border-radius: 3px;
  715. height: 1.7em;
  716. line-height: 1.7;
  717. overflow: hidden;
  718. padding: 2px 1em;
  719. text-overflow: ellipsis;
  720. transition: background-color 0.3s;
  721. width:55%;
  722. font-size:14px;
  723. }
  724. .text-input__body:-ms-input-placeholder {
  725. color: var(--gray-color-secondary);
  726. }
  727. .text-input__body::-moz-placeholder {
  728. color: var(--gray-color-secondary);
  729. }
  730. .text-input__body::placeholder {
  731. color: var(--gray-color-secondary);
  732. }
  733. *, ::after, ::before {
  734. box-sizing: initial !important;
  735. }
  736. .text-input__body[data-is-valid] {
  737. padding-right: 1em;
  738. }
  739. .text-input__body[data-is-valid=true] {
  740. border-color: var(--valid-color);
  741. }
  742. .text-input__body[data-is-valid=false] {
  743. border-color: var(--invalid-color);
  744. box-shadow: inset 0 0 0 1px var(--invalid-color);
  745. }
  746. .text-input__body:focus {
  747. border-color: var(--active-color);
  748. box-shadow: inset 0 0 0 1px var(--active-color);
  749. outline: none;
  750. }
  751. .text-input__body:-webkit-autofill {
  752. transition-delay: 9999s;
  753. -webkit-transition-property: background-color;
  754. transition-property: background-color;
  755. }
  756. .text-input__validator {
  757. background-position: right 0.5em center;
  758. background-repeat: no-repeat;
  759. background-size: 1.5em;
  760. display: inline-block;
  761. height: 100%;
  762. left: 0;
  763. position: absolute;
  764. top: 0;
  765. width: 100%;
  766. z-index: -1;
  767. }
  768. .text-input__body[data-is-valid=false] + .text-input__validator {
  769. background-image: var(--invalid-icon);
  770. }
  771. .select-box {
  772. box-sizing: inherit;
  773. font-size: 16px;
  774. position: relative;
  775. transition: background-color 0.5s ease-out;
  776. width:90px;
  777. }
  778. .select-box::after {
  779. border-color: var(--gray-color-secondary) transparent transparent transparent;
  780. border-style: solid;
  781. border-width: 6px 4px 0;
  782. bottom: 0;
  783. content: "";
  784. display: inline-block;
  785. height: 0;
  786. margin: auto 0;
  787. pointer-events: none;
  788. position: absolute;
  789. right: -72px;
  790. top: 0;
  791. width: 0;
  792. z-index: 1;
  793. }
  794. .select-box__body {
  795. box-sizing: inherit;
  796. -webkit-appearance: none;
  797. -moz-appearance: none;
  798. appearance: none;
  799. background-color: transparent;
  800. border: 1px solid var(--gray-color-primary);
  801. border-radius: 3px;
  802. cursor: pointer;
  803. height: 1.7em;
  804. line-height: 1.7;
  805. padding-left: 1em;
  806. padding-right: calc(1em + 16px);
  807. width: 140%;
  808. font-size:14px;
  809. padding-top:2px;
  810. padding-bottom:2px;
  811. }
  812. .select-box__body[data-is-valid=true] {
  813. border-color: var(--valid-color);
  814. box-shadow: inset 0 0 0 1px var(--valid-color);
  815. }
  816. .select-box__body[data-is-valid=false] {
  817. border-color: var(--invalid-color);
  818. box-shadow: inset 0 0 0 1px var(--invalid-color);
  819. }
  820. .select-box__body.focus-visible {
  821. border-color: var(--active-color);
  822. box-shadow: inset 0 0 0 1px var(--active-color);
  823. outline: none;
  824. }
  825. .select-box__body:-webkit-autofill {
  826. transition-delay: 9999s;
  827. -webkit-transition-property: background-color;
  828. transition-property: background-color;
  829. }
  830. .textarea__body {
  831. -webkit-appearance: none;
  832. -moz-appearance: none;
  833. appearance: none;
  834. background-color: transparent;
  835. border: 1px solid var(--gray-color-primary);
  836. border-radius: 0;
  837. box-sizing: border-box;
  838. font: inherit;
  839. left: 0;
  840. letter-spacing: inherit;
  841. overflow: hidden;
  842. padding: 1em;
  843. position: absolute;
  844. resize: none;
  845. top: 0;
  846. transition: background-color 0.5s ease-out;
  847. width: 100%;
  848. }
  849. .textarea__body:only-child {
  850. position: relative;
  851. resize: vertical;
  852. }
  853. .textarea__body:focus {
  854. border-color: var(--active-color);
  855. box-shadow: inset 0 0 0 1px var(--active-color);
  856. outline: none;
  857. }
  858. .textarea__body[data-is-valid=true] {
  859. border-color: var(--valid-color);
  860. box-shadow: inset 0 0 0 1px var(--valid-color);
  861. }
  862. .textarea__body[data-is-valid=false] {
  863. border-color: var(--invalid-color);
  864. box-shadow: inset 0 0 0 1px var(--invalid-color);
  865. }
  866. .textarea ._dummy-box {
  867. border: 1px solid;
  868. box-sizing: border-box;
  869. min-height: 240px;
  870. overflow: hidden;
  871. overflow-wrap: break-word;
  872. padding: 1em;
  873. visibility: hidden;
  874. white-space: pre-wrap;
  875. word-wrap: break-word;
  876. }
  877. .toLeftMove{
  878. nimation:moveToLeft 0.5s infinite;
  879. -webkit-animation:moveToLeft 0.5s infinite; /*Safari and Chrome*/
  880. animation-iteration-count:1;
  881. animation-fill-mode: forwards;
  882. }
  883. @keyframes moveToLeft{
  884. from {left:200px;}
  885. to {left:0px;}
  886. }
  887. @-webkit-keyframes moveToLeft /*Safari and Chrome*/{
  888. from {left:200px;}
  889. to {left:0px;}
  890. }
  891. .toRightMove{
  892. nimation:moveToRight 2s infinite;
  893. -webkit-animation:moveToRight 2s infinite; /*Safari and Chrome*/
  894. animation-iteration-count:1;
  895. animation-fill-mode: forwards;
  896. }
  897. @keyframes moveToRight{
  898. from {left:0px;}
  899. to {left:2000px;}
  900. }
  901. @-webkit-keyframes moveToRight /*Safari and Chrome*/{
  902. from {left:0px;}
  903. to {left:200px;}
  904. }
  905. `;
  906. domStyle .appendChild(document.createTextNode(menuSetStyle));
  907. domHead.appendChild(domStyle);
  908. var setListJson= [
  909. {'listName':lang.iconPosition,'setListID':'iconPositionSetPage','setPageID':'movieIconSetPage','takePlace':'0px'},
  910. {'listName':lang.playVideo,'setListID':'movieList','setPageID':'movieVideoSetPage','takePlace':'0px'},
  911. {'listName':lang.playMusic,'setListID':'musicList','setPageID':'','takePlace':'0px'},
  912. {'listName':lang.zhNice,'setListID':'zhihuList','setPageID':'zhihuIconSetPage','takePlace':'0px'},
  913. {'listName':lang.videoDownload,'setListID':'videoDownloadList','setPageID':'videoDownloadSetPage','takePlace':'0px'},
  914. {'listName':lang.baiduDownload,'setListID':'baiduList','setPageID':'','takePlace':'0px'},
  915. ];
  916. var zhihuOptionJson = [
  917. {'optionName':lang.zhVideoClose,'optionID':'removeVideo','default':'0'},
  918. {'optionName':lang.zhVideoDownload,'optionID':'downloadVideo','default':'22'},
  919. {'optionName':lang.zhADClose,'optionID':'removeAD','default':'22'},
  920. {'optionName':lang.zhCloseLeft,'optionID':'removeRight','default':'0'},
  921. {'optionName':lang.zhChangeLink,'optionID':'changeLink','default':'22'},
  922. {'optionName':lang.specialColumn,'optionID':'specialColumn','default':22},
  923. {'optionName':lang.videoTitle,'optionID':'videoTitle','default':22},
  924. {'optionName':lang.zhKeywordClose,'optionID':'removeKeyword','default':'0'},
  925. {'optionName':lang.authorNameClose,'optionID':'removeAuthorName','default':'0'},
  926. {'optionName':lang.yanxuanClose,'optionID':'removeYanxuan','default':'0'}
  927. ];
  928. var playVideoOptionJson = [{'optionName':'添加线路','optionID':'videoPlayLineAdd','default':videoPlayLineAdd}];
  929. var videoDownloadOptionJson = [
  930. {'optionName':lang.dyVideoDownload,'optionID':'dyVideoDownload','default':dyVideoDownload},
  931. {'optionName':lang.ksVideoDownload,'optionID':'ksVideoDownload','default':ksVideoDownload},
  932. {'optionName':lang.xiguaVideoDownload,'optionID':'xiguaVideoDownload','default':xiguaVideoDownload},
  933. {'optionName':lang.biliVideoDownload,'optionID':'biliVideoDownload','default':biliVideoDownload},
  934. ];
  935. var setHtml = "<div id='setMask' class='zhmMask'></div>";
  936. setHtml +="<div class='wrap-box' id='setWrap'>";
  937. setHtml +="<div class='iconSetPage' id='movieIconSetPage'>";
  938. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span class='back'></span><span>"+lang.iconPosition+"</span><span class='iconSetSave'>×</span></li></ul>";
  939. setHtml +="<ul class='iconSetPageLi'>";
  940. 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>";
  941. 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'>";
  942. setHtml +="<option value='left' "+selectedLeft+">"+lang.iconLeft+"</option><option value='right' "+selectedRight+">"+lang.iconRight+"</option>";
  943. setHtml +="</select></div></li>"
  944. 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>";
  945. 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'>";
  946. for(let i =1;i<=8;i++){
  947. let iconSelected = GM_getValue('iconWaitTime')==i/2?'selected':'';
  948. setHtml +="<option value="+i/2+" "+iconSelected+">"+i/2+"秒</option>";
  949. }
  950. setHtml +="</select></div></li>"
  951. setHtml +="</ul></div>";
  952. setHtml +="<div class='zhm_set_page' id='videoDownloadSetPage'>";
  953. setHtml +="<ul class='iconSetUlHead'><li class='zhm_set_page_header'><span class='back'></span><span>"+lang.videoDownload+"</span><span class='iconSetSave'>×</li></ul>";
  954. setHtml +="<ul class='zhm_set_page_list'>";
  955. for(let i=0;i<videoDownloadOptionJson.length;i++){
  956. let backColor,switchBackCorlor,display;
  957. let optionValue = GM_getValue(videoDownloadOptionJson[i].optionID,videoDownloadOptionJson[i].default);
  958. if(optionValue != '22'){
  959. backColor = '#fff';
  960. switchBackCorlor = '#FFF';
  961. display = 'none';
  962. }else{
  963. backColor = '#fe6d73';
  964. switchBackCorlor = '#FFE5E5';
  965. display = 'block';
  966. }
  967. setHtml +="<li>";
  968. setHtml +="<div class='zhm_set_page_content'>";
  969. setHtml += "<span>"+videoDownloadOptionJson[i].optionName+"</span>";
  970. setHtml +="<div class='circular' style='background-color:"+switchBackCorlor+"' id='"+videoDownloadOptionJson[i].optionID+"'>";
  971. setHtml +="<div class='round-button' style='background: "+backColor+"; left: "+optionValue+"px;'></div>";
  972. setHtml += "</div></div>";
  973. setHtml += "</li>";
  974. }
  975. setHtml +="</ul>"
  976. setHtml +="</div>"
  977. setHtml +="<div class='zhm_set_page' id='movieVideoSetPage'>";
  978. setHtml +="<ul class='iconSetUlHead'><li class='zhm_set_page_header'><span class='back'></span><span>"+lang.setPlayVideo+"</span><span class='iconSetSave'>×</li></ul>";
  979. setHtml +="<ul class='zhm_set_page_list'>";
  980. for(let i=0;i<playVideoOptionJson.length;i++){
  981. let backColor,switchBackCorlor,display;
  982. let optionValue = GM_getValue(playVideoOptionJson[i].optionID,playVideoOptionJson[i].default);
  983. if(optionValue != '22'){
  984. backColor = '#fff';
  985. switchBackCorlor = '#FFF';
  986. display = 'none';
  987. }else{
  988. backColor = '#fe6d73';
  989. switchBackCorlor = '#FFE5E5';
  990. display = 'block';
  991. }
  992. setHtml +="<li>";
  993. setHtml +="<div class='zhm_set_page_content'>";
  994. setHtml += "<span>"+lang.playVideoLineAdd+"</span>";
  995. setHtml +="<div class='circular' style='background-color:"+switchBackCorlor+"' id='"+playVideoOptionJson[i].optionID+"'>";
  996. setHtml +="<div class='round-button' style='background: "+backColor+"; left: "+optionValue+"px;'></div>";
  997. setHtml += "</div></div>";
  998. setHtml +="<div class='form__textarea'>";
  999. setHtml +="<div class='textarea js-flexible-textarea' style='margin-top: 10px; display: "+display+"; padding: 5px 0px;' id='videoPlayLineAddTextarea'>";
  1000. setHtml +="<textarea rows='5' class='textarea__body' placeholder='"+lang.tipPlayVideoLineAdd+"' style='width:250px;font-size:14px;padding:4px;resize:none;' id='playVideoLineTextarea'>"+GM_getValue('playVideoLineText','')+"</textarea>";
  1001. setHtml +="</div></div></li>";
  1002. }
  1003. setHtml +="</ul>"
  1004. setHtml +="</div>"
  1005. setHtml +="<div class='zhihuSetPage' id='zhihuIconSetPage'>";
  1006. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span class='back'></span><span>"+lang.zhSet+"</span><span class='iconSetSave'>×</li></ul>";
  1007. setHtml +="<ul class='zhihuSetPageLi'>";
  1008. for(var optionN=0;optionN<zhihuOptionJson.length;optionN++){
  1009. let backColor,switchBackCorlor;
  1010. let optionValue = GM_getValue(zhihuOptionJson[optionN].optionID,zhihuOptionJson[optionN].default);
  1011. if(optionValue != '22'){
  1012. backColor = '#fff';
  1013. switchBackCorlor = '#FFF';
  1014. }else{
  1015. backColor = '#fe6d73';
  1016. switchBackCorlor = '#FFE5E5';
  1017. }
  1018. setHtml +="<li ><div class='zhihuSetPageContent'><span>"+zhihuOptionJson[optionN].optionName+"</span>";
  1019. 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>";
  1020. if(zhihuOptionJson[optionN].optionID == 'removeKeyword'){
  1021. var keywordShow;
  1022. if(GM_getValue('removeKeyword','0') == '22'){
  1023. keywordShow = 'block';
  1024. }else{
  1025. keywordShow = 'none';
  1026. }
  1027. 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>";
  1028. }
  1029. if(zhihuOptionJson[optionN].optionID == 'removeAuthorName'){
  1030. var authorNameShow;
  1031. if(GM_getValue('removeAuthorName','0') == '22'){
  1032. authorNameShow = 'block';
  1033. }else{
  1034. authorNameShow = 'none';
  1035. }
  1036. 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>";
  1037. }
  1038. setHtml +="</li>";
  1039. }
  1040. setHtml +="</ul>"
  1041. setHtml +="</div>";
  1042. setHtml +="<ul class='iconSetUlHead'><li class='iconSetPageHead'><span></span><span>"+lang.set+"</span><span class='iconSetSave'>×</span></li></ul>";
  1043. setHtml +="<ul class='setWrapLi'>";
  1044. for(var setN=0;setN<setListJson.length;setN++){
  1045. var listValue = GM_getValue(setListJson[setN].setListID,'22');
  1046. let backColor,arrowColor,switchBackCorlor;
  1047. if(listValue != 22){
  1048. backColor = '#fff';
  1049. arrowColor= '#EEE';
  1050. switchBackCorlor = '#FFF';
  1051. }else{
  1052. backColor = '#fe6d73';
  1053. arrowColor = '#CCC';
  1054. switchBackCorlor = '#FFE5E5';
  1055. }
  1056. if(setListJson[setN].setPageID == ''){
  1057. arrowColor = '#EEE';
  1058. };
  1059. setHtml +="<li><span>"+setListJson[setN].listName+"</span>";
  1060. setHtml +="<div class='setWrapLiContent'>";
  1061. setHtml +="<div class='circular' id='"+setListJson[setN].setListID+"' style='background-color: "+switchBackCorlor+";'><div class='round-button' style='background: "+backColor+";left: "+listValue+"px'></div></div>";
  1062. 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>";
  1063. }
  1064. setHtml +="</ul>";
  1065. setHtml +="<div style='height:40px;' id='zhmTakePlace'></div>";
  1066. setHtml +="<div class='iconSetFoot' style=''>";
  1067. setHtml +="<ul class='iconSetFootLi'>";
  1068. setHtml +="<li><a href='https://80note.com/2019/05/782.html' target='_blank'>"+lang.question+"</a></li>・<li><a href='https://www.zuihuimai.net/t/qq.html' target='_blank'>交流群</a></li>・<li><a href='https://cdn.80note.com/ds.jpg' target='_blank'>"+lang.reward+"</a></li>・<li><a href='https://cdn.80note.com/erwwma.png' target='_blank'>"+lang.redReward+"</a></li>・<li><a href='https://80note.com/2022/03/323.html' target='_blank'>"+lang.thank+"</a></li>";
  1069. setHtml +='</ul>';
  1070. setHtml +='</div>';
  1071. setHtml += "</div>";
  1072. if(document.querySelector('#setMask')) return;
  1073. this.createElement('div','zhmMenu');
  1074. let zhmMenu = document.getElementById('zhmMenu');
  1075. zhmMenu.innerHTML = setHtml;
  1076. let timerZhmIcon = setInterval(function(){
  1077. if (document.querySelector('#zhmMenu')){
  1078. clearInterval(timerZhmIcon); // 取消定时器
  1079. let circular = document.querySelectorAll('.circular');
  1080. circular.forEach(function(item){
  1081. item.addEventListener('click', function(_e){
  1082. let buttonStyle = item.children[0].style;
  1083. let left = buttonStyle.left;
  1084. left = parseInt(left);
  1085. let listLeftValue;
  1086. if(left==0){
  1087. buttonStyle.left = '22px';
  1088. buttonStyle.background = '#fe6d73';
  1089. item.style.background='#ffE5E5';
  1090. if(item.nextSibling && item.nextSibling.getAttribute('data')){
  1091. item.nextSibling.setAttribute('style','border: solid #ccc;border-width: 0 3px 3px 0;')
  1092. }
  1093. listLeftValue = 22;
  1094. }else{
  1095. buttonStyle.left = '0px';
  1096. buttonStyle.background = '#fff';
  1097. item.style.background='#fff';
  1098. if(item.nextSibling){
  1099. item.nextSibling.setAttribute('style','border: solid #EEE;border-width: 0 3px 3px 0;')
  1100. }
  1101. listLeftValue = 0;
  1102. }
  1103. let setListID = item.id;
  1104. if(setListID == 'removeKeyword' && listLeftValue==22){
  1105. document.querySelector('#zhihuKeyword').style.display='block';
  1106. //document.querySelector('#zhmTakePlace').style= 'height:220px';
  1107. }
  1108. if(setListID == 'removeKeyword' && listLeftValue==0){
  1109. document.querySelector('#zhihuKeyword').style.display='none';
  1110. //document.querySelector('#zhmTakePlace').style= 'height:180px';
  1111. }
  1112. if(setListID == 'removeAuthorName' && listLeftValue==22){
  1113. document.querySelector('#zhihuAuthorName').style.display='block';
  1114. //document.querySelector('#zhmTakePlace').style= 'height:260px';
  1115. }
  1116. if(setListID == 'removeAuthorName' && listLeftValue==0){
  1117. document.querySelector('#zhihuAuthorName').style.display='none';
  1118. //document.querySelector('#zhmTakePlace').style= 'height:120px';
  1119. }
  1120. if(setListID == 'videoPlayLineAdd' && listLeftValue==22){
  1121. document.querySelector('#videoPlayLineAddTextarea').style.display='block';
  1122. }
  1123. if(setListID == 'videoPlayLineAdd' && listLeftValue==0){
  1124. document.querySelector('#videoPlayLineAddTextarea').style.display='none';
  1125. }
  1126. GM_setValue(setListID,listLeftValue);
  1127. })
  1128. });
  1129. let toRight = document.querySelectorAll('.to-right');
  1130. toRight.forEach(function(item){
  1131. item.addEventListener('click', function(e){
  1132. let left = item.previousSibling.children[0].style.left;
  1133. left = parseInt(left);
  1134. if(left != 22) return;
  1135. let setPageID = item.getAttribute('data');
  1136. let pageId = document.getElementById(setPageID);
  1137. pageId.className='iconSetPage toLeftMove';
  1138. //知乎设置暂位高度
  1139. if(setPageID=='zhihuIconSetPage'){
  1140. document.querySelector('#zhmTakePlace').style= `height:68px`;
  1141. }
  1142. })
  1143. })
  1144. let toBack = document.querySelectorAll('.back');
  1145. toBack.forEach(function(item){
  1146. item.addEventListener('click', function(e){
  1147. let parentDom = item.parentNode.parentNode.parentNode;
  1148. parentDom.className='iconSetPage toRightMove';
  1149. document.querySelector('#zhmTakePlace').style='height:40px;'
  1150. })
  1151. })
  1152. let setSave = document.querySelectorAll('.iconSetSave');
  1153. setSave.forEach(function(item){
  1154. item.addEventListener('click',()=>{
  1155. let iconTop = document.getElementById('iconTop').value;
  1156. let iconPosition = document.getElementById('iconPosition').value;
  1157. let iconWidth = document.getElementById('iconWidth').value;
  1158. let iconWaitTime = document.getElementById('iconWaitTime').value;
  1159. let playVideoLineText = document.querySelector('#playVideoLineTextarea').value;
  1160. let playVideoLineLeft = document.querySelector('#videoPlayLineAdd').children[0].style.left;
  1161. let inputZhKeyword = document.getElementById('inputZhKeyword').value;
  1162. let inputAuthorName = document.getElementById('inputZhAuthorName').value;
  1163. if(iconTop != ''){
  1164. if(!(/(^[1-9][0-9]{0,2}$)/.test(iconTop))){
  1165. alert(lang.tipErrorIconHeight);
  1166. return false;
  1167. }
  1168. _this.setCookie('iconTop',iconTop,30)
  1169. }
  1170. if(iconPosition != ''){
  1171. _this.setCookie('iconPosition',iconPosition,30)
  1172. }
  1173. if(iconWaitTime != ''){
  1174. GM_setValue('iconWaitTime',iconWaitTime);
  1175. }
  1176. if(iconWidth !=''){
  1177. if(!(/(^([1-9][0-9]?)$)/.test(iconWidth))){
  1178. alert(lang.tipErrorIconWidth);
  1179. return false;
  1180. }
  1181. _this.setCookie('iconWidth',iconWidth,30);
  1182. }
  1183. if(GM_getValue('videoPlayLineAdd') == 22){
  1184. if(playVideoLineText){
  1185. let lineObj = _this.getLine(playVideoLineText);
  1186. if(lineObj.length>0){
  1187. GM_setValue('playVideoLineText',playVideoLineText);
  1188. }else{
  1189. alert('线路输入不正确');
  1190. return;
  1191. }
  1192. }else{
  1193. GM_setValue('playVideoLineText','');
  1194. }
  1195. }else{
  1196. GM_setValue('playVideoLineText',playVideoLineText);
  1197. }
  1198. if(inputZhKeyword != ''){
  1199. GM_setValue('inputZhKeyword',inputZhKeyword);
  1200. }else{
  1201. if(GM_getValue('inputZhKeyword')){
  1202. GM_deleteValue('inputZhKeyword');
  1203. }
  1204. }
  1205. if(inputAuthorName != ''){
  1206. GM_setValue('inputZhAuthorName',inputAuthorName);
  1207. }else{
  1208. if(GM_getValue('inputZhAuthorName')){
  1209. GM_deleteValue('inputZhAuthorName');
  1210. }
  1211. }
  1212. history.go(0);
  1213. })
  1214. })
  1215. document.getElementById('iconTop').addEventListener('change',function(){
  1216. let iconTop = this.value;
  1217. if(!(/(^[1-9]\d*$)/.test(iconTop))){
  1218. this.setAttribute('data-is-valid','false')
  1219. }else{
  1220. this.setAttribute('data-is-valid','true')
  1221. }
  1222. return false;
  1223. })
  1224. document.getElementById('iconWidth').addEventListener('change',function(){
  1225. let iconWidth = this.value;
  1226. if(!(/(^[1-9]\d*$)/.test(iconWidth))){
  1227. this.setAttribute('data-is-valid','false')
  1228. }else{
  1229. this.setAttribute('data-is-valid','true')
  1230. }
  1231. return false;
  1232. })
  1233. //腾讯视频快捷键冲突
  1234. if(couponUrl.match(/v\.qq\.com\/x\/cover/)){
  1235. let addLineText =document.querySelector('#playVideoLineTextarea');
  1236. addLineText.addEventListener('keydown',function(e){
  1237. let startPos = addLineText.selectionStart;
  1238. let endPos = addLineText.selectionEnd;
  1239. if (startPos === undefined || endPos === undefined) return;
  1240. keyCode.forEach(function(item){
  1241. if(e.keyCode == item.code && e.shiftKey==item.isShift){
  1242. let textValue = addLineText.value;
  1243. let startValue = textValue.substring(0,startPos);
  1244. let endValue = textValue.substring(startPos);
  1245. let allValue = startValue+item.value+endValue;
  1246. addLineText.value=allValue;
  1247. addLineText.selectionStart = startPos+1;
  1248. addLineText.selectionEnd = endPos+1;
  1249. }
  1250. })
  1251. })
  1252. }
  1253. }
  1254. })
  1255. }
  1256. createElement(dom,domId){
  1257. var rootElement = document.body;
  1258. var newElement = document.createElement(dom);
  1259. newElement.id = domId;
  1260. var newElementHtmlContent = document.createTextNode('');
  1261. rootElement.appendChild(newElement);
  1262. newElement.appendChild(newElementHtmlContent);
  1263. }
  1264. request(method,url,data){
  1265. let request = new XMLHttpRequest();
  1266. return new Promise((resolve,reject)=>{
  1267. request.onreadystatechange=function(){
  1268. if(request.readyState==4){
  1269. if(request.status==200){
  1270. resolve(request.responseText);
  1271. }else{
  1272. reject(request.status);
  1273. }
  1274. }
  1275. }
  1276. request.open(method,url);
  1277. request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  1278. request.send(data);
  1279. })
  1280. }
  1281. setCookie(cname,cvalue,exdays){
  1282. var d = new Date();
  1283. d.setTime(d.getTime()+(exdays*24*60*60*1000));
  1284. var expires = "expires="+d.toGMTString();
  1285. document.cookie = cname+"="+cvalue+"; "+expires;
  1286. }
  1287. getCookie(cname){
  1288. var name = cname + "=";
  1289. var ca = document.cookie.split(';');
  1290. for(var i=0; i<ca.length; i++) {
  1291. var c = ca[i].trim();
  1292. if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
  1293. }
  1294. return "";
  1295. }
  1296. getQueryString(e) {
  1297. var t = new RegExp("(^|&)" + e + "=([^&]*)(&|$)");
  1298. var a = window.location.search.substr(1).match(t);
  1299. if (a != null) return a[2];
  1300. return "";
  1301. }
  1302. getUrlParams(url){
  1303. let reg = /([^?&+#]+)=([^?&+#]+)/g;
  1304. let obj={};
  1305. url.replace(reg,(res,$1,$2)=>{obj[$1]=$2});
  1306. return obj;
  1307. }
  1308. getLine(text){
  1309. let textArr = text.split('\n');
  1310. if(textArr.length > 0){
  1311. let lineObj = [];
  1312. let match = /^(.+)(https?:\/\/.+)$/;
  1313. textArr.forEach(function(item){
  1314. item = item.replace(/\s*,*/g,'');
  1315. if(!item) return true;
  1316. let lineMatch = item.match(match);
  1317. if(lineMatch){
  1318. lineObj.push({'name':lineMatch[1].substring(0,4),'url':lineMatch[2]});
  1319. }else{
  1320. lineObj=[];
  1321. return false;
  1322. }
  1323. })
  1324. return lineObj;
  1325. }
  1326. }
  1327. static getElement(css){
  1328. return new Promise((resolve,reject)=>{
  1329. let num = 0;
  1330. let timer = setInterval(function(){
  1331. num++
  1332. let dom = document.querySelector(css);
  1333. if(dom){
  1334. clearInterval(timer);
  1335. resolve(dom);
  1336. }else{
  1337. if(num==20){clearInterval(timer);resolve(false);}
  1338. }
  1339. },300)
  1340. })
  1341. }
  1342. static toast(msg,duration){
  1343. duration=isNaN(duration)?3000:duration;
  1344. let toastDom = document.createElement('div');
  1345. toastDom.innerHTML = msg;
  1346. //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;";
  1347. 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;'
  1348. document.body.appendChild(toastDom);
  1349. setTimeout(function() {
  1350. var d = 0.5;
  1351. toastDom.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
  1352. toastDom.style.opacity = '0';
  1353. setTimeout(function() { document.body.removeChild(toastDom) }, d * 1000);
  1354. }, duration);
  1355. }
  1356. }
  1357. class CouponClass extends BaseClass{
  1358. constructor(){
  1359. super();
  1360. this.divElement = document.createElement("div");
  1361. this.divElement.id='zhm_div_s';
  1362. }
  1363. taobao(){
  1364. let node = document.querySelector('#J_juValid');
  1365. node.style='overflow:inherit;'
  1366. let className = 'zhm_tab_taobao';
  1367. this.getCouponInfo(node,className);
  1368. }
  1369. tmall(){
  1370. let node = document.querySelector('.Actions--leftButtons--1M3KkF7')?document.querySelector('.Actions--leftButtons--1M3KkF7'):document.querySelector('#J_LinkBuy').parentNode;
  1371. let className = 'zhm_tab_tmall';
  1372. this.getCouponInfo(node,className);
  1373. }
  1374. tmallCaoshi(){
  1375. let node = document.querySelector('#J_LinkBuy').parentNode;
  1376. let className = 'zhm_tab_tmall';
  1377. this.getCouponInfo(node,className);
  1378. }
  1379. tmallOther(){
  1380. let node = document.querySelector('.tm-msg-box');
  1381. let className = 'zhm_tab_tmall';
  1382. this.getCouponInfo(node,className);
  1383. }
  1384. jd(){
  1385. setTimeout(()=>{
  1386. let jdGoodsId = couponUrl.match(/jd\.com\/(\S*).html/);
  1387. let node= document.querySelector('#choose-btns');
  1388. node.before(this.divElement);
  1389. this.request('get',`https://zuihuimai.net/vrhr/index_jd_new.php?goods_id=${jdGoodsId[1]}`).then((result)=>{
  1390. let resp= JSON.parse(result);
  1391. let html='';
  1392. resp.forEach(function(item){
  1393. html +=
  1394. `
  1395. <div class="zhm_coupon" style="margin-left:10px;">
  1396. <div class="zhm_left">
  1397. <div class="zhm_img_icon">
  1398. <img src="data:image/gif;base64,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" > </div>
  1399. <div class="zhm_content">
  1400. <div class="zhm_money" style='margin-top:7px;'>
  1401. <div class="zhm_amount_money">
  1402. <div class="zhm_money_sign" style='margin-top:-10px;'>¥</div>
  1403. <div class="zhm_money_num">${item.discount}</div>
  1404. </div>
  1405. <div class="zhm_condition">满${item.quota}元可用</div>
  1406. </div>
  1407. <div class="zhm_time" style='margin-top:10px;'>
  1408. <div class="zhm_term">有效期</div>
  1409. <div class="zhm_date">${item.endTime}</div>
  1410. </div>
  1411. </div>
  1412. </div>
  1413. <div class="zhm_circle"></div>
  1414. <div class="zhm_link_coupon">
  1415. <a class="zhm_link_text" href="${item.coupon_link}" target='_blank' rel='noopener noreferrer nofollow' style="margin-left:16px;width:34px;">领取</a>
  1416. </div>
  1417. </div>
  1418. `
  1419. });
  1420. document.getElementById('zhm_div_s').innerHTML = html;
  1421. })
  1422. },couponWaitTime)
  1423. }
  1424. getCouponInfo(node,className){
  1425. setTimeout(()=>{
  1426. let goods_id = this.getQueryString('id');
  1427. if(!goods_id){console.log('goods_id');return};
  1428. if(className == 'zhm_tab_taobao'){
  1429. node.querySelector('div:nth-of-type(1)').before(this.divElement);
  1430. }else{
  1431. node.before(this.divElement);
  1432. }
  1433. this.request('get',`https://www.zuihuimai.net/vrhr/index_new.php?goods_id=${goods_id}`).then((result)=>{
  1434. if(result){
  1435. let resp= JSON.parse(result);
  1436. let html =
  1437. `
  1438. <div class="zhm_coupon">
  1439. <div class="zhm_left">
  1440. <div class="zhm_img_icon">
  1441. <img src="data:image/gif;base64,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" > </div>
  1442. <div class="zhm_content">
  1443. <div class="zhm_money">
  1444. <div class="zhm_amount_money">
  1445. <div class="zhm_money_sign">¥</div>
  1446. <div class="zhm_money_num">${resp.youhuiquan}</div>
  1447. </div>
  1448. <div class="zhm_condition">${resp.coupon_info}</div>
  1449. </div>
  1450. <div class="zhm_time">
  1451. <div class="zhm_term">有效期</div>
  1452. <div class="zhm_date">${resp.coupon_end_time}</div>
  1453. </div>
  1454. </div>
  1455. </div>
  1456. <div class="zhm_circle"></div>
  1457. <div class="zhm_link_coupon" style="margin-right:">
  1458. <a class="zhm_link_text" onclick="window.open('${resp.coupon_link}')">领取</a>
  1459. </div>
  1460. </div>
  1461. `;
  1462. document.getElementById('zhm_div_s').innerHTML=html;
  1463. }
  1464. })
  1465. },couponWaitTime);
  1466. }
  1467. }
  1468. class PlayVideoClass extends BaseClass{
  1469. constructor(){
  1470. super();
  1471. }
  1472. }
  1473. class PlayMusicClass extends BaseClass{
  1474. constructor(){
  1475. super();
  1476. }
  1477. xmlyCreateCheckbox(){
  1478. let soundListli = document.querySelectorAll('.sound-list ul li');
  1479. soundListli.forEach(function(item){
  1480. let checkboxed = item.querySelector('input');
  1481. if(checkboxed){
  1482. return;
  1483. }
  1484. let title = item.querySelector('.text');
  1485. if(!title){
  1486. return;
  1487. };
  1488. title.style = "width:360px";
  1489. let src = title.querySelector('a').getAttribute('href');
  1490. let firstDom = item.querySelector('.icon-wrapper');
  1491. let inputDom = firstDom.cloneNode(true);
  1492. inputDom.style= 'min-width: 0px;';
  1493. inputDom.innerHTML = "<input type='checkbox' name='zhmCheckbox' value="+src+" >";
  1494. firstDom.before(inputDom);
  1495. })
  1496. }
  1497. }
  1498. class ZhClass extends BaseClass{
  1499. constructor(){
  1500. super();
  1501. }
  1502. showSpecialColumn(){
  1503. if(location.href == 'https://www.zhihu.com/'){
  1504. let cardRecommend = document.querySelectorAll('.Feed');
  1505. if(cardRecommend.length >0){
  1506. cardRecommend.forEach(function(item){
  1507. if(item.querySelector('.specialColumn')){
  1508. return;
  1509. }
  1510. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  1511. if(!dataZop)return;
  1512. let type = dataZop.card.content.type;
  1513. if(type == 'Post'){
  1514. let title = item.querySelector('div>div>h2>span>a');
  1515. if(!title)return;
  1516. let newElement = document.createElement('button');
  1517. newElement.className = 'specialColumn Button VoteButton VoteButton--up';
  1518. newElement.style = 'line-height:20px;padding:0px 5px;margin-right:5px;border-radius:2px;';
  1519. newElement.innerText = '文章';
  1520. title.before(newElement);
  1521. }
  1522. })
  1523. }
  1524. }
  1525. if(location.href.match(/https?:\/\/www.zhihu.com\/search/)){
  1526. let n=0;
  1527. let timer= setInterval(function(){
  1528. let cardSearch = document.querySelectorAll('.SearchResult-Card');
  1529. if(n++>600){
  1530. clearInterval(timer);
  1531. }
  1532. if(cardSearch.length >0){
  1533. clearInterval(timer);
  1534. cardSearch.forEach(function(item){
  1535. if(item.querySelector('.specialColumn')){
  1536. return;
  1537. }
  1538. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  1539. if(!dataZop)return;
  1540. let type = dataZop.card.content.type;
  1541. if(type == 'Post'){
  1542. let title = item.querySelector('div>div>h2>span>div>a');
  1543. if(!title)return;
  1544. let newElement = document.createElement('button');
  1545. newElement.className = 'specialColumn Button VoteButton VoteButton--up';
  1546. newElement.style = 'line-height:20px;padding:0px 5px;margin-right:5px;';
  1547. newElement.innerText = '文章';
  1548. title.before(newElement);
  1549. }
  1550. })
  1551. }
  1552. })
  1553. }
  1554. }
  1555. showVideoTitle(){
  1556. if(location.href == 'https://www.zhihu.com/'){
  1557. let cardRecommend = document.querySelectorAll('.Feed');
  1558. if(cardRecommend.length >0){
  1559. cardRecommend.forEach(function(item){
  1560. if(item.querySelector('.videoTitle')){
  1561. return;
  1562. }
  1563. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  1564. if(!dataZop)return;
  1565. let hasVideo = dataZop.card.has_video;
  1566. if(hasVideo == true){
  1567. let title;
  1568. if(item.querySelector('div>div>h2>div>a')){
  1569. title = item.querySelector('div>div>h2>div>a');
  1570. }else if(item.querySelector('div>div>h2>span>a')){
  1571. title = item.querySelector('div>div>h2>span>a');
  1572. }else{
  1573. return;
  1574. }
  1575. let newElement = document.createElement('button');
  1576. newElement.className = 'videoTitle';
  1577. 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;';
  1578. newElement.innerText = '视频';
  1579. title.before(newElement);
  1580. }
  1581. })
  1582. }
  1583. }
  1584. if(location.href.match(/https?:\/\/www.zhihu.com\/search/)){
  1585. let n=0;
  1586. let timer= setInterval(function(){
  1587. let cardSearch = document.querySelectorAll('.SearchResult-Card');
  1588. if(n++>600){
  1589. clearInterval(timer);
  1590. }
  1591. if(cardSearch.length >0){
  1592. clearInterval(timer);
  1593. cardSearch.forEach(function(item){
  1594. if(item.querySelector('.videoTitle')){
  1595. return;
  1596. }
  1597. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  1598. if(!dataZop)return;
  1599. let type = dataZop.card.content.type;
  1600. if(type == 'Zvideo' ){
  1601. let title = item.querySelector('div>div>h2>span>div>a');
  1602. if(!title)return;
  1603. let newElement = document.createElement('button');
  1604. newElement.className = 'videoTitle';
  1605. 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;';
  1606. newElement.innerText = '视频';
  1607. title.before(newElement);
  1608. }
  1609. })
  1610. }
  1611. })
  1612. }
  1613. }
  1614. removeVideo(){
  1615. let card = document.querySelectorAll('.Feed');
  1616. card.forEach(function(item){
  1617. let dataZop = JSON.parse(item.getAttribute('data-za-extra-module'));
  1618. let video = dataZop.card.content.video_id;
  1619. if(video){
  1620. item.parentNode.style='display:none;';
  1621. }
  1622. })
  1623. }
  1624. removeAD(){
  1625. let zhHideAD = `.Pc-card{display:none !important;}.TopstoryItem--advertCard{display:none !important}`;
  1626. domStyle .appendChild(document.createTextNode(zhHideAD));
  1627. domHead.appendChild(domStyle);
  1628. }
  1629. downloadVideo(){
  1630. window.addEventListener('click',(e)=>{
  1631. if(e.target.innerText == '下载'){
  1632. var videoId;
  1633. if(document.querySelector('.ZVideo-player')){
  1634. let zVideo = document.querySelector('.ZVideo');
  1635. let videoData = JSON.parse(zVideo.getAttribute('data-za-extra-module'));
  1636. videoId = videoData.card.content.video_id;
  1637. }else{
  1638. let videoUrl = window.location.href;
  1639. let videoObj = videoUrl.split('?');
  1640. videoId = videoObj[0].split('/').pop();
  1641. }
  1642. let url = 'https://lens.zhihu.com/api/v4/videos/'+videoId;
  1643. this.request('get',url).then((result)=>{
  1644. let data = JSON.parse(result);
  1645. if(data.playlist != undefined){
  1646. let play_url = data.playlist.LD.play_url;
  1647. let videoName = videoId+".mp4";
  1648. GM_download(play_url,videoName);
  1649. }else{
  1650. BaseClass.toast('下载失败!');
  1651. }
  1652. });
  1653. }
  1654. })
  1655. document.addEventListener('DOMNodeInserted',(e) => {
  1656. if(!e.relatedNode.querySelector) return;
  1657. var playBar = e.relatedNode.querySelector(':scope > div:last-child > div:first-child > div:nth-of-type(2)');
  1658. if(!playBar || playBar.querySelector('.zhmDownload')) return;
  1659. var playBut = playBar.querySelector(':scope > div:last-child');
  1660. if(!playBut) return;
  1661. var playButLi = playBut.querySelector('div:first-child');
  1662. if(!playButLi) return;
  1663. var downloadBut = playButLi.cloneNode(true);
  1664. downloadBut.className = playButLi.className + ' zhmDownload';
  1665. if(!downloadBut.querySelector('._1tg8oir')) return;
  1666. downloadBut.querySelector('._1tg8oir').innerText='下载';
  1667. playButLi.before(downloadBut);
  1668. })
  1669. }
  1670. removeRight(){
  1671. let zhFullScreen = `.GlobalSideBar {display: none !important;}
  1672. .css-1qyytj7{display: none !important;}
  1673. .Question-sideColumn{display:none !important}
  1674. .Topstory-mainColumn{width:100% !important}
  1675. .Question-mainColumn{width:1000px !important}
  1676. .css-cazg48{margin: 0px 16px 0px 0px !important;}
  1677. .QuestionWaiting-mainColumn{width:100% !important;}
  1678. .css-1j5d3ll{padding-left:10px;}
  1679. .css-yhjwoe{justify-content: space-between !important;}
  1680. `;
  1681. domStyle .appendChild(document.createTextNode(zhFullScreen));
  1682. domHead.appendChild(domStyle);
  1683. }
  1684. changeLink(){
  1685. if(couponUrl.indexOf('target') != -1){
  1686. let obj = this.getUrlParams(couponUrl);
  1687. if(obj.target == undefined) return;
  1688. let link = decodeURIComponent(obj.target);
  1689. location.href=link;
  1690. }
  1691. }
  1692. removeKeyword(){
  1693. var GMKeyword = GM_getValue('inputZhKeyword','0');
  1694. if(GMKeyword == '0' || GMKeyword == '') return;
  1695. let keyword = GMKeyword.split(',');
  1696. let content = document.querySelectorAll('.ContentItem');
  1697. keyword.forEach(function(item){
  1698. content.forEach(function(value){
  1699. let dataZop = JSON.parse(value.getAttribute('data-zop'));
  1700. if(dataZop && dataZop.title.indexOf(item) != -1){
  1701. let itemCard = value.parentNode.parentNode.parentNode;
  1702. let itemCardClass= itemCard.className;
  1703. if(itemCardClass.indexOf('TopstoryItem-isRecommend') != -1){
  1704. itemCard.style='display:none';
  1705. }
  1706. }
  1707. })
  1708. })
  1709. }
  1710. removeAuthorName(){
  1711. var GMAuthorName = GM_getValue('inputZhAuthorName','0');
  1712. if(GMAuthorName == '0' || GMAuthorName == '') return;
  1713. let authorName = GMAuthorName.split(',');
  1714. //搜索页
  1715. if(location.href.match(/^https?:\/\/www.zhihu.com\/search/)){
  1716. let n=0;
  1717. let timer = setInterval(function(){
  1718. let userLink = document.querySelectorAll('.Card');
  1719. if(userLink.length > 5){
  1720. clearInterval(timer);
  1721. userLink.forEach(function(item){
  1722. let author = item.querySelector('b');
  1723. if(author){
  1724. if(authorName.indexOf(author.innerText) != -1){
  1725. item.style = 'display:none';
  1726. }
  1727. }
  1728. })
  1729. }else if(n>30){
  1730. clearInterval(timer);
  1731. }else{
  1732. n++;
  1733. }
  1734. },100)
  1735. }
  1736. //回答页
  1737. if(location.href.match(/^https?:\/\/www.zhihu.com\/question\/.*/)){
  1738. let itemDom = document.querySelectorAll('.List-item');
  1739. if(itemDom.length>0){
  1740. itemDom.forEach(function(item){
  1741. let content = item.querySelector('.ContentItem');
  1742. if(content){
  1743. let dataZop = JSON.parse(content.getAttribute('data-zop'));
  1744. if(authorName.indexOf(dataZop.authorName) != -1){
  1745. item.style = 'display:none';
  1746. }
  1747. }
  1748. })
  1749. }
  1750. }
  1751. //等你回答页
  1752. if(location.href == 'https://www.zhihu.com/question/waiting'){
  1753. setTimeout(function(){
  1754. let questionList = document.querySelectorAll('.jsNavigable');
  1755. if(questionList.length>0){
  1756. questionList.forEach(function(item){
  1757. let authorDomText = item.querySelector('.css-tnsaxh').innerText;
  1758. if(authorDomText){
  1759. let author = authorDomText.replace('"','').replace('的提问','').replace(/(^\s+)|(\s+$)/g,'');
  1760. if(author){
  1761. if(authorName.indexOf(author) != -1){
  1762. item.style='display:none;';
  1763. }
  1764. }
  1765. }
  1766. })
  1767. }
  1768. },300)
  1769. }
  1770. //推荐页
  1771. if(location.href == 'https://www.zhihu.com/'){
  1772. let content = document.querySelectorAll('.ContentItem');
  1773. content.forEach(function(value){
  1774. let dataZop = JSON.parse(value.getAttribute('data-zop'));
  1775. if(authorName.indexOf(dataZop.authorName) != -1){
  1776. let itemCard = value.parentNode.parentNode.parentNode;
  1777. if(itemCard){
  1778. itemCard.style='display:none';
  1779. }
  1780. }
  1781. })
  1782. }
  1783. }
  1784. removeYanxuan(){
  1785. //回答页
  1786. if(location.href.match(/^https?:\/\/www.zhihu.com\/question\/.*/)){
  1787. let itemDom = document.querySelectorAll('.List-item');
  1788. if(itemDom.length>0){
  1789. itemDom.forEach(function(item){
  1790. let content = item.querySelector('.KfeCollection-OrdinaryLabel-content');
  1791. if(content && content.innerText.indexOf('盐选') != -1){
  1792. item.style = 'display:none';
  1793. }
  1794. })
  1795. }
  1796. let answerCard = document.querySelector('.AnswerCard');
  1797. if(answerCard){
  1798. let content = answerCard.querySelector('.KfeCollection-OrdinaryLabel-content');
  1799. if(content && content.innerText.indexOf('盐选') != -1){
  1800. answerCard.style = 'display:none';
  1801. }
  1802. }
  1803. }
  1804. //搜索页
  1805. if(location.href.match(/^https?:\/\/www.zhihu.com\/search/)){
  1806. let num = 0;
  1807. let timer = setInterval(function(){
  1808. let cardList = document.querySelectorAll('.Card');
  1809. if(cardList.length > 5){
  1810. clearInterval(timer);
  1811. cardList.forEach(function(item){
  1812. let type = item.querySelector('.KfeCollection-PcCollegeCard-type');
  1813. if(type && type.innerText.indexOf('盐选专栏') != -1){
  1814. item.style = 'display:none';
  1815. }
  1816. let author = item.querySelector('b');
  1817. let authorYanxuan = ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品', '历史环游记'];
  1818. if(author && authorYanxuan.indexOf(author.innerText) != -1){
  1819. item.style = 'display:none';
  1820. }
  1821. })
  1822. }else if(num>30){
  1823. clearInterval(timer);
  1824. }else{
  1825. num++;
  1826. }
  1827. },100)
  1828. }
  1829. //推荐页
  1830. if(location.href == 'https://www.zhihu.com/'){
  1831. let content = document.querySelectorAll('.ContentItem');
  1832. content.forEach(function(item){
  1833. let content = item.querySelector('.KfeCollection-OrdinaryLabel-content');
  1834. if(content && content.innerText.indexOf('盐选') != -1){
  1835. item.style = 'display:none';
  1836. }
  1837. })
  1838. }
  1839. }
  1840. }
  1841. class VideoDownloadClass extends BaseClass{
  1842. constructor(){
  1843. super();
  1844. }
  1845. dyVideoDownload(){
  1846. var _this = this;
  1847. window.addEventListener('load',function(){
  1848. async function getControls(){
  1849. let videoDom = await BaseClass.getElement('.xg-video-container');
  1850. if(!videoDom){
  1851. console.log('没有找到DOM');return;
  1852. }
  1853. let vsNav = document.querySelector('.fuy_wmct:nth-of-type(5)');
  1854. if((vsNav && vsNav.className.indexOf('LXX79le5') != -1) || couponUrl.indexOf('vsdetail') != -1){
  1855. console.log('综艺栏目关闭下载');return;
  1856. }
  1857. _this.createDyVideoDownload();
  1858. let videoPlayDomAll = document.querySelectorAll('video');
  1859. let videoIndex = videoPlayDomAll.length>1?videoPlayDomAll.length-2:videoPlayDomAll.length-1;
  1860. let videoPlayDom = videoPlayDomAll[videoIndex];
  1861. //let videoPlayDom = videoPlayDomAll.length>1?videoPlayDomAll[videoPlayDomAll.length-2]:videoPlayDomAll[videoPlayDomAll.length-1];
  1862. videoPlayDom.addEventListener('ended',function(){ //结束
  1863. console.log("播放结束");
  1864. let autoPlay = document.querySelector('.xg-switch-checked');
  1865. if(autoPlay){
  1866. getControls();
  1867. return;
  1868. }
  1869. }, false);
  1870. document.querySelector('#toDownload').addEventListener('click',function(){
  1871. BaseClass.toast('正在下载请稍侯');
  1872. let dataUrl = document.querySelector('#zhmDouyinDownload').getAttribute('data-url');
  1873. let match = /[https]?:?\/\/www\.douyin\.com\/.+\/([0-9]+)/;
  1874. let video = dataUrl.match(match);
  1875. let videoId = video[1];
  1876. let url = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='+video[1];
  1877. GM_xmlhttpRequest({
  1878. method: "get",
  1879. url: url,
  1880. data: '',
  1881. headers: {'Accept': 'text/plain, text/html,application/json'},
  1882. onload: function(result) {
  1883. let resp = JSON.parse(result.response);
  1884. if(resp.item_list.length > 0){
  1885. let uriId = resp.item_list[0].video.play_addr.uri;
  1886. let playUrl = `https://aweme.snssdk.com/aweme/v1/play/?video_id=${uriId}&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&is_support_h265=0&source=PackSourceEnum_PUBLISH`;
  1887. let info = document.querySelectorAll('.Nu66P_ba');
  1888. let account = info[videoIndex*2].innerText;
  1889. let titleArr = info[videoIndex*2+1].innerText.split('#');
  1890. let title = titleArr[0]?titleArr[0]:titleArr[1];
  1891. //console.log(account,title);
  1892. GM_download(playUrl,title+account+".mp4");
  1893. }else{
  1894. console.log('API没有获取视频ID');
  1895. }
  1896. }
  1897. });
  1898. })
  1899. document.querySelector('#toCopy').addEventListener('click',function(){
  1900. BaseClass.toast('已复制到剪贴板');
  1901. GM_setClipboard(videoPlayDom.children[0].src);
  1902. })
  1903. document.querySelector('.toLink').addEventListener('click',function(){
  1904. window.open(videoPlayDom.children[0].src);
  1905. })
  1906. return;
  1907. }
  1908. getControls();
  1909. window.addEventListener("wheel",getControls);
  1910. window.addEventListener('keydown',function(e){
  1911. if(e.code=='ArrowDown' || e.code=='ArrowUp'){
  1912. getControls();
  1913. }
  1914. })
  1915. async function insertedDom(){
  1916. let videoDom = await BaseClass.getElement('video');
  1917. if(!videoDom){
  1918. console.log('没有找到DOM');return;
  1919. }
  1920. videoDom.addEventListener('DOMNodeInserted',(e) => {
  1921. getControls();
  1922. })
  1923. }
  1924. insertedDom();
  1925. window.addEventListener('click',getControls);
  1926. })
  1927. }
  1928. createDyVideoDownload(){
  1929. let controlAll = document.querySelectorAll('.xg-right-grid');
  1930. let controls = controlAll.length>1?controlAll[controlAll.length-2]:controlAll[controlAll.length-1];
  1931. let videoDownloadDom = document.querySelector('#zhmDouyinDownload');
  1932. if(videoDownloadDom){
  1933. videoDownloadDom.parentNode.parentNode.removeChild(videoDownloadDom.parentNode);
  1934. //videoDownloadDom.parentNode.parentNode.parentNode.removeChild(videoDownloadDom.parentNode.parentNode)
  1935. }
  1936. let playSeting = controls.querySelector('.xgplayer-playback-setting');
  1937. let downloadDom = playSeting.cloneNode(true);
  1938. downloadDom.style='margin-right:20px;';
  1939. //let downloadText = downloadDom.querySelector('div:first-child > span:first-child');
  1940. let downloadText = downloadDom.querySelector('div:first-child');
  1941. downloadText.innerText='下载';
  1942. downloadText.style = 'font-size:12px;font-weight:400;';
  1943. downloadText.setAttribute('id','zhmDouyinDownload');
  1944. let detail = controls.querySelector('xg-icon:nth-of-type(1)').children[0];
  1945. let linkUrl = detail.getAttribute('href')?detail.getAttribute('href'):location.href;
  1946. downloadText.setAttribute('data-url',linkUrl);
  1947. downloadText.removeAttribute('target');
  1948. downloadText.setAttribute('href','javascript:void(0);');
  1949. downloadDom.onmouseover=function(){
  1950. downloadDom.className='xgplayer-playback-setting slide-show';
  1951. }
  1952. downloadDom.onmouseout=function(){
  1953. downloadDom.className='xgplayer-playback-setting';
  1954. }
  1955. let downloadHtml = '';
  1956. downloadOption.forEach(function(item){
  1957. downloadHtml += `<div class="xgplayer-playratio-item ${item.id}" id="${item.id}">${item.name}</div>`;
  1958. })
  1959. downloadDom.querySelector('.xgplayer-playratio-wrap').innerHTML = downloadHtml;
  1960. downloadDom.querySelector('.xgplayer-slider').style='width:60px important;';
  1961. let autoPlay = document.querySelector('.xgplayer-autoplay-setting');
  1962. autoPlay.after(downloadDom);
  1963. let divDom = document.createElement('div');
  1964. divDom.style="position: absolute;z-index:-999;height:80px;width:40px;margin-top:-80px;"
  1965. downloadDom.appendChild(divDom);
  1966. }
  1967. ksVideoDownload(){
  1968. var _this = this;
  1969. window.addEventListener('load',function(){
  1970. async function getControls(){
  1971. let videoDom = await BaseClass.getElement('.player-video');
  1972. if(!videoDom){
  1973. console.log('没有找到DOM');return;
  1974. }
  1975. if(videoDom.getAttribute('src').match(/^blob/)){
  1976. console.log('blob视频无法下载');return;
  1977. }
  1978. _this.createKsVideoDownload(videoDom);
  1979. videoDom.addEventListener('playing',function(){ //播放中
  1980. console.log("播放中");
  1981. });
  1982. videoDom.addEventListener('ended',function(){ //结束
  1983. console.log("播放结束");
  1984. let autoPlay = document.querySelector('.auto-warpper').getAttribute('autoplay');
  1985. if(autoPlay){
  1986. getControls();
  1987. return;
  1988. }
  1989. }, false);
  1990. document.querySelector('#toDownload').addEventListener('click',function(){
  1991. BaseClass.toast('正在下载请稍侯');
  1992. let playTimeTotal = document.querySelector('.total').innerText;
  1993. let second = playTimeTotal.match(/(.+):(.+)/);
  1994. let secondTotal = second[1]*60+parseInt(second[2]);
  1995. let dataUrl = document.querySelector('#zhmKsDownload').getAttribute('data-url');
  1996. let account = document.querySelector('.profile-user-name-title').innerText;
  1997. let title = document.querySelector('.video-info-title').innerText;
  1998. let videoFileName = (account && title)?account+'-'+title+'.mp4':new Date().getTime()+'.mp4';
  1999. GM_download(dataUrl,videoFileName);
  2000. })
  2001. document.querySelector('#toCopy').addEventListener('click',function(){
  2002. BaseClass.toast('已复制到剪贴板');
  2003. GM_setClipboard(videoDom.getAttribute('src'));
  2004. })
  2005. document.querySelector('#toLink').addEventListener('click',function(){
  2006. window.open(videoDom.getAttribute('src'));
  2007. })
  2008. }
  2009. getControls();
  2010. document.addEventListener('click',function(e){
  2011. getControls();
  2012. })
  2013. })
  2014. }
  2015. createKsVideoDownload(videoDom){
  2016. let match = /^https?:\/\/www\.kuaishou\.com\/(.+)\/.+/;
  2017. let resp = location.href.match(match);
  2018. if(!resp || (resp[1] != 'short-video' && resp[1] != 'video')){
  2019. console.log('当前不是视频播放页');return;
  2020. }
  2021. if(resp[1] == 'short-video'){
  2022. let playerArea = document.querySelector('.video-container-player');
  2023. let playerAreaWidth = playerArea.style.width.match(/(.+)px/);
  2024. let playerBarProgress = document.querySelector('.player-bar-progress');
  2025. playerBarProgress.style.width = playerAreaWidth[1]-260+'px';
  2026. let timeTotal = document.querySelector('.total');
  2027. timeTotal.style.right='120px';
  2028. }
  2029. let controls = document.querySelector('.right');
  2030. let videoDownloadDom = document.querySelector('#zhmKsDownload');
  2031. if(videoDownloadDom){
  2032. videoDownloadDom.parentNode.removeChild(videoDownloadDom);
  2033. }
  2034. let detailDom = controls.querySelector('div:nth-of-type(1)');
  2035. let xgIcon = detailDom.cloneNode(true);
  2036. let linkUrl = videoDom.getAttribute('src');
  2037. xgIcon.querySelector('.kwai-player-volume-sound').innerHTML="<div style='cursor:pointer;'>下载</div>";
  2038. let slider = xgIcon.querySelector('.pl-slider');
  2039. slider.style = 'width:49px;padding:10px 5px 20px;';
  2040. let downloadList = '';
  2041. downloadOption.forEach(function(item){
  2042. downloadList += `<div style="margin-top:10px;color:#FFF;cursor:pointer;" id="${item.id}">${item.name}</div>`;
  2043. })
  2044. slider.innerHTML = downloadList;
  2045. xgIcon.setAttribute('data-url',linkUrl);
  2046. xgIcon.setAttribute('id','zhmKsDownload');
  2047. //console.log(xgIcon);
  2048. //xgIcon.innerHTML="<div style='cursor:pointer;'>下载</div>";
  2049. detailDom.before(xgIcon);
  2050. //重构播放操作按钮
  2051. let zhmKsButton = document.querySelector('#zhmKsButton');
  2052. //console.log(zhmKsButton);
  2053. if(zhmKsButton){
  2054. //zhmKsButton.parentNode.removeChild(zhmKsButton);
  2055. return false;
  2056. }
  2057. let buttonIcon = detailDom.cloneNode(true);
  2058. //console.log(buttonIcon);
  2059. buttonIcon.setAttribute('id','zhmKsButton');
  2060. let buttonIconImg = buttonIcon.querySelector('.unmuted-icon');
  2061. buttonIconImg.style = 'background: url(https://s2-10623.kwimgs.com/udata/pkg/cloudcdn/img/player-setting.ad1f5ce8.svg) no-repeat';
  2062. detailDom.after(buttonIcon);
  2063. let plSlider = buttonIcon.querySelector('.pl-slider');
  2064. plSlider.style='width:auto;padding:10px 10px 25px 10px;';
  2065. plSlider.innerHTML = "";
  2066. let buttonFour = controls.querySelector('div:nth-of-type(4)');
  2067. buttonFour.style.margin='0px';
  2068. let autoPlay = document.querySelector('.play-setting-container');
  2069. autoPlay.style.margin='0px 40px 0px 0px';
  2070. let buttonFive = controls.querySelector('div:nth-of-type(5)');
  2071. buttonFive.style.margin='15px 0px';
  2072. buttonFive.onmouseover=function(){
  2073. setTimeout(function(){
  2074. let toolTip = document.querySelector('.kwai-player-rotate-tooltip');
  2075. if(toolTip){
  2076. toolTip.parentNode.removeChild(toolTip);
  2077. }
  2078. },30)
  2079. }
  2080. let buttonSix = controls.querySelector('div:nth-of-type(6)');
  2081. buttonSix.style.margin='15px 0px';
  2082. let toolTip = document.querySelector('.kwai-player-fullscreen-tooltip');
  2083. buttonSix.onmouseover=function(){
  2084. setTimeout(function(){
  2085. let toolTip = document.querySelector('.kwai-player-fullscreen-tooltip');
  2086. if(toolTip){
  2087. toolTip.parentNode.removeChild(toolTip);
  2088. }
  2089. },30)
  2090. }
  2091. plSlider.appendChild(buttonFour);
  2092. plSlider.appendChild(buttonFive);
  2093. plSlider.appendChild(buttonSix);
  2094. }
  2095. xiguaVideoDownload(){
  2096. var _this = this;
  2097. window.addEventListener('load',function(){
  2098. async function getControls(){
  2099. let videoDom = await BaseClass.getElement('video');
  2100. if(!videoDom){
  2101. console.log('没有找到DOM');return;
  2102. }
  2103. _this.createXiguaVideoDownload();
  2104. let url = 'https://xg.eggvod.cn/xiguaVideo.php?url='+encodeURIComponent(location.href);
  2105. let uri = _this.request('get',url).then((result)=>{
  2106. let resp = JSON.parse(result);
  2107. let videoSrc = '';
  2108. if(resp.code == 0){
  2109. videoSrc = resp.data.url;
  2110. }
  2111. document.querySelector('#toDownload').addEventListener('click',function(){
  2112. if(!videoSrc){
  2113. BaseClass.toast('该视频无法下载');
  2114. return;
  2115. }
  2116. let videoTitle = document.querySelector('.videoTitle h1').innerText;
  2117. let videoAuthor = document.querySelector('.author__userName').title;
  2118. BaseClass.toast('正在下载请稍侯');
  2119. GM_download(videoSrc,videoTitle+'@'+videoAuthor+'.mp4');
  2120. })
  2121. document.querySelector('#toCopy').addEventListener('click',function(){
  2122. if(!videoSrc){
  2123. BaseClass.toast('该视频不能复制地址');
  2124. return;
  2125. }
  2126. BaseClass.toast('已复制到剪贴板');
  2127. GM_setClipboard(videoSrc);
  2128. })
  2129. document.querySelector('#toLink').addEventListener('click',function(){
  2130. if(!videoSrc){
  2131. BaseClass.toast('该视频不能直接打开');
  2132. return;
  2133. }
  2134. window.open(videoSrc);
  2135. })
  2136. document.addEventListener('click',function(e){
  2137. e.path.forEach(function(item){
  2138. if(item.className == 'xgplayer-control-item control_playnext common-control-item'){
  2139. setTimeout(function(){
  2140. location.reload();
  2141. return;
  2142. },1000)
  2143. };
  2144. })
  2145. var objLink = {};
  2146. e.path.forEach(function(item){
  2147. if(item.href){
  2148. objLink.href = item.href?item.href:'';
  2149. objLink.target = item.target?item.target:'';
  2150. return;
  2151. }
  2152. })
  2153. if(objLink.href && objLink.target != '_blank'){
  2154. location.href = objLink.href;
  2155. return;
  2156. }
  2157. })
  2158. }).catch((error)=>{ console.log(error);})
  2159. document.querySelector('video').addEventListener('ended',function(){ //结束
  2160. console.log("播放结束");
  2161. setTimeout(function(){
  2162. location.reload();
  2163. },5500);
  2164. }, false);
  2165. }
  2166. getControls();
  2167. })
  2168. }
  2169. createXiguaVideoDownload(){
  2170. let rightGrid = document.querySelector('.xg-right-grid');
  2171. let playControl = rightGrid.querySelector('div:nth-of-type(2)');
  2172. let control = playControl.cloneNode(true);
  2173. let entry= control.querySelector('.xgplayer-control-item__entry');
  2174. entry.innerHTML = '<div class="xgpcPlayer_textEntry"><span>下载</span></div>';
  2175. let popover = control.querySelector('.xgplayer-control-item__popover');
  2176. let downloadList = '<ul>';
  2177. downloadOption.forEach(function(item){
  2178. downloadList += `<li tabindex="0" role="menuitemradio" aria-checked="false" id="${item.id}">${item.name}</li>`;
  2179. })
  2180. downloadList += '</ul>';
  2181. popover.innerHTML = downloadList;
  2182. playControl.before(control);
  2183. let divDom = document.createElement('div');
  2184. divDom.style="width: 80px; height: 140px;position:absolute;bottom:40px;left:20px;z-index:-1";
  2185. control.appendChild(divDom);
  2186. control.onmouseover=function(){
  2187. popover.style.display='block';
  2188. }
  2189. control.onmouseout=function(){
  2190. popover.style.display='none';
  2191. }
  2192. }
  2193. biliVideoDownload(){
  2194. var _this = this;
  2195. window.addEventListener('load',function(){
  2196. async function getControls(){
  2197. if(location.href.indexOf('bangumi') != -1){
  2198. let rightControl = await BaseClass.getElement('.squirtle-controller-wrap-right');
  2199. if(!rightControl){
  2200. console.log('没有找到DOM');return;
  2201. }
  2202. _this.createBiliVideoDownload();
  2203. }else{
  2204. let n=0;
  2205. let timer = setInterval(function(){
  2206. let dom = document.querySelector('.bilibili-player-video-btn-quality');
  2207. let domOther = document.querySelector('.bpx-player-ctrl-quality');
  2208. if(dom){
  2209. clearInterval(timer);
  2210. _this.createBiliVideoDownload();
  2211. return;
  2212. }else if(domOther){
  2213. clearInterval(timer);
  2214. _this.createBiliVideoDownloadOther();
  2215. return;
  2216. }else{
  2217. if(n++>30)clearInterval(timer);
  2218. }
  2219. },100)
  2220. return;
  2221. }
  2222. //_this.createBiliVideoDownload();
  2223. let timerZhmIcon = setInterval(function(){
  2224. let videoDom = [{name:'video',type:'dom'},{name:'bwp_video',type:'dom'},{name:'.bilibili-player-video',type:'class'}];
  2225. for(let i = 0;i<videoDom.length;i++){
  2226. let video = videoDom[i].type == 'dom'?document.querySelector(videoDom[i].name):document.querySelector(videoDom[i].name).firstChild;
  2227. if(video){
  2228. clearInterval(timerZhmIcon); //取消定时器
  2229. video.addEventListener('play',function(){
  2230. console.log("播放开始");
  2231. _this.createBiliVideoDownload();
  2232. });
  2233. video.addEventListener('ended',function(){ //结束
  2234. if(location.href.indexOf('bangumi') != -1){
  2235. let biliDownload = document.querySelector('#biliDownload');
  2236. console.log(biliDownload);
  2237. biliDownload.parentNode.removeChild(biliDownload);
  2238. }
  2239. })
  2240. break;
  2241. }
  2242. };
  2243. })
  2244. }
  2245. getControls();
  2246. })
  2247. }
  2248. createBiliVideoDownload(){
  2249. var _this = this;
  2250. async function getControls(){
  2251. let downloadIcon = document.querySelector('#biliDownload');
  2252. if(downloadIcon){
  2253. console.log('下载按钮已存在');return;
  2254. }
  2255. if(location.href.indexOf('bangumi') != -1){
  2256. let quality = await BaseClass.getElement('.squirtle-quality-wrap');
  2257. if(!quality){
  2258. console.log('没有找到DOM');return;
  2259. }
  2260. let control = quality.cloneNode(true);
  2261. console.log(control.querySelector('.squirtle-video-quality-text'));
  2262. control.querySelector('.squirtle-video-quality-text').innerText='下载';
  2263. control.setAttribute('id','biliDownload');
  2264. quality.before(control);
  2265. }else if(location.href.indexOf('video') != -1){
  2266. let autoIconDom = await BaseClass.getElement('.bilibili-player-video-btn-quality');
  2267. if(!autoIconDom){
  2268. console.log('没有找到DOM');return;
  2269. }
  2270. let control = autoIconDom.cloneNode(true);
  2271. control.style='margin-right:20px;';
  2272. control.querySelector('.bui-select-result').innerText='下载';
  2273. control.querySelector('.bui-select-result').setAttribute('id','biliDownload');
  2274. autoIconDom.before(control);
  2275. }else{
  2276. console.log('当前页面不是视频或番剧');return;
  2277. }
  2278. document.querySelector('#biliDownload').addEventListener('click',function(){
  2279. let bvid = '',avid='';
  2280. if(location.href.indexOf('bangumi') != -1){
  2281. bvid = document.querySelector('.av-link').innerText;
  2282. }else if(location.href.indexOf('video') != -1){
  2283. let params = location.href.match(/https:\/\/www.bilibili.com\/video\/(.+)\?/);
  2284. if(params[1].indexOf('av') !=-1){
  2285. avid = params[1].replace('av','');
  2286. }else{
  2287. bvid = params[1].substring(params[1].length-1)=='/'?params[1].substring(0,params[1].length-1):params[1];
  2288. }
  2289. }else{
  2290. BaseClass.toast('当前页面无法下载');return;
  2291. }
  2292. if(!bvid && !avid){
  2293. console.log('未获取bvid或avid');return;
  2294. }
  2295. let url = "https://api.bilibili.com/x/web-interface/view?bvid="+bvid+"&aid="+avid;
  2296. let uri = _this.request('get',url).then((result)=>{
  2297. let resp = JSON.parse(result);
  2298. if(resp.code < 0){
  2299. BaseClass.toast('该视频无法下载');
  2300. console.log('视频信息接口返回数据错误');return;
  2301. }
  2302. //选集cid
  2303. let pageId = _this.getQueryString('p');
  2304. let cid = '';
  2305. if(pageId){
  2306. cid = resp.data.pages[pageId-1].cid;
  2307. }else{
  2308. cid = resp.data.cid;
  2309. }
  2310. console.log(cid);
  2311. let link = 'https://api.bilibili.com/x/player/playurl?avid='+resp.data.aid+'&cid='+cid+'&qn=112';
  2312. let res = _this.request('get',link).then((result)=>{
  2313. let data = JSON.parse(result);
  2314. if(data.code < 0){
  2315. BaseClass.toast('该视频无法下载');
  2316. console.log('视频地址接口返回数据错误');return;
  2317. }
  2318. let downloadUrl = data.data.durl[0].url;
  2319. //GM_download(downloadUrl);
  2320. window.open(downloadUrl);
  2321. })
  2322. })
  2323. })
  2324. }
  2325. getControls();
  2326. }
  2327. createBiliVideoDownloadOther(){
  2328. var _this = this;
  2329. async function getControls(){
  2330. let downloadIcon = document.querySelector('#biliDownload');
  2331. if(downloadIcon){
  2332. console.log('下载按钮已存在');return;
  2333. }
  2334. if(location.href.indexOf('bangumi') != -1){
  2335. let quality = await BaseClass.getElement('.squirtle-quality-wrap');
  2336. if(!quality){
  2337. console.log('没有找到DOM');return;
  2338. }
  2339. let control = quality.cloneNode(true);
  2340. console.log(control.querySelector('.squirtle-video-quality-text'));
  2341. control.querySelector('.squirtle-video-quality-text').innerText='下载';
  2342. control.setAttribute('id','biliDownload');
  2343. quality.before(control);
  2344. }else if(location.href.indexOf('video') != -1){
  2345. let autoIconDom = await BaseClass.getElement('.bpx-player-ctrl-quality');
  2346. if(!autoIconDom){
  2347. console.log('没有找到DOM');return;
  2348. }
  2349. let control = autoIconDom.cloneNode(true);
  2350. control.style='margin-right:20px;';
  2351. control.querySelector('.bpx-player-ctrl-quality-result').innerText='下载';
  2352. control.querySelector('.bpx-player-ctrl-quality-result').setAttribute('id','biliDownload');
  2353. autoIconDom.before(control);
  2354. }else{
  2355. console.log('当前页面不是视频或番剧');return;
  2356. }
  2357. document.querySelector('#biliDownload').addEventListener('click',function(){
  2358. let bvid = '',avid='';
  2359. if(location.href.indexOf('bangumi') != -1){
  2360. bvid = document.querySelector('.av-link').innerText;
  2361. }else if(location.href.indexOf('video') != -1){
  2362. let nowUrl = location.href.split('?');
  2363. console.log(nowUrl);
  2364. let params = nowUrl[0].match(/https:\/\/www.bilibili.com\/video\/(.+)/);
  2365. if(params[1].indexOf('av') !=-1){
  2366. avid = params[1].replace('av','');
  2367. }else{
  2368. bvid = params[1].substring(params[1].length-1)=='/'?params[1].substring(0,params[1].length-1):params[1];
  2369. }
  2370. }else{
  2371. BaseClass.toast('当前页面无法下载');return;
  2372. }
  2373. if(!bvid && !avid){
  2374. console.log('未获取bvid或avid');return;
  2375. }
  2376. let url = "https://api.bilibili.com/x/web-interface/view?bvid="+bvid+"&aid="+avid;
  2377. let uri = _this.request('get',url).then((result)=>{
  2378. let resp = JSON.parse(result);
  2379. if(resp.code < 0){
  2380. BaseClass.toast('该视频无法下载');
  2381. console.log('视频信息接口返回数据错误');return;
  2382. }
  2383. //选集cid
  2384. let pageId = _this.getQueryString('p');
  2385. let cid = '';
  2386. if(pageId){
  2387. cid = resp.data.pages[pageId-1].cid;
  2388. }else{
  2389. cid = resp.data.cid;
  2390. }
  2391. console.log(cid);
  2392. let link = 'https://api.bilibili.com/x/player/playurl?avid='+resp.data.aid+'&cid='+cid+'&qn=112';
  2393. let res = _this.request('get',link).then((result)=>{
  2394. let data = JSON.parse(result);
  2395. if(data.code < 0){
  2396. BaseClass.toast('该视频无法下载');
  2397. console.log('视频地址接口返回数据错误');return;
  2398. }
  2399. let downloadUrl = data.data.durl[0].url;
  2400. //GM_download(downloadUrl);
  2401. window.open(downloadUrl);
  2402. })
  2403. })
  2404. })
  2405. }
  2406. getControls();
  2407. }
  2408. }
  2409. var allWeb = [...getCoupon,...jxVideo,...jxMusic,...zhNice,...videoDownload,...baidu];
  2410. var nowWeb=[];
  2411. allWeb.forEach(function(item){
  2412. if(item.isOpen == 0) return true;
  2413. item.web.forEach(function(val){
  2414. let result = location.href.match(val.match);
  2415. if(result){
  2416. nowWeb.push(val);
  2417. }
  2418. })
  2419. })
  2420. if(nowWeb.length==0){
  2421. let baseClass = new BaseClass();
  2422. console.log('没有匹配该网站或该模块已关闭');return;
  2423. }
  2424. nowWeb.forEach(function(item){
  2425. switch(item.funcName){
  2426. case 'coupon':
  2427. couponFunc(item);
  2428. break;
  2429. case 'playVideo':
  2430. playVideoFunc();
  2431. break;
  2432. case 'playMusic':
  2433. playMusicFunc(item);
  2434. break;
  2435. case 'zhNice':
  2436. zhNiceFunc();
  2437. break;
  2438. case 'baidu':
  2439. var baseClass = new BaseClass;
  2440. baiduFunc();
  2441. break;
  2442. case 'videoDownload':
  2443. var videoDownloadClass = new VideoDownloadClass();
  2444. var {funcName,match:nowMatch,node:nowNode,name:nowName} = item;
  2445. if(item.isWebOpen == 0){
  2446. console.log(item.name+'已关闭');return;
  2447. }else{
  2448. videoDownloadClass[nowName]();
  2449. }
  2450. break;
  2451. }
  2452. })
  2453. function couponFunc(item){
  2454. var couponClass = new CouponClass();
  2455. var {funcName,match:nowMatch,node:nowNode,name:nowName} = item;
  2456. var couponStyle =`
  2457. html{
  2458. --right:100%;
  2459. --left:100%;
  2460. }
  2461. .zhm_coupon{
  2462. width:fit-content;
  2463. display: flex;
  2464. flex-direction:row;
  2465. justify-content: space-between;
  2466. align-items:flex-start;
  2467. font-size:14px;
  2468. position: relative;
  2469. margin-bottom:15px;
  2470. }
  2471. .zhm_left{
  2472. display: flex;
  2473. flex-direction:row;
  2474. justify-content:flex-start;
  2475. align-items: center;
  2476. font-size:14px;
  2477. background: radial-gradient(circle at right top, transparent 8px,#fff 0) top left /var(--right) 51% no-repeat,
  2478. radial-gradient(circle at right bottom, transparent 8px, #fff 0) bottom left /var(--right) 51% no-repeat;
  2479. filter: drop-shadow(2px 2px 3px #888);
  2480. height:84px;
  2481. width:100%;
  2482. }
  2483. .zhm_img_icon{
  2484. padding:4px 0px 0px 5px;
  2485. margin-right:5px;
  2486. }
  2487. .zhm_img_icon img{
  2488. width:47px;
  2489. }
  2490. .zhm_content{
  2491. display: flex;
  2492. flex-direction:column;
  2493. margin-right: 18px;
  2494. }
  2495. .zhm_money{
  2496. display: flex;
  2497. flex-direction:row;
  2498. justify-content: flex-start;
  2499. align-items: center;
  2500. }
  2501. .zhm_amount_money{
  2502. display: flex;
  2503. align-items: flex-start;
  2504. }
  2505. .zhm_money_sign{
  2506. color:#f23030;
  2507. font-size: 20px;
  2508. font-family: Arial;
  2509. }
  2510. .zhm_money_num{
  2511. color:#f23030;
  2512. font-size:36px;
  2513. margin-left: 2px;
  2514. }
  2515. .zhm_condition{
  2516. color:#fb0f3a;
  2517. background-color: #fff4ec;
  2518. margin-top:5px;
  2519. margin-left: 5px;
  2520. padding:2px 5px;
  2521. font-size:12px;
  2522. }
  2523. .zhm_time{
  2524. display: flex;
  2525. flex-direction:row;
  2526. margin-top: -5px;
  2527. padding:2px 4px;
  2528. }
  2529. .zhm_term{
  2530. color:#fb0f3a;
  2531. border: 1px solid #fb0f3a;
  2532. border-radius:2px;
  2533. align-items: center;
  2534. padding:0px 4px;
  2535. font-size:12px;
  2536. height: 18px;
  2537. }
  2538. .zhm_date{
  2539. font-size: 14px;
  2540. font-weight: 500;
  2541. padding-left:8px;
  2542. }
  2543. .zhm_circle{
  2544. background: #fb0f3a url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsSAAALEgHS3X78AAAAzUlEQVQYlS3NMUoDQRiG4Xcmu9lAXBQbq+1CCqucwsbOO3gAS29h4Qm8gRdIMKVglQVBFiSFjYKBqWZ2d/7PIvYPPE6SMCHvcD8HuLzBUsIKDyY8AN4RU+J9/8nH8oLYJ3wWchxBjJHtZkN1fsbp9omvhzv6ccDjQJLatlXXdZIk5awkKVzdKk9W8gBFUVDXNQA2jJTA7GSOmR2LpmkIIWA546spvO5wL29Qz3GSBBCHnnwIzO4f0fMaYoKy/Acm8A6+fxkX15ANqimY8QemCm920r1aUAAAAABJRU5ErkJggg==) repeat-y;
  2545. margin-top:10px;
  2546. width: 10px;
  2547. height:66px;
  2548. position: absolute;
  2549. right:44px;
  2550. z-index:2;
  2551. filter:none;
  2552. }
  2553. .zhm_link_coupon{
  2554. display: flex;
  2555. flex-direction:row;
  2556. align-items:center;
  2557. filter: drop-shadow(2px 2px 3px #888);
  2558. background: radial-gradient(circle at left top, transparent 8px, #fb053a 0) top right /var(--left) 50% no-repeat,
  2559. radial-gradient(circle at left bottom, transparent 8px, #fb053a 0) bottom right /var(--left) 50% no-repeat;
  2560. height: 84px;
  2561. }
  2562. .zhm_link_text{
  2563. cursor:pointer;
  2564. margin-top: 10px;
  2565. margin-left: 12px;
  2566. writing-mode:vertical-lr;
  2567. letter-spacing:10px;
  2568. color: #fff !important;
  2569. font-size:16px;
  2570. font-family:"Microsoft YaHei";
  2571. text-decoration:none;
  2572. width:38px;
  2573. background: radial-gradient(circle at left top, transparent 8px, #fb053a 0) top right /var(--left) 50% no-repeat,
  2574. radial-gradient(circle at left bottom, transparent 8px, #fb053a 0) bottom right /var(--left) 50% no-repeat;
  2575. }
  2576. .zhm_link_text:hover{
  2577. text-decoration:none;
  2578. font-weight:800;
  2579. font-family:"Microsoft YaHei";
  2580. }
  2581. `;
  2582. domStyle .appendChild(document.createTextNode(couponStyle));
  2583. domHead.appendChild(domStyle);
  2584. let n=0;
  2585. let couponTimer = setInterval(function(){
  2586. n++;
  2587. let pageNode = document.querySelector(nowNode)
  2588. if(pageNode){
  2589. clearInterval(couponTimer);
  2590. couponClass[nowName]();
  2591. }else{
  2592. if(n==couponTimerNum) clearInterval(couponTimer);
  2593. }
  2594. },100)
  2595. }
  2596. function playVideoFunc(){
  2597. var playVideoClass = new PlayVideoClass();
  2598. //css
  2599. let playVideoStyle = `
  2600. .zhm_play_vidoe_icon{
  2601. padding-top:2px;cursor:pointer;
  2602. z-index:9999999;
  2603. display:block;
  2604. position:fixed;${iconVipPosition}:0px;top:${iconVipTop}px;text-align:center;overflow:visible
  2605. }
  2606. .zhm_play_video_wrap{
  2607. position:fixed;${iconVipPosition}:${iconVipWidth}px;top:${iconVipTop}px;
  2608. z-index:9999999;
  2609. overflow: hidden;
  2610. width:300px;
  2611. }
  2612. .zhm_play_video_line{
  2613. width:320px;
  2614. height:316px;
  2615. overflow-y:scroll;
  2616. overflow-x:hidden;
  2617. }
  2618. .zhm_play_vide_line_ul{
  2619. width:300px;
  2620. display: flex;
  2621. justify-content: flex-start;
  2622. flex-flow: row wrap;
  2623. list-style: none;
  2624. padding:0px;
  2625. margin:0px;
  2626. }
  2627. .zhm_play_video_line_ul_li{
  2628. padding:4px 0px;
  2629. margin:2px;
  2630. width:30%;
  2631. color:#FFF;
  2632. text-align:center;
  2633. background-color:#f24443;
  2634. box-shadow:0px 0px 10px #fff;
  2635. font-size:14px;
  2636. }
  2637. .zhm_play_video_line_ul_li:hover{
  2638. color:#260033;
  2639. background-color:#fcc0c0
  2640. }
  2641. .zhm_line_selected{
  2642. color:#260033;
  2643. background-color:#fcc0c0
  2644. }
  2645. .zhm_play_video_jx{
  2646. width:100%;
  2647. height:100%;
  2648. z-index:999999;
  2649. position: absolute;top:0px;padding:0px;
  2650. }
  2651. `;
  2652. domStyle .appendChild(document.createTextNode(playVideoStyle));
  2653. domHead.appendChild(domStyle);
  2654. //custom add line
  2655. if(GM_getValue('videoPlayLineAdd')==22 && GM_getValue('playVideoLineText')){
  2656. let lineObj = playVideoClass.getLine(GM_getValue('playVideoLineText'));
  2657. if(lineObj){
  2658. playLine = [...lineObj,...playLine];
  2659. }
  2660. }
  2661. //template:icon,playLine;
  2662. 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:"+iconVipWidth+"px'>";
  2663. playWrapHtml += "<div class='playLineDiv zhm_play_video_wrap' style='display:none;'>"
  2664. playWrapHtml += "<div class='zhm_play_video_line'>";
  2665. playWrapHtml +="<div><ul class='zhm_play_vide_line_ul'>";
  2666. playLine.forEach(function(item){
  2667. let selected = '';
  2668. if(playVideoClass.getCookie('playLineAction') == item.url){
  2669. selected='zhm_line_selected';
  2670. }
  2671. playWrapHtml +=`<li class='playLineTd zhm_play_video_line_ul_li ${selected}' url='${item.url}' >${item.name}</li>`;
  2672. })
  2673. playWrapHtml +="</div></div></div>";
  2674. //template:node;播放区域
  2675. let playJxHtml = "<div class='zhm_play_video_jx'>";
  2676. playJxHtml += "<iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='playIframe'></iframe></div>";
  2677. //循环判断是否在播放页,是则执行下面
  2678. let jxVideoData = [
  2679. {funcName:"playVideo", node:".player__container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  2680. {funcName:"playVideo", node:"#player-container" ,match:/https:\/\/v.qq.com\/x\/cover\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+.html/,areaClassName:'mod_episode',name:'qqPC'},
  2681. {funcName:"playVideo", node:".container-player" ,match:/v\.qq\.com\/x\/page/,areaClassName:'mod_episode'},
  2682. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/m\/play\?cid/},
  2683. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/x\/play\.html\?cid=/},
  2684. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/play\.html\?cid\=/},
  2685. {funcName:"playVideo", node:"#player",match:/m\.v\.qq\.com\/cover\/.*html/},
  2686. {funcName:"playVideo", node:"#flashbox",match:/^https:\/\/www\.iqiyi\.com\/[vwa]\_/,areaClassName:'qy-episode-num',name:'iqiyiPc'},
  2687. {funcName:"playVideo", node:".m-video-player-wrap",match:/^https:\/\/m.iqiyi\.com\/[vwa]\_/,areaClassName:'m-sliding-list'},
  2688. {funcName:"playVideo", node:".intl-video-wrap",match:/^https:\/\/www\.iq\.com\/play\//,areaClassName:'m-sliding-list'},
  2689. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/alipay_video\/id_/},
  2690. {funcName:"playVideo", node:"#player",match:/m\.youku\.com\/video\/id_/},
  2691. {funcName:"playVideo", node:"#player",match:/v\.youku\.com\/v_show\/id_/},
  2692. //{funcName:"playVideo", node:".player-container",nodeType:'id',match:/www\.bilibili\.com\/video/},
  2693. {funcName:"playVideo", node:"#bilibili-player",nodeType:'id',match:/www\.bilibili\.com\/video/,name:'biliPc',areaClassName:'video-episode-card'},
  2694. {funcName:"playVideo", node:"#player_module",nodeType:'id',match:/www\.bilibili\.com\/bangumi/,areaClassName:'ep-list-wrapper report-wrap-module'},
  2695. {funcName:"playVideo", node:".player-container",nodeType:'class',match:/m\.bilibili\.com\/bangumi/,areaClassName:'ep-list-pre-container no-wrap'},
  2696. {funcName:"playVideo", node:".mplayer",nodeType:'class',match:/m\.bilibili\.com\/video\//},
  2697. {funcName:"playVideo", node:".video-area",nodeType:'class',match:/m\.mgtv\.com\/b/},
  2698. {funcName:"playVideo", node:"#mgtv-player-wrap",nodeType:'id',match:/mgtv\.com\/b/,areaClassName:'episode-items clearfix'},
  2699. {funcName:"playVideo", node:".x-player",nodeType:'class',match:/tv\.sohu\.com\/v/},
  2700. {funcName:"playVideo", node:".x-cover-playbtn-wrap",nodeType:'class',match:/m\.tv\.sohu\.com/},
  2701. {funcName:"playVideo", node:"#playerWrap",nodeType:'id',match:/film\.sohu\.com\/album\//},
  2702. {funcName:"playVideo", node:"#le_playbox",nodeType:'id',match:/le\.com\/ptv\/vplay\//,areaClassName:'juji_grid'},
  2703. {funcName:"playVideo", node:"#player",nodeType:'id',match:/play\.tudou\.com\/v_show\/id_/},
  2704. {funcName:"playVideo", node:"#pptv_playpage_box",nodeType:'id',match:/v\.pptv\.com\/show\//},
  2705. {funcName:"playVideo", node:"#player",nodeType:'id',match:/vip\.1905.com\/play\//},
  2706. {funcName:"playVideo", node:"#vodPlayer",nodeType:'id',match:/www\.1905.com\/vod\/play\//},
  2707. ];
  2708. //创建logo_icon
  2709. playVideoClass.createElement('div','zhmIcon');
  2710. let zhmPlay = document.getElementById('zhmIcon');
  2711. zhmPlay.innerHTML = playWrapHtml;
  2712. let jxVideoWeb = jxVideoData.filter(function(item){
  2713. return location.href.match(item.match);
  2714. })
  2715. //是否在播放页
  2716. if(jxVideoWeb.length == 0){
  2717. document.querySelector('#zhmIcon').addEventListener('click',function(){
  2718. BaseClass.toast('请在视频播放页点击图标');
  2719. })
  2720. }else{
  2721. var {funcName,match:nowMatch,node:nowNode,name:nowName} = jxVideoWeb[0];
  2722. //鼠标经过显示线路
  2723. document.querySelector('.playButton').onmouseover=()=>{
  2724. document.querySelector(".playLineDiv").style.display='block';
  2725. }
  2726. document.querySelector('.playButton').onmouseout=()=>{
  2727. document.querySelector(".playLineDiv").style.display='none';
  2728. }
  2729. //选择线路解析播放
  2730. var playLineTd = document.querySelectorAll('.playLineTd');
  2731. playLineTd.forEach(function(item){
  2732. item.addEventListener('click',function(){
  2733. playLineTd.forEach(function(e){
  2734. e.setAttribute('class','playLineTd zhm_play_video_line_ul_li');
  2735. })
  2736. this.setAttribute('class','playLineTd zhm_play_video_line_ul_li zhm_line_selected');
  2737. playVideoClass.setCookie('playLineAction',this.getAttribute('url'),30);
  2738. let nowWebNode = document.querySelector(nowNode);
  2739. if(nowWebNode){
  2740. nowWebNode.innerHTML = playJxHtml;
  2741. let playIframe = document.querySelector('#playIframe');
  2742. playIframe.src= item.getAttribute('url')+location.href;
  2743. }else{
  2744. console.log('视频网站结点不存在');
  2745. }
  2746. })
  2747. })
  2748. /*--特殊处理--*/
  2749. //优酷去广告
  2750. if(nowNode=="#player"){
  2751. setTimeout(function(){
  2752. let youkuAd = document.querySelector('.advertise-layer');
  2753. let ykAd = youkuAd.lastChild;
  2754. ykAd.parentNode.removeChild(ykAd);
  2755. document.querySelector('.kui-dashboard-0').style='display:flex';
  2756. let playVideo = document.querySelector('.video-layer video');
  2757. playVideo.play();
  2758. let n=0;
  2759. //暂停
  2760. document.querySelector('.kui-play-icon-0').addEventListener('click',function(){
  2761. let video = document.querySelector('.video-layer video');
  2762. if(n++%2 == 0){
  2763. video.pause();
  2764. }else{
  2765. video.play();
  2766. }
  2767. });
  2768. playVideo.addEventListener('timeupdate',function(){ //播放时间改变
  2769. let youkuAd = document.querySelector('.advertise-layer');
  2770. let ykAd = youkuAd.lastChild;
  2771. if(ykAd){
  2772. ykAd.parentNode.removeChild(ykAd);
  2773. }
  2774. document.querySelector('.kui-dashboard-0').style='display:flex';
  2775. });
  2776. },3000)
  2777. }
  2778. //爱奇艺去广告
  2779. if(nowNode=="#flashbox"){
  2780. setTimeout(function(){
  2781. let dom = document.querySelector('.skippable-after');
  2782. if(dom){
  2783. dom.click();
  2784. }
  2785. },3000)
  2786. }
  2787. //腾讯去弹窗
  2788. if(nowNode=="#player-container"){
  2789. let n = 0;
  2790. let timer = setInterval(function(){
  2791. if(n++ < 100){
  2792. let panelTipVip = document.querySelector('.panel-overlay');
  2793. if(panelTipVip){
  2794. panelTipVip.style.display='none';
  2795. clearInterval(timer);
  2796. }
  2797. }else{
  2798. clearInterval(timer);
  2799. }
  2800. },100)
  2801. }
  2802. //乐视选集处理
  2803. if(nowNode == "#le_playbox"){
  2804. setTimeout(function(){
  2805. let jBlock = document.querySelectorAll('.j_block');
  2806. if(!jBlock) return;
  2807. for(let i=0;i<jBlock.length;i++){
  2808. let videoId = jBlock[i].getAttribute('data-vid');
  2809. let link = `https://www.le.com/ptv/vplay/${videoId}.html`;
  2810. jBlock[i].firstChild.setAttribute('href',link);
  2811. }
  2812. },3000)
  2813. }
  2814. //B站大会员url处理,页面class不一致
  2815. if(nowNode == ".player-container"){
  2816. setTimeout(function(){
  2817. if(!document.querySelector('.player-container') && !document.querySelector('.bpx-player-container')){
  2818. nowNode = '.player-mask';
  2819. }else{
  2820. nowNode = '.bpx-player-container';
  2821. }
  2822. },3000)
  2823. }
  2824. document.querySelector('.iconLogo').addEventListener('click',function(){
  2825. playVideoClass.request('get',`${zhmApiUrl}/jxcode.php?in=${jxCodeInfo.in}&code=${jxCodeInfo.code}`).then((result)=>{
  2826. location.href=`${zhmApiUrl}/jxjx.php?lrspm=${result}&zhm_jx=${location.href}`;
  2827. }).cath(err=>{})
  2828. })
  2829. //全局click监听
  2830. document.addEventListener('click',function(e){
  2831. /*爱奇艺选集去广告*/
  2832. if(nowName=='iqiyiPc'){
  2833. e.path.forEach(function(item){
  2834. if(item.className.indexOf('select-item')!= -1){
  2835. setTimeout(function(){
  2836. location.href=location.href;
  2837. },1000)
  2838. }
  2839. })
  2840. setTimeout(function(){
  2841. let dom = document.querySelector('.skippable-after');
  2842. if(dom){
  2843. dom.click();
  2844. }else{
  2845. return;
  2846. }
  2847. },5000)
  2848. }
  2849. let areaClassName = [];
  2850. e.path.filter(function(item){
  2851. if(item.className == nowWeb[0].areaClassName){
  2852. areaClassName=item;
  2853. };
  2854. })
  2855. if(areaClassName.length == 0){
  2856. console.log('不在选集范围');
  2857. return;
  2858. }
  2859. if(nowName=='qqPC'){
  2860. e.path.forEach(function(item){
  2861. if(item.className=='episode-list-rect__item' || item.className.indexOf('episode-item') != -1){
  2862. setTimeout(function(){
  2863. location.href=location.href;
  2864. },1000)
  2865. }
  2866. })
  2867. }
  2868. if(nowName == 'biliPc'){
  2869. //在元素范围内,不用跳转,
  2870. let className = ['bpx-player-video-area'];//点击元素范围,范围取视频播发区域。后续有跳转错误,新增区域即可。
  2871. let matchNum = 0;
  2872. e.path.filter(function(item){
  2873. if(className.indexOf(item.className) != -1){
  2874. matchNum++;
  2875. }
  2876. })
  2877. if(matchNum > 0){
  2878. return;
  2879. }
  2880. //视频页面选集跳转
  2881. setTimeout(function(){
  2882. let videoClassName = ['video-episode-card'];//视频页面续集dom
  2883. e.path.filter(function(item){
  2884. if(videoClassName.indexOf(item.className) != -1){
  2885. location.href = location.href;
  2886. }
  2887. })
  2888. })
  2889. }
  2890. var objLink = {};
  2891. e.path.forEach(function(item){
  2892. if(item.href){
  2893. objLink.href = item.href?item.href:'';
  2894. objLink.target = item.target?item.target:'';
  2895. return;
  2896. }
  2897. })
  2898. if(objLink.href && objLink.target != '_blank'){
  2899. location.href = objLink.href;
  2900. return;
  2901. }
  2902. })
  2903. /*腾讯视频点击其它视频跳转*/
  2904. if(nowName=='qqPC'){
  2905. let figure = document.querySelectorAll('.figure');
  2906. let figureDetail = document.querySelectorAll('.figure_detail');
  2907. let listItem = [...figure,...figureDetail];
  2908. if(listItem.length > 0){
  2909. listItem.forEach(function(item){
  2910. item.addEventListener('click',function(){
  2911. let link = this.getAttribute('href');
  2912. if(link){
  2913. location.href = link;
  2914. return;
  2915. }
  2916. })
  2917. });
  2918. }
  2919. }
  2920. }
  2921. }
  2922. function playMusicFunc(){
  2923. if(self.frameElement && self.frameElement.tagName == "IFRAME"){
  2924. return;
  2925. }
  2926. var playMusicClass = new PlayMusicClass();
  2927. const webUrl = 'http://music.eggvod.cn/';
  2928. var musicId = Math.ceil(Math.random()*100000000);
  2929. var musicHtml = "<div href='javascript:void(0)' id=music"+musicId+" class='zhm_icon' style='cursor:pointer;z-index:98;display:block;width:"+iconVipWidth+"px;position:fixed;"+iconVipPosition+":0;top:"+iconVipTop+"px;text-align:center;'><img src='data:image/gif;base64,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' title='在音乐单曲播放页面点击图标下载' style='width:"+iconVipWidth+"px'></div>";
  2930. //netease 路由两次,需重定义
  2931. var newUrl = location.href;
  2932. let jxMusicWeb = jxMusic[0].web.filter(function(item){
  2933. return newUrl.match(item.match);
  2934. })
  2935. if(jxMusicWeb.length){
  2936. let timerZhmIcon = setInterval(function(){
  2937. if (document.querySelector('#zhmIcon')){
  2938. clearInterval(timerZhmIcon); // 取消定时器
  2939. if(jxMusicWeb[0].name=='kuwo'){
  2940. setTimeout(function(){
  2941. let control = document.querySelector('.icon-bar_icon_download_');
  2942. let icon = control.cloneNode(true);
  2943. icon.className = '';
  2944. icon.style='margin-left:10px;';
  2945. icon.innerHTML = "<a style='font-size:10px;white-space: nowrap;cursor:pointer;color:#555;' id='kuwoDownload'>下载</a>";
  2946. let controls = document.querySelector('.col_r');
  2947. controls.before(icon);
  2948. document.querySelector('#kuwoDownload').addEventListener('click',function(){
  2949. let audioSrc = document.querySelector("audio").src;
  2950. let songName = document.querySelector('.control .song_name').title;
  2951. let artist = document.querySelector('.control .artist').title;
  2952. GM_download(audioSrc,songName+'-'+artist+'.mp3');
  2953. })
  2954. },2000)
  2955. }
  2956. if(jxMusicWeb[0].name=='ximalaya'){
  2957. setTimeout(function(){
  2958. //播放器创建下载icon
  2959. let xmControls = document.querySelector('.xm-player-oprations');
  2960. let control = xmControls.querySelector('a:nth-of-type(2)');
  2961. let icon = control.cloneNode(true);
  2962. icon.innerHTML = "<span style='font-size:10px;white-space: nowrap;cursor:pointer;color:#FFF;' id='ximaDownload'>下载</span>";
  2963. xmControls.style='position: relative;margin-left:-20px;';
  2964. document.querySelector('.xm-player-progress').style.width='450px';
  2965. document.querySelector('.xm-player-playtime').style='position: absolute;right:40px;';
  2966. xmControls.prepend(icon);
  2967. //播放器下载事件
  2968. document.querySelector('#ximaDownload').addEventListener('click',function(){
  2969. let fmTitle = document.querySelector('.fm-title');
  2970. let fmTitleMatch = fmTitle.href.match(/^https?:\/\/www\.ximalaya\.com\/sound\/(\S*)$/);
  2971. let url = 'https://mobile.ximalaya.com/mobile-playpage/track/v3/baseInfo/'+new Date().getTime()+'?device=web&trackId='+fmTitleMatch[1];
  2972. playMusicClass.request('get',url).then((result)=>{
  2973. let data = JSON.parse(result);
  2974. let playUrl = data.trackInfo.playUrlList[1].url;
  2975. let str1 = playUrl.replaceAll('-','+');
  2976. let str2 = str1.replaceAll('_','/');
  2977. let num = str2.length%4;
  2978. if(num){
  2979. str2 += '===='.substr(num);
  2980. }
  2981. let decrypted = CryptoJS.AES.decrypt({
  2982. ciphertext: CryptoJS.enc.Base64.parse(str2)
  2983. }, CryptoJS.enc.Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"), {
  2984. mode: CryptoJS.mode.ECB,
  2985. padding: CryptoJS.pad.Pkcs7
  2986. }).toString(CryptoJS.enc.Utf8);
  2987. console.log(decrypted);
  2988. if(decrypted){
  2989. GM_download(decrypted,data.trackInfo.title+'.mp3');
  2990. }else{
  2991. console.log('解密地址失败');
  2992. }
  2993. })
  2994. })
  2995. //页面列表创建批量下载
  2996. let urlMatch = newUrl.match(/^https:\/\/www.ximalaya.com\/album\/[0-9]+/);
  2997. if(urlMatch){
  2998. let soundList = document.querySelector('#anchor_sound_list');
  2999. if(soundList){
  3000. let soundListHead = soundList.querySelector('.head');
  3001. let soundListHeadTitle = soundListHead.querySelector('.sort').lastChild;
  3002. let data = [{name:'批量下载',id:'batchDownload'},{name:'重置',id:'reset'},{name:'全选',id:'selectAll'}];
  3003. data.forEach(function(item){
  3004. let control = soundListHeadTitle.cloneNode(true);
  3005. control.setAttribute('id',item.id);
  3006. control.innerText = item.name;
  3007. soundListHeadTitle.after(control);
  3008. control.before(" | ");
  3009. });
  3010. playMusicClass.xmlyCreateCheckbox();
  3011. document.querySelector('#selectAll').addEventListener('click',function(){
  3012. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  3013. zhmCheckbox.forEach(function(item){
  3014. if(!item.checked){
  3015. item.checked=true;
  3016. }
  3017. })
  3018. });
  3019. document.querySelector('#reset').addEventListener('click',function(){
  3020. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  3021. zhmCheckbox.forEach(function(item){
  3022. item.checked = false;
  3023. })
  3024. })
  3025. document.querySelector('#batchDownload').addEventListener('click',function(){
  3026. //BaseClass.toast('已下载,请稍候');
  3027. let zhmCheckbox = soundList.querySelectorAll("input[name='zhmCheckbox']");
  3028. zhmCheckbox.forEach(function(item){
  3029. if(item.checked){
  3030. let scrMatch = item.value.match(/\/sound\/([0-9]+)/);
  3031. let url = 'https://mobile.ximalaya.com/mobile-playpage/track/v3/baseInfo/'+new Date().getTime()+'?device=web&trackId='+scrMatch[1];
  3032. playMusicClass.request('get',url).then((result)=>{
  3033. let data = JSON.parse(result);
  3034. let playUrl = data.trackInfo.playUrlList[1].url;
  3035. let str1 = playUrl.replaceAll('-','+');
  3036. let str2 = str1.replaceAll('_','/');
  3037. let num = str2.length%4;
  3038. if(num){
  3039. str2 += '===='.substr(num);
  3040. }
  3041. let decrypted = CryptoJS.AES.decrypt({
  3042. ciphertext: CryptoJS.enc.Base64.parse(str2)
  3043. }, CryptoJS.enc.Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"), {
  3044. mode: CryptoJS.mode.ECB,
  3045. padding: CryptoJS.pad.Pkcs7
  3046. }).toString(CryptoJS.enc.Utf8);
  3047. //console.log(decrypted);
  3048. if(decrypted){
  3049. GM_download(decrypted,data.trackInfo.title+'.mp3');
  3050. }else{
  3051. console.log('解密地址失败');
  3052. }
  3053. })
  3054. }
  3055. })
  3056. })
  3057. //正序倒序事件
  3058. soundListHead.querySelector('.sort').firstChild.addEventListener('click',function(){
  3059. setTimeout(function(){
  3060. playMusicClass.xmlyCreateCheckbox();
  3061. },2000)
  3062. });
  3063. soundListHeadTitle.addEventListener('click',function(){
  3064. setTimeout(function(){
  3065. playMusicClass.xmlyCreateCheckbox();
  3066. },2000)
  3067. });
  3068. //翻页事件
  3069. let pageBar = document.querySelector('.pagination-page');
  3070. pageBar.addEventListener('click',function(){
  3071. setTimeout(function(){
  3072. playMusicClass.xmlyCreateCheckbox();
  3073. },2000)
  3074. })
  3075. //跳页事件
  3076. document.querySelector('button[type=submit]').addEventListener('click',function(){
  3077. setTimeout(function(){
  3078. playMusicClass.xmlyCreateCheckbox();
  3079. },1000)
  3080. })
  3081. }
  3082. }else{
  3083. console.log('url地址错误');
  3084. }
  3085. },1000);
  3086. //全局点击事件
  3087. document.addEventListener('click',function(e){
  3088. var objLink = {};
  3089. e.path.forEach(function(item){
  3090. if(item.href){
  3091. objLink.href = item.href?item.href:'';
  3092. objLink.target = item.target?item.target:'';
  3093. return;
  3094. }
  3095. })
  3096. if(objLink.href && objLink.target != '_blank'){
  3097. location.href = objLink.href;
  3098. return;
  3099. }
  3100. })
  3101. }
  3102. if(jxMusicWeb[0].name=='kugou'){
  3103. let aDom = document.querySelectorAll('a');
  3104. aDom.forEach(function(item){
  3105. let dataObj = item.getAttribute('dataobj');
  3106. if(dataObj){
  3107. item.removeAttribute('dataobj');
  3108. item.setAttribute('target','_blank');
  3109. //console.log(dataObj);
  3110. }
  3111. })
  3112. if(couponUrl.indexOf('mixsong')!=-1 || couponUrl.indexOf('song') != -1){
  3113. setTimeout(function(){
  3114. let volumeDom = document.querySelector('#volume');
  3115. let downloadDom = volumeDom.cloneNode(true);
  3116. downloadDom.removeAttribute('id');
  3117. downloadDom.style='margin-top:30px';
  3118. downloadDom.innerHTML = "<a style='color:#fff;font-size:10px;white-space:nowrap;cursor:pointer;' id='kugouDownload' javascript:void(0);>下载</a>";
  3119. volumeDom.before(downloadDom);
  3120. volumeDom.style='left:50px;';
  3121. document.querySelector('#mode').style='margin-left:90px;';
  3122. document.querySelector('#pb_download').style='margin-left:130px;';
  3123. document.querySelector('#pb_share').style='margin-left:170px;';
  3124. document.querySelector('#list').style='right:-20px;';
  3125. document.querySelector('#kugouDownload').addEventListener('click',function(){
  3126. let audio = document.querySelector('#myAudio');
  3127. let audioSrc = audio.getAttribute('src');
  3128. let singerName = document.querySelector('.singerName').title;
  3129. let songName = document.querySelector('#songNameTemp').title;
  3130. GM_download(audioSrc,songName+'-'+singerName.substr(0,singerName.length-1)+'.mp3');
  3131. })
  3132. },1000)
  3133. }
  3134. console.log(couponUrl);
  3135. }
  3136. if(jxMusicWeb[0].name=='netease' && location.href == 'https://music.163.com/st/download'){
  3137. return false;
  3138. }
  3139. let zhmPlay = document.getElementById('zhmIcon');
  3140. setTimeout(function(){
  3141. zhmPlay.innerHTML = musicHtml;
  3142. document.querySelector('.zhm_icon').addEventListener('click',function(){
  3143. let musicUrlData = [
  3144. {match:/^https?:\/\/music\.163\.com\/#\/(?:song|dj)\?id/},
  3145. {match:/^https?:\/\/y\.music\.163\.com\/m\/(?:song|dj)\?id/},
  3146. {match:/^https?:\/\/music\.163\.com\/(?:song|dj)\?id/},
  3147. {match:/^https?:\/\/y\.qq\.com\/n\/ryqq\/player/},
  3148. {match:/kugou\.com/},
  3149. {match:/kuwo\.cn/},
  3150. {match:/^https?:\/\/www\.ximalaya\.com/},
  3151. ]
  3152. let musicUrl = musicUrlData.filter(function(item){
  3153. return location.href.match(item.match);
  3154. })
  3155. if(musicUrl.length==0){
  3156. BaseClass.toast(jxMusicWeb[0].tip);
  3157. return;
  3158. }
  3159. switch(jxMusicWeb[0].name){
  3160. case 'netease':
  3161. neteaseFun();
  3162. break;
  3163. case 'qq':
  3164. qqFun();
  3165. break;
  3166. case 'kugou':
  3167. kugouFun();
  3168. break;
  3169. case 'kuwo':
  3170. kuwoFun();
  3171. break;
  3172. case 'ximalaya':
  3173. ximalayaFun();
  3174. break;
  3175. }
  3176. function neteaseFun(){
  3177. let urlParams = playMusicClass.getUrlParams(location.href);
  3178. if(urlParams.id == undefined) return;
  3179. let neteaseUrlEncode = encodeURIComponent('https://music.163.com/song?id='+urlParams.id);
  3180. let openUrl = webUrl+'?url='+neteaseUrlEncode;
  3181. window.open(openUrl);
  3182. }
  3183. function qqFun(){
  3184. let qqSongMatch;
  3185. if(document.querySelector(".player_music__info")){
  3186. qqSongMatch = document.querySelector(".player_music__info").childNodes[0].href.match(/songDetail\/(\S*)\?/);
  3187. }else if(document.querySelector("#sim_song_info")){
  3188. qqSongMatch = document.querySelector("#sim_song_info").childNodes[0].href.match(/song\/(\S*).html/);
  3189. }else{
  3190. qqSongMatch = '';
  3191. }
  3192. if(!qqSongMatch[1]){console.log('没有获取到歌曲ID'); return};
  3193. let audioLink = encodeURIComponent(document.querySelector("audio").src);
  3194. let openUrl = webUrl+'?id='+qqSongMatch[1]+'&type=qq&playUrl='+audioLink;
  3195. window.open(openUrl);
  3196. }
  3197. function kugouFun(){
  3198. let audioModule = document.querySelector('#audioModule');
  3199. if(audioModule){
  3200. document.querySelector('#audioModule').style='bottom:0px;';
  3201. document.querySelector('#showHide_playbar').className = 'icon show-playbar-btn';
  3202. }
  3203. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  3204. }
  3205. function kuwoFun(){
  3206. document.querySelector('.playControl').style='bottom:0px';
  3207. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  3208. }
  3209. function ximalayaFun(){
  3210. document.querySelector('.xm-player').style='bottom:0px';
  3211. BaseClass.toast('请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',2000)
  3212. }
  3213. })
  3214. },iconWaitTime);
  3215. }else{
  3216. playMusicClass.createElement('div','zhmIcon');
  3217. }
  3218. })
  3219. }else{
  3220. let zhmPlayDom = document.querySelector('#zhmIcon');
  3221. if(zhmPlayDom){
  3222. zhmPlayDom.parentNode.removeChild(zhmPlayDom);
  3223. }
  3224. console.log('当前音频网址没有添加匹配或匹配错误');
  3225. }
  3226. }
  3227. function zhNiceFunc(){
  3228. var zhClass = new ZhClass();
  3229. var zhData = [
  3230. {func:'removeVideo',isOpen:GM_getValue('removeVideo','0'),isOnscroll:1,onload:1},
  3231. {func:'removeAD',isOpen:GM_getValue('removeAD','22'),isOnscroll:0,onload:0},
  3232. {func:'downloadVideo',isOpen:GM_getValue('downloadVideo','22'),isOnscroll:0,onload:0},
  3233. {func:'removeRight',isOpen:GM_getValue('removeRight','0'),isOnscroll:0,onload:0},
  3234. {func:'changeLink',isOpen:GM_getValue('changeLink','22'),isOnscroll:0,onload:0},
  3235. {func:'removeKeyword',isOpen:GM_getValue('removeKeyword','0'),isOnscroll:1,onload:1},
  3236. {func:'showSpecialColumn',isOpen:GM_getValue('specialColumn','22'),isOnscroll:1,onload:1},
  3237. {func:'showVideoTitle',isOpen:GM_getValue('videoTitle','22'),isOnscroll:1,onload:1},
  3238. {func:'removeAuthorName',isOpen:GM_getValue('removeAuthorName','0'),isOnscroll:1,onload:1},
  3239. {func:'removeYanxuan',isOpen:GM_getValue('removeYanxuan','0'),isOnscroll:1,onload:1},
  3240. ]
  3241. zhData.forEach(function(item){
  3242. if(item.isOpen==22 && item.onload==0){
  3243. zhClass[item.func]();
  3244. }
  3245. })
  3246. window.onload=function(){
  3247. zhData.forEach(function(item){
  3248. if(item.isOpen==22 && item.onload==1){
  3249. zhClass[item.func]();
  3250. }
  3251. })
  3252. }
  3253. window.onscroll = function(){
  3254. var scrollTop = document.documentElement.scrollTop;
  3255. if(scrollTop > 200){
  3256. zhData.forEach(function(item){
  3257. if(item.isOpen==22 && item.isOnscroll==1){
  3258. zhClass[item.func]();
  3259. }
  3260. })
  3261. }
  3262. }
  3263. }
  3264. function baiduFunc(){
  3265. let pt = '', selectList = [], params = {}, mode = '', width = 800, pan = {}, color = '',
  3266. doc = $(document), progress = {}, request = {}, ins = {}, idm = {};
  3267. const version = '5.9.4';
  3268. const author = 'GreasyFork';
  3269. const name = '网盘直链下载助手';
  3270. const customClass = {
  3271. popup: 'pl-popup',
  3272. header: 'pl-header',
  3273. title: 'pl-title',
  3274. closeButton: 'pl-close',
  3275. content: 'pl-content',
  3276. input: 'pl-input',
  3277. footer: 'pl-footer'
  3278. };
  3279. const terminalType = {
  3280. wc: "Windows CMD",
  3281. wp: "Windows PowerShell",
  3282. lt: "Linux 终端",
  3283. ls: "Linux Shell",
  3284. mt: "MacOS 终端",
  3285. };
  3286. let toast = Swal.mixin({
  3287. toast: true,
  3288. position: 'top',
  3289. showConfirmButton: false,
  3290. timer: 3500,
  3291. timerProgressBar: false,
  3292. didOpen: (toast) => {
  3293. toast.addEventListener('mouseenter', Swal.stopTimer);
  3294. toast.addEventListener('mouseleave', Swal.resumeTimer);
  3295. }
  3296. });
  3297. const message = {
  3298. success: (text) => {
  3299. toast.fire({title: text, icon: 'success'});
  3300. },
  3301. error: (text) => {
  3302. toast.fire({title: text, icon: 'error'});
  3303. },
  3304. warning: (text) => {
  3305. toast.fire({title: text, icon: 'warning'});
  3306. },
  3307. info: (text) => {
  3308. toast.fire({title: text, icon: 'info'});
  3309. },
  3310. question: (text) => {
  3311. toast.fire({title: text, icon: 'question'});
  3312. }
  3313. };
  3314. let base = {
  3315. getCookie(name) {
  3316. let arr = document.cookie.replace(/\s/g, "").split(';');
  3317. for (let i = 0, l = arr.length; i < l; i++) {
  3318. let tempArr = arr[i].split('=');
  3319. if (tempArr[0] === name) {
  3320. return decodeURIComponent(tempArr[1]);
  3321. }
  3322. }
  3323. return '';
  3324. },
  3325. isType(obj) {
  3326. return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
  3327. },
  3328. getValue(name) {
  3329. return GM_getValue(name);
  3330. },
  3331. setValue(name, value) {
  3332. GM_setValue(name, value);
  3333. },
  3334. getStorage(key) {
  3335. try {
  3336. return JSON.parse(localStorage.getItem(key));
  3337. } catch (e) {
  3338. return localStorage.getItem(key);
  3339. }
  3340. },
  3341. setStorage(key, value) {
  3342. if (this.isType(value) === 'object' || this.isType(value) === 'array') {
  3343. return localStorage.setItem(key, JSON.stringify(value));
  3344. }
  3345. return localStorage.setItem(key, value);
  3346. },
  3347. setClipboard(text) {
  3348. GM_setClipboard(text, 'text');
  3349. },
  3350. e(str) {
  3351. return btoa(unescape(encodeURIComponent(str)));
  3352. },
  3353. d(str) {
  3354. return decodeURIComponent(escape(atob(str)));
  3355. },
  3356. getExtension(name) {
  3357. const reg = /(?!\.)\w+$/;
  3358. if (reg.test(name)) {
  3359. let match = name.match(reg);
  3360. return match[0].toUpperCase();
  3361. }
  3362. return '';
  3363. },
  3364. sizeFormat(value) {
  3365. if (value === +value) {
  3366. let unit = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
  3367. let index = Math.floor(Math.log(value) / Math.log(1024));
  3368. let size = value / Math.pow(1024, index);
  3369. size = size.toFixed(1);
  3370. return size + unit[index];
  3371. }
  3372. return '';
  3373. },
  3374. sortByName(arr) {
  3375. const handle = () => {
  3376. return (a, b) => {
  3377. const p1 = a.filename ? a.filename : a.server_filename;
  3378. const p2 = b.filename ? b.filename : b.server_filename;
  3379. return p1.localeCompare(p2, "zh-CN");
  3380. };
  3381. };
  3382. arr.sort(handle());
  3383. },
  3384. blobDownload(blob, filename) {
  3385. if (blob instanceof Blob) {
  3386. const url = URL.createObjectURL(blob);
  3387. const a = document.createElement('a');
  3388. a.href = url;
  3389. a.download = filename;
  3390. a.click();
  3391. URL.revokeObjectURL(url);
  3392. }
  3393. },
  3394. post(url, data, headers, type) {
  3395. if (this.isType(data) === 'object') {
  3396. data = JSON.stringify(data);
  3397. }
  3398. return new Promise((resolve, reject) => {
  3399. GM_xmlhttpRequest({
  3400. method: "POST", url, headers, data,
  3401. responseType: type || 'json',
  3402. onload: (res) => {
  3403. type === 'blob' ? resolve(res) : resolve(res.response || res.responseText);
  3404. },
  3405. onerror: (err) => {
  3406. reject(err);
  3407. },
  3408. });
  3409. });
  3410. },
  3411. get(url, headers, type, extra) {
  3412. return new Promise((resolve, reject) => {
  3413. let requestObj = GM_xmlhttpRequest({
  3414. method: "GET", url, headers,
  3415. responseType: type || 'json',
  3416. onload: (res) => {
  3417. if (res.status === 204) {
  3418. requestObj.abort();
  3419. idm[extra.index] = true;
  3420. }
  3421. if (type === 'blob') {
  3422. res.status === 200 && base.blobDownload(res.response, extra.filename);
  3423. resolve(res);
  3424. } else {
  3425. resolve(res.response || res.responseText);
  3426. }
  3427. },
  3428. onprogress: (res) => {
  3429. if (extra && extra.filename && extra.index) {
  3430. res.total > 0 ? progress[extra.index] = (res.loaded * 100 / res.total).toFixed(2) : progress[extra.index] = 0.00;
  3431. }
  3432. },
  3433. onloadstart() {
  3434. extra && extra.filename && extra.index && (request[extra.index] = requestObj);
  3435. },
  3436. onerror: (err) => {
  3437. reject(err);
  3438. },
  3439. });
  3440. });
  3441. },
  3442. getFinalUrl(url, headers) {
  3443. return new Promise((resolve, reject) => {
  3444. let requestObj = GM_xmlhttpRequest({
  3445. method: "GET", url, headers,
  3446. onload: (res) => {
  3447. resolve(res.finalUrl);
  3448. },
  3449. onerror: (err) => {
  3450. reject(err);
  3451. },
  3452. });
  3453. });
  3454. },
  3455. addStyle(id, tag, css) {
  3456. tag = tag || 'style';
  3457. let doc = document, styleDom = doc.getElementById(id);
  3458. if (styleDom) return;
  3459. let style = doc.createElement(tag);
  3460. style.rel = 'stylesheet';
  3461. style.id = id;
  3462. tag === 'style' ? style.innerHTML = css : style.href = css;
  3463. doc.getElementsByTagName('head')[0].appendChild(style);
  3464. },
  3465. findReact(dom, traverseUp = 0) {
  3466. const key = Object.keys(dom).find(key => {
  3467. return key.startsWith("__reactFiber$")
  3468. || key.startsWith("__reactInternalInstance$");
  3469. });
  3470. const domFiber = dom[key];
  3471. if (domFiber == null) return null;
  3472. if (domFiber._currentElement) {
  3473. let compFiber = domFiber._currentElement._owner;
  3474. for (let i = 0; i < traverseUp; i++) {
  3475. compFiber = compFiber._currentElement._owner;
  3476. }
  3477. return compFiber._instance;
  3478. }
  3479. const GetCompFiber = fiber => {
  3480. let parentFiber = fiber.return;
  3481. while (typeof parentFiber.type == "string") {
  3482. parentFiber = parentFiber.return;
  3483. }
  3484. return parentFiber;
  3485. };
  3486. let compFiber = GetCompFiber(domFiber);
  3487. for (let i = 0; i < traverseUp; i++) {
  3488. compFiber = GetCompFiber(compFiber);
  3489. }
  3490. return compFiber.stateNode || compFiber;
  3491. },
  3492. initDefaultConfig() {
  3493. let value = [{
  3494. name: 'setting_rpc_domain',
  3495. value: 'http://localhost'
  3496. }, {
  3497. name: 'setting_rpc_port',
  3498. value: '16800'
  3499. }, {
  3500. name: 'setting_rpc_path',
  3501. value: '/jsonrpc'
  3502. }, {
  3503. name: 'setting_rpc_token',
  3504. value: ''
  3505. }, {
  3506. name: 'setting_rpc_dir',
  3507. value: 'D:'
  3508. }, {
  3509. name: 'setting_terminal_type',
  3510. value: 'wc'
  3511. }, {
  3512. name: 'setting_theme_color',
  3513. value: '#09AAFF'
  3514. }, {
  3515. name: 'setting_init_code',
  3516. value: ''
  3517. }];
  3518. value.forEach((v) => {
  3519. base.getValue(v.name) === undefined && base.setValue(v.name, v.value);
  3520. });
  3521. },
  3522. showSetting() {
  3523. let dom = '', btn = '',
  3524. colorList = ['#09AAFF', '#cc3235', '#526efa', '#518c17', '#ed944b', '#f969a5', '#bca280'];
  3525. 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>`;
  3526. 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>`;
  3527. 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>`;
  3528. 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>`;
  3529. 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>`;
  3530. colorList.forEach((v) => {
  3531. 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>`;
  3532. });
  3533. dom += `<label class="pl-setting-label"><div class="pl-label">终端类型</div><select class="pl-input listener-terminal">`;
  3534. Object.keys(terminalType).forEach(k => {
  3535. dom += `<option value="${k}" ${base.getValue('setting_terminal_type') === k ? 'selected' : ''}>${terminalType[k]}</option>`;
  3536. });
  3537. dom += `</select></label>`;
  3538. dom += `<label class="pl-setting-label"><div class="pl-label">主题颜色</div> <div class="pl-color">${btn}<div></label>`;
  3539. dom = '<div>' + dom + '</div>';
  3540. Swal.fire({
  3541. title: '助手配置',
  3542. html: dom,
  3543. icon: 'info',
  3544. showCloseButton: true,
  3545. showConfirmButton: false,
  3546. footer: pan.footer,
  3547. }).then(() => {
  3548. message.success('设置成功!');
  3549. history.go(0);
  3550. });
  3551. doc.on('click', '.listener-color', async (e) => {
  3552. base.setValue('setting_theme_color', e.target.dataset.color);
  3553. message.success('设置成功!');
  3554. history.go(0);
  3555. });
  3556. doc.on('input', '.listener-domain', async (e) => {
  3557. base.setValue('setting_rpc_domain', e.target.value);
  3558. });
  3559. doc.on('input', '.listener-port', async (e) => {
  3560. base.setValue('setting_rpc_port', e.target.value);
  3561. });
  3562. doc.on('input', '.listener-path', async (e) => {
  3563. base.setValue('setting_rpc_path', e.target.value);
  3564. });
  3565. doc.on('input', '.listener-token', async (e) => {
  3566. base.setValue('setting_rpc_token', e.target.value);
  3567. });
  3568. doc.on('input', '.listener-dir', async (e) => {
  3569. base.setValue('setting_rpc_dir', e.target.value);
  3570. });
  3571. doc.on('change', '.listener-terminal', async (e) => {
  3572. base.setValue('setting_terminal_type', e.target.value);
  3573. });
  3574. },
  3575. registerMenuCommand() {
  3576. GM_registerMenuCommand('⚙️ 设置', () => {
  3577. this.showSetting();
  3578. });
  3579. },
  3580. createTip() {
  3581. $('body').append('<div class="pl-tooltip"></div>');
  3582. doc.on('mouseenter mouseleave', '.listener-tip', (e) => {
  3583. if (e.type === 'mouseenter') {
  3584. let filename = e.currentTarget.innerText;
  3585. let size = e.currentTarget.dataset.size;
  3586. let tip = `${filename}<span style="margin-left: 10px;color: #f56c6c;">${size}</span>`;
  3587. $(e.currentTarget).css({opacity: '0.5'});
  3588. $('.pl-tooltip').html(tip).css({
  3589. 'left': e.pageX + 10 + 'px',
  3590. 'top': e.pageY - e.currentTarget.offsetTop > 14 ? e.pageY + 'px' : e.pageY + 20 + 'px'
  3591. }).show();
  3592. } else {
  3593. $(e.currentTarget).css({opacity: '1'});
  3594. $('.pl-tooltip').hide(0);
  3595. }
  3596. });
  3597. },
  3598. createLoading() {
  3599. return $('<div class="pl-loading"><div class="pl-loading-box"><div><div></div><div></div></div></div></div>');
  3600. },
  3601. createDownloadIframe() {
  3602. let $div = $('<div style="padding:0;margin:0;display:block"></div>');
  3603. let $iframe = $('<iframe src="javascript:;" id="downloadIframe" style="display:none"></iframe>');
  3604. $div.append($iframe);
  3605. $('body').append($div);
  3606. },
  3607. getMirrorList(link, mirror, thread = 2) {
  3608. let host = new URL(link).host;
  3609. let mirrors = [];
  3610. for (let i = 0; i < mirror.length; i++) {
  3611. for (let j = 0; j < thread; j++) {
  3612. let item = link.replace(host, mirror[i]) + '&'.repeat(j);
  3613. mirrors.push(item);
  3614. }
  3615. }
  3616. return mirrors.join('\n');
  3617. },
  3618. addPanLinkerStyle() {
  3619. color = base.getValue('setting_theme_color');
  3620. let css = `
  3621. body::-webkit-scrollbar { display: none }
  3622. ::-webkit-scrollbar { width: 6px; height: 10px }
  3623. ::-webkit-scrollbar-track { border-radius: 0; background: none }
  3624. ::-webkit-scrollbar-thumb { background-color: rgba(85,85,85,.4) }
  3625. ::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover { border-radius: 5px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.2) }
  3626. ::-webkit-scrollbar-thumb:hover { background-color: rgba(85,85,85,.3) }
  3627. .swal2-popup { font-size: 16px !important; }
  3628. .pl-popup { font-size: 12px !important; }
  3629. .pl-popup a { color: ${color} !important; }
  3630. .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; }
  3631. .pl-title { font-size: 16px!important; line-height: 1!important;white-space: nowrap!important; text-overflow: ellipsis!important;}
  3632. .pl-content { padding: 0 !important; font-size: 12px!important; }
  3633. .pl-main { max-height: 400px;overflow-y:scroll; }
  3634. .pl-footer {font-size: 12px!important;justify-content: flex-start!important; margin: 10px 0 0!important; padding: 5px 0 0!important; color: #f56c6c!important; }
  3635. .pl-item { display: flex; align-items: center; line-height: 22px; }
  3636. .pl-item-name { flex: 0 0 150px; text-align: left;margin-right: 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor:default; }
  3637. .pl-item-link { flex: 1; overflow: hidden; text-align: left; white-space: nowrap; text-overflow: ellipsis;cursor:pointer }
  3638. .pl-item-btn { background: ${color}; padding: 4px 5px; border-radius: 3px; line-height: 1; cursor: pointer; color: #fff; }
  3639. .pl-item-tip { display: flex; justify-content: space-between;flex: 1; }
  3640. .pl-back { width: 70px; background: #ddd; border-radius: 3px; cursor:pointer; margin:1px 0; }
  3641. .pl-ext { display: inline-block; width: 44px; background: #999; color: #fff; height: 16px; line-height: 16px; font-size: 12px; border-radius: 3px;}
  3642. .pl-retry {padding: 3px 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;}
  3643. .pl-browserdownload { padding: 3px 10px; background: ${color}; color: #fff; border-radius: 3px; cursor: pointer;}
  3644. .pl-item-progress { display:flex;flex: 1;align-items:center}
  3645. .pl-progress { display: inline-block;vertical-align: middle;width: 100%; box-sizing: border-box;line-height: 1;position: relative;height:15px; flex: 1}
  3646. .pl-progress-outer { height: 15px;border-radius: 100px;background-color: #ebeef5;overflow: hidden;position: relative;vertical-align: middle;}
  3647. .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;}
  3648. .pl-progress-inner-text { display: inline-block;vertical-align: middle;color: #d1d1d1;font-size: 12px;margin: 0 5px;height: 15px}
  3649. .pl-progress-tip{ flex:1;text-align:right}
  3650. .pl-progress-how{ flex: 0 0 90px; background: #ddd; border-radius: 3px; margin-left: 10px; cursor: pointer; text-align: center;}
  3651. .pl-progress-stop{ flex: 0 0 50px; padding: 0 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;margin-left:10px;height:20px}
  3652. .pl-progress-inner-text:after { display: inline-block;content: "";height: 100%;vertical-align: middle;}
  3653. .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; }
  3654. .pl-btn-primary:hover { opacity: 0.9;transition: 0.3s opacity; }
  3655. .pl-btn-success { background: #55af28; animation: easeOpacity 1.2s 2; animation-fill-mode:forwards }
  3656. .pl-btn-info { background: #606266; }
  3657. .pl-btn-warning { background: #da9328; }
  3658. .pl-btn-warning { background: #da9328; }
  3659. .pl-btn-danger { background: #cc3235; }
  3660. .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%);}
  3661. .pl-dropdown-menu-item { height: 30px;display: flex;align-items: center;justify-content: center; }
  3662. .pl-dropdown-menu-item:hover { background-color: rgba(132,133,141,0.08);}
  3663. .pl-button .pl-dropdown-menu { display: none; }
  3664. .pl-button:hover .pl-dropdown-menu { display: block!important; }
  3665. .pl-button-init { opacity: 0.5; animation: easeInitOpacity 1.2s 3; animation-fill-mode:forwards }
  3666. @keyframes easeInitOpacity { from { opacity: 0.5; } 50% { opacity: 1 } to { opacity: 0.5; } }
  3667. @keyframes easeOpacity { from { opacity: 1; } 50% { opacity: 0.35 } to { opacity: 1; } }
  3668. .element-clicked { opacity: 0.5; }
  3669. .pl-extra { margin-top: 10px;display:flex}
  3670. .pl-extra button { flex: 1}
  3671. .pointer { cursor:pointer }
  3672. .pl-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 10px; }
  3673. .pl-label { flex: 0 0 100px;text-align:left; }
  3674. .pl-input { flex: 1; padding: 8px 10px; border: 1px solid #c2c2c2; border-radius: 5px; font-size: 14px }
  3675. .pl-color { flex: 1;display: flex;flex-wrap: wrap; margin-right: -10px;}
  3676. .pl-color-box { width: 35px;height: 35px;margin:10px 10px 0 0;; box-sizing: border-box;border:1px solid #fff;cursor:pointer }
  3677. .pl-color-box.checked { border:3px dashed #111!important }
  3678. .pl-close:focus { outline: 0; box-shadow: none; }
  3679. .tag-danger {color:#cc3235;margin: 0 5px;}
  3680. .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;}
  3681. @keyframes load { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }
  3682. .pl-loading-box > div > div { position: absolute;border-radius: 50%;}
  3683. .pl-loading-box > div > div:nth-child(1) { top: 9px;left: 9px;width: 82px;height: 82px;background: #ffffff;}
  3684. .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;}
  3685. .pl-loading { width: 16px;height: 16px;display: inline-block;overflow: hidden;background: none;}
  3686. .pl-loading-box { width: 100%;height: 100%;position: relative;transform: translateZ(0) scale(0.16);backface-visibility: hidden;transform-origin: 0 0;}
  3687. .pl-loading-box div { box-sizing: content-box; }
  3688. .swal2-container { z-index:100000!important; }
  3689. body.swal2-height-auto { height: inherit!important; }
  3690. `;
  3691. this.addStyle('panlinker-style', 'style', css);
  3692. },
  3693. async initDialog() {
  3694. let result = await Swal.fire({
  3695. title: "请支持原创",
  3696. 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>`,
  3697. allowOutsideClick: false,
  3698. showCloseButton: true,
  3699. confirmButtonText: '破解'
  3700. });
  3701. if (result.isDismissed && result.dismiss === 'close') return;
  3702. if (pan.num == pan.num) {
  3703. base.setValue('setting_init_code', pan.num);
  3704. message.success("暗号正确");
  3705. setTimeout(() => {
  3706. history.go(0);
  3707. }, 1500);
  3708. } else {
  3709. await Swal.fire({
  3710. title:"暗号不正确",
  3711. text: "暗号不正确",
  3712. confirmButtonText: '重新输入',
  3713. imageUrl: pan.img,
  3714. });
  3715. await this.initDialog();
  3716. }
  3717. },
  3718. };
  3719. let baidu = {
  3720. _getExtra() {
  3721. let seKey = decodeURIComponent(base.getCookie('BDCLND'));
  3722. return '{' + '"sekey":"' + seKey + '"' + "}";
  3723. },
  3724. _getSurl() {
  3725. let reg = /(?<=s\/|surl=)([a-zA-Z0-9_-]+)/g;
  3726. if (reg.test(location.href)) {
  3727. return location.href.match(reg)[0];
  3728. }
  3729. return '';
  3730. },
  3731. _getFidList() {
  3732. let fidlist = [];
  3733. selectList.forEach(v => {
  3734. if (+v.isdir === 1) return;
  3735. fidlist.push(v.fs_id);
  3736. });
  3737. return '[' + fidlist + ']';
  3738. },
  3739. _resetData() {
  3740. progress = {};
  3741. $.each(request, (key) => {
  3742. (request[key]).abort();
  3743. });
  3744. $.each(ins, (key) => {
  3745. clearInterval(ins[key]);
  3746. });
  3747. idm = {};
  3748. ins = {};
  3749. request = {};
  3750. },
  3751. setBDUSS() {
  3752. try {
  3753. GM_cookie && GM_cookie('list', {name: 'BDUSS'}, (cookies, error) => {
  3754. if (!error) {
  3755. base.setStorage("baiduyunPlugin_BDUSS", {BDUSS: cookies[0].value});
  3756. }
  3757. });
  3758. } catch (e) {
  3759. }
  3760. },
  3761. getBDUSS() {
  3762. let baiduyunPlugin_BDUSS = base.getStorage('baiduyunPlugin_BDUSS') ? base.getStorage('baiduyunPlugin_BDUSS') : '{"baiduyunPlugin_BDUSS":""}';
  3763. return baiduyunPlugin_BDUSS.BDUSS || '';
  3764. },
  3765. convertLinkToAria(link, filename, ua) {
  3766. let BDUSS = this.getBDUSS();
  3767. if (!!BDUSS) {
  3768. filename = filename.replace(' ', '_');
  3769. return encodeURIComponent(`aria2c "${link}" --out "${filename}" --header "User-Agent: ${ua}" --header "Cookie: BDUSS=${BDUSS}"`);
  3770. }
  3771. return {
  3772. link: pan.assistant,
  3773. text: pan.init[5]
  3774. };
  3775. },
  3776. convertLinkToBC(link, filename, ua) {
  3777. let BDUSS = this.getBDUSS();
  3778. if (!!BDUSS) {
  3779. let cookie = `BDUSS=${BDUSS}`;
  3780. let bc = `AA/${encodeURIComponent(filename)}/?url=${encodeURIComponent(link)}&cookie=${encodeURIComponent(cookie)}&user_agent=${encodeURIComponent(ua)}ZZ`;
  3781. return encodeURIComponent(`bc://http/${base.e(bc)}`);
  3782. }
  3783. return {
  3784. link: pan.assistant,
  3785. text: pan.init[5]
  3786. };
  3787. },
  3788. convertLinkToCurl(link, filename, ua) {
  3789. let BDUSS = this.getBDUSS();
  3790. if (!!BDUSS) {
  3791. let terminal = base.getValue('setting_terminal_type');
  3792. filename = filename.replace(' ', '_');
  3793. return encodeURIComponent(`${terminal !== 'wp' ? 'curl' : 'curl.exe'} -L "${link}" --output "${filename}" -A "${ua}" -b "BDUSS=${BDUSS}"`);
  3794. }
  3795. return {
  3796. link: pan.assistant,
  3797. text: pan.init[5]
  3798. };
  3799. },
  3800. addPageListener() {
  3801. function _factory(e) {
  3802. let target = $(e.target);
  3803. let item = target.parents('.pl-item');
  3804. let link = item.find('.pl-item-link');
  3805. let progress = item.find('.pl-item-progress');
  3806. let tip = item.find('.pl-item-tip');
  3807. return {
  3808. item, link, progress, tip, target,
  3809. };
  3810. }
  3811. function _reset(i) {
  3812. ins[i] && clearInterval(ins[i]);
  3813. request[i] && request[i].abort();
  3814. progress[i] = 0;
  3815. idm[i] = false;
  3816. }
  3817. doc.on('mouseenter mouseleave click', '.pl-button.g-dropdown-button', (e) => {
  3818. if (e.type === 'mouseleave') {
  3819. $(e.currentTarget).removeClass('button-open');
  3820. } else {
  3821. $(e.currentTarget).addClass('button-open');
  3822. $(e.currentTarget).find('.pl-dropdown-menu').show();
  3823. }
  3824. });
  3825. doc.on('mouseleave', '.pl-button.g-dropdown-button .pl-dropdown-menu', (e) => {
  3826. $(e.currentTarget).hide();
  3827. });
  3828. doc.on('click', '.pl-button-mode', (e) => {
  3829. mode = e.target.dataset.mode;
  3830. Swal.showLoading();
  3831. this.getPCSLink();
  3832. });
  3833. doc.on('click', '.listener-link-api', async (e) => {
  3834. e.preventDefault();
  3835. let o = _factory(e);
  3836. let $width = o.item.find('.pl-progress-inner');
  3837. let $text = o.item.find('.pl-progress-inner-text');
  3838. let filename = o.link[0].dataset.filename;
  3839. let index = o.link[0].dataset.index;
  3840. _reset(index);
  3841. base.get(o.link[0].dataset.link, {"User-Agent": pan.ua}, 'blob', {filename, index});
  3842. ins[index] = setInterval(() => {
  3843. let prog = +progress[index] || 0;
  3844. let isIDM = idm[index] || false;
  3845. if (isIDM) {
  3846. o.tip.hide();
  3847. o.progress.hide();
  3848. o.link.text('已成功唤起IDM,请查看IDM下载框!').animate({opacity: '0.5'}, "slow").show();
  3849. clearInterval(ins[index]);
  3850. idm[index] = false;
  3851. } else {
  3852. o.link.hide();
  3853. o.tip.hide();
  3854. o.progress.show();
  3855. $width.css('width', prog + '%');
  3856. $text.text(prog + '%');
  3857. if (prog === 100) {
  3858. clearInterval(ins[index]);
  3859. progress[index] = 0;
  3860. o.item.find('.pl-progress-stop').hide();
  3861. o.item.find('.pl-progress-tip').html('下载完成,正在弹出浏览器下载框!');
  3862. }
  3863. }
  3864. }, 500);
  3865. });
  3866. doc.on('click', '.listener-retry', async (e) => {
  3867. let o = _factory(e);
  3868. o.tip.hide();
  3869. o.link.show();
  3870. });
  3871. doc.on('click', '.listener-how', async (e) => {
  3872. let o = _factory(e);
  3873. let index = o.link[0].dataset.index;
  3874. if (request[index]) {
  3875. request[index].abort();
  3876. clearInterval(ins[index]);
  3877. o.progress.hide();
  3878. o.tip.show();
  3879. }
  3880. });
  3881. doc.on('click', '.listener-stop', async (e) => {
  3882. let o = _factory(e);
  3883. let index = o.link[0].dataset.index;
  3884. if (request[index]) {
  3885. request[index].abort();
  3886. clearInterval(ins[index]);
  3887. o.tip.hide();
  3888. o.progress.hide();
  3889. o.link.show(0);
  3890. }
  3891. });
  3892. doc.on('click', '.listener-back', async (e) => {
  3893. let o = _factory(e);
  3894. o.tip.hide();
  3895. o.link.show();
  3896. });
  3897. doc.on('click', '.listener-link-aria, .listener-copy-all', (e) => {
  3898. e.preventDefault();
  3899. if (!e.target.dataset.link) {
  3900. $(e.target).removeClass('listener-copy-all').addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank" class="pl-a">点击此处安装</a>👈`);
  3901. } else {
  3902. base.setClipboard(decodeURIComponent(e.target.dataset.link));
  3903. $(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
  3904. }
  3905. });
  3906. doc.on('click', '.listener-link-rpc', async (e) => {
  3907. let target = $(e.currentTarget);
  3908. target.find('.icon').remove();
  3909. target.find('.pl-loading').remove();
  3910. target.prepend(base.createLoading());
  3911. let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
  3912. if (res === 'success') {
  3913. $('.listener-rpc-task').show();
  3914. target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
  3915. } else if (res === 'assistant') {
  3916. target.addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank" class="pl-a">点击此处安装</a>👈`);
  3917. } else {
  3918. target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
  3919. }
  3920. });
  3921. doc.on('click', '.listener-send-rpc', (e) => {
  3922. $('.listener-link-rpc').click();
  3923. $(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
  3924. });
  3925. doc.on('click', '.listener-open-setting', () => {
  3926. base.showSetting();
  3927. });
  3928. doc.on('click', '.listener-rpc-task', () => {
  3929. let rpc = JSON.stringify({
  3930. domain: base.getValue('setting_rpc_domain'),
  3931. port: base.getValue('setting_rpc_port'),
  3932. }), url = `${pan.d}/?rpc=${base.e(rpc)}#${base.getValue('setting_rpc_token')}`;
  3933. GM_openInTab(url, {active: true});
  3934. });
  3935. document.documentElement.addEventListener('mouseup', (e) => {
  3936. if (e.target.nodeName === 'A' && ~e.target.className.indexOf('pl-a')) {
  3937. e.stopPropagation();
  3938. }
  3939. }, true);
  3940. },
  3941. addButton() {
  3942. if (!pt) return;
  3943. let $toolWrap;
  3944. 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>`);
  3945. if (pt === 'home') $toolWrap = $(pan.btn.home);
  3946. if (pt === 'main') {
  3947. $toolWrap = $(pan.btn.main);
  3948. $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>`);
  3949. }
  3950. if (pt === 'share') $toolWrap = $(pan.btn.share);
  3951. $toolWrap.prepend($button);
  3952. this.setBDUSS();
  3953. this.addPageListener();
  3954. },
  3955. addInitButton() {
  3956. if (!pt) return;
  3957. let $toolWrap;
  3958. 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>`);
  3959. if (pt === 'home') $toolWrap = $(pan.btn.home);
  3960. if (pt === 'main') {
  3961. $toolWrap = $(pan.btn.main);
  3962. $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>`);
  3963. }
  3964. if (pt === 'share') $toolWrap = $(pan.btn.share);
  3965. $toolWrap.prepend($button);
  3966. $button.click(() => base.initDialog());
  3967. },
  3968. async getPCSLink() {
  3969. selectList = this.getSelectedList();
  3970. let fidList = this._getFidList(), url, res;
  3971. if (pt === 'home' || pt === 'main') {
  3972. if (selectList.length === 0) {
  3973. return message.error('提示:请先勾选要下载的文件!');
  3974. }
  3975. if (fidList.length === 2) {
  3976. return message.error('提示:请打开文件夹后勾选文件!');
  3977. }
  3978. fidList = encodeURIComponent(fidList);
  3979. url = `${pan.pcs[0]}&fsids=${fidList}`;
  3980. res = await base.get(url, {"User-Agent": pan.ua});
  3981. }
  3982. if (pt === 'share') {
  3983. this.getShareData();
  3984. if (selectList.length === 0) {
  3985. return message.error('提示:请先勾选要下载的文件!');
  3986. }
  3987. if (fidList.length === 2) {
  3988. return message.error('提示:请打开文件夹后勾选文件!');
  3989. }
  3990. if (!params.sign) {
  3991. let url = `${pan.pcs[2]}&surl=${params.surl}&logid=${params.logid}`;
  3992. let r = await base.get(url);
  3993. if (r.errno === 0) {
  3994. params.sign = r.data.sign;
  3995. params.timestamp = r.data.timestamp;
  3996. } else {
  3997. let dialog = await Swal.fire({
  3998. toast: true,
  3999. icon: 'info',
  4000. title: `提示:请将文件<span class="tag-danger">[保存到网盘]</span>👉前往<span class="tag-danger">[我的网盘]</span>中下载!`,
  4001. showConfirmButton: true,
  4002. confirmButtonText: '点击保存',
  4003. position: 'top',
  4004. });
  4005. if (dialog.isConfirmed) {
  4006. $('.tools-share-save-hb')[0].click();
  4007. }
  4008. return;
  4009. }
  4010. }
  4011. if (!params.bdstoken) {
  4012. return message.error('提示:请先登录(不可用)网盘!');
  4013. }
  4014. let formData = new FormData();
  4015. formData.append('encrypt', params.encrypt);
  4016. formData.append('product', params.product);
  4017. formData.append('uk', params.uk);
  4018. formData.append('primaryid', params.primaryid);
  4019. formData.append('fid_list', fidList);
  4020. formData.append('logid', params.logid);
  4021. params.shareType === 'secret' ? formData.append('extra', params.extra) : '';
  4022. url = `${pan.pcs[1]}&sign=${params.sign}&timestamp=${params.timestamp}`;
  4023. res = await base.post(url, formData, {"User-Agent": pan.ua});
  4024. }
  4025. if (res.errno === 0) {
  4026. let html = this.generateDom(res.list);
  4027. this.showMainDialog(pan[mode][0], html, pan[mode][1]);
  4028. } else if (res.errno === 112) {
  4029. return message.error('提示:页面过期,请刷新重试!');
  4030. } else {
  4031. message.error('提示:获取下载链接失败!请刷新网页后重试!');
  4032. }
  4033. },
  4034. generateDom(list) {
  4035. let content = '<div class="pl-main">';
  4036. let alinkAllText = '';
  4037. base.sortByName(list);
  4038. list.forEach((v, i) => {
  4039. if (v.isdir === 1) return;
  4040. let filename = v.server_filename || v.filename;
  4041. let ext = base.getExtension(filename);
  4042. let size = base.sizeFormat(v.size);
  4043. let dlink = v.dlink;
  4044. if (mode === 'api') {
  4045. content += `<div class="pl-item">
  4046. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4047. <a class="pl-item-link pl-a listener-link-api" href="${dlink}" data-filename="${filename}" data-link="${dlink}" data-index="${i}">${dlink}</a>
  4048. <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>
  4049. <div class="pl-item-progress" style="display: none">
  4050. <div class="pl-progress">
  4051. <div class="pl-progress-outer"></div>
  4052. <div class="pl-progress-inner" style="width:5%">
  4053. <div class="pl-progress-inner-text">0%</div>
  4054. </div>
  4055. </div>
  4056. <span class="pl-progress-stop listener-stop">取消下载</span>
  4057. <span class="pl-progress-tip">未发现IDM,使用自带浏览器下载</span>
  4058. <span class="pl-progress-how listener-how">如何唤起IDM?</span>
  4059. </div></div>`;
  4060. }
  4061. if (mode === 'aria') {
  4062. let alink = this.convertLinkToAria(dlink, filename, pan.ua);
  4063. if (typeof (alink) === 'object') {
  4064. content += `<div class="pl-item">
  4065. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4066. <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>`;
  4067. } else {
  4068. alinkAllText += alink + '\r\n';
  4069. content += `<div class="pl-item">
  4070. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4071. <a class="pl-item-link pl-a listener-link-aria" href="${alink}" title="点击复制aria2c链接" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  4072. }
  4073. }
  4074. if (mode === 'rpc') {
  4075. content += `<div class="pl-item">
  4076. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4077. <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>`;
  4078. }
  4079. if (mode === 'curl') {
  4080. let alink = this.convertLinkToCurl(dlink, filename, pan.ua);
  4081. if (typeof (alink) === 'object') {
  4082. content += `<div class="pl-item">
  4083. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4084. <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>`;
  4085. } else {
  4086. alinkAllText += alink + '\r\n';
  4087. content += `<div class="pl-item">
  4088. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4089. <a class="pl-item-link pl-a listener-link-aria" href="${alink}" title="点击复制curl链接" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  4090. }
  4091. }
  4092. if (mode === 'bc') {
  4093. let alink = this.convertLinkToBC(dlink, filename, pan.ua);
  4094. if (typeof (alink) === 'object') {
  4095. content += `<div class="pl-item">
  4096. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4097. <a class="pl-item-link pl-a" href="${decodeURIComponent(alink.link)}" title="点击用比特彗星下载" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink.text)}</a> </div>`;
  4098. } else {
  4099. alinkAllText += alink + '\r\n';
  4100. content += `<div class="pl-item">
  4101. <div class="pl-item-name listener-tip" data-size="${size}">${filename}</div>
  4102. <a class="pl-item-link pl-a" href="${decodeURIComponent(alink)}" title="点击用比特彗星下载" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  4103. }
  4104. }
  4105. });
  4106. content += '</div>';
  4107. if (mode === 'aria')
  4108. content += `<div class="pl-extra"><button class="pl-btn-primary listener-copy-all" data-link="${alinkAllText}">复制全部链接</button></div>`;
  4109. if (mode === 'rpc') {
  4110. let rpc = base.getValue('setting_rpc_domain') + ':' + base.getValue('setting_rpc_port') + base.getValue('setting_rpc_path');
  4111. 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>`;
  4112. }
  4113. if (mode === 'curl')
  4114. 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>`;
  4115. return content;
  4116. },
  4117. async sendLinkToRPC(filename, link) {
  4118. let rpc = {
  4119. domain: base.getValue('setting_rpc_domain'),
  4120. port: base.getValue('setting_rpc_port'),
  4121. path: base.getValue('setting_rpc_path'),
  4122. token: base.getValue('setting_rpc_token'),
  4123. dir: base.getValue('setting_rpc_dir'),
  4124. };
  4125. let BDUSS = this.getBDUSS();
  4126. if (!BDUSS) return 'assistant';
  4127. let url = `${rpc.domain}:${rpc.port}${rpc.path}`;
  4128. let rpcData = {
  4129. id: new Date().getTime(),
  4130. jsonrpc: '2.0',
  4131. method: 'aria2.addUri',
  4132. params: [`token:${rpc.token}`, [link], {
  4133. dir: rpc.dir,
  4134. out: filename,
  4135. header: [`User-Agent: ${pan.ua}`, `Cookie: BDUSS=${BDUSS}`]
  4136. }]
  4137. };
  4138. try {
  4139. let res = await base.post(url, rpcData, {"User-Agent": pan.ua}, '');
  4140. if (res.result) return 'success';
  4141. return 'fail';
  4142. } catch (e) {
  4143. return 'fail';
  4144. }
  4145. },
  4146. getSelectedList() {
  4147. try {
  4148. return require('system-core:context/context.js').instanceForSystem.list.getSelected();
  4149. } catch (e) {
  4150. return document.querySelector('.wp-s-core-pan').__vue__.selectedList;
  4151. }
  4152. },
  4153. getLogid() {
  4154. let ut = require("system-core:context/context.js").instanceForSystem.tools.baseService;
  4155. return ut.base64Encode(base.getCookie("BAIDUID"));
  4156. },
  4157. getShareData() {
  4158. let res = locals.dump();
  4159. params.shareType = 'secret';
  4160. params.sign = '';
  4161. params.timestamp = '';
  4162. params.bdstoken = res.bdstoken.value;
  4163. params.channel = 'chunlei';
  4164. params.clienttype = 0;
  4165. params.web = 1;
  4166. params.app_id = 250528;
  4167. params.encrypt = 0;
  4168. params.product = 'share';
  4169. params.logid = this.getLogid();
  4170. params.primaryid = res.shareid.value;
  4171. params.uk = res.share_uk.value;
  4172. params.shareType === 'secret' && (params.extra = this._getExtra());
  4173. params.surl = this._getSurl();
  4174. },
  4175. detectPage() {
  4176. let path = location.pathname;
  4177. if (/^\/disk\/home/.test(path)) return 'home';
  4178. if (/^\/disk\/main/.test(path)) return 'main';
  4179. if (/^\/(s|share)\//.test(path)) return 'share';
  4180. return '';
  4181. return '';
  4182. },
  4183. showMainDialog(title, html, footer) {
  4184. Swal.fire({
  4185. title,
  4186. html,
  4187. footer,
  4188. allowOutsideClick: false,
  4189. showCloseButton: true,
  4190. showConfirmButton: false,
  4191. position: 'top',
  4192. width,
  4193. padding: '15px 20px 5px',
  4194. customClass,
  4195. }).then(() => {
  4196. this._resetData();
  4197. });
  4198. },
  4199. async initPanLinker() {
  4200. base.initDefaultConfig();
  4201. base.addPanLinkerStyle();
  4202. pt = this.detectPage();
  4203. let res = await base.post
  4204. (`https://api.youxiaohou.com/config?ver=${version}&a=${author}`, {}, {}, 'text');
  4205. pan = JSON.parse(base.d(res));
  4206. Object.freeze && Object.freeze(pan);
  4207. console.log(pan);
  4208. pan.num === base.getValue('setting_init_code') ? this.addButton() : this.addInitButton();
  4209. base.createTip();
  4210. base.registerMenuCommand();
  4211. }
  4212. };
  4213. let main = {
  4214. init() {
  4215. if (/(pan|yun).baidu.com/.test(location.host)) {
  4216. baidu.initPanLinker();
  4217. }
  4218. }
  4219. };
  4220. main.init();
  4221. }
  4222. }
  4223. })();

QingJ © 2025

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