海阔视频解析

自用多功能脚本工具箱

目前为 2022-10-27 提交的版本。查看 最新版本

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

QingJ © 2025

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