极乐禁地

🔥不限次看站内所有付费视频,下载视频(日限),复制播放链接,屏蔽广告

  1. // ==UserScript==
  2. // @name 极乐禁地
  3. // @version 1.0.3
  4. // @description 🔥不限次看站内所有付费视频,下载视频(日限),复制播放链接,屏蔽广告
  5. // @icon https://cdn.luckychajian.com/image/boy.jpeg
  6. // @namespace 极乐禁地
  7. // @author lucky
  8. // @include */pages/hjsq*
  9. // @include *://h5d*.*.*/*
  10. // @include *://*.h5d*.*.*/*
  11. // @include *://aaw*.*.*/*
  12. // @include *://*.aaw*.*.*/*
  13. // @include *://d1r*.cl*.*/*
  14. // @include *://*.d1r*.cl*.*/*
  15. // @include *://blog.luckly-mjw.cn/*
  16. // @include *://tools.thatwind.com/*
  17. // @include *://tools.bugscaner.com/*
  18. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
  19. // @require https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.5.8/hls.min.js
  20. // @require https://cdnjs.cloudflare.com/ajax/libs/dplayer/1.27.1/DPlayer.min.js
  21. // @run-at document-start
  22. // @grant unsafeWindow
  23. // @grant GM_addStyle
  24. // @grant GM_getValue
  25. // @grant GM_setValue
  26. // @grant GM_getResourceText
  27. // @grant GM_xmlhttpRequest
  28. // @charset UTF-8
  29. // @antifeature payment
  30. // @license MIT
  31. // ==/UserScript==
  32.  
  33. function init($){
  34. 'use strict';
  35. if(unsafeWindow.wt_tangxin_script){
  36. return;
  37. }
  38. unsafeWindow.wt_tangxin_script = true;
  39.  
  40. if (location.href.includes('tools.bugscaner.com')) {
  41. util.findTargetElement('.input-group input').then(res => {
  42. const url = location.search.replace('?m3u8=', '').replace(/\s*/g, "")
  43. if (url && url.startsWith('http')) {
  44. $(res).val(url)
  45. }
  46. })
  47. return
  48. }
  49. if (location.href.includes('tools.thatwind.com')) {
  50. GM_addStyle(`.top-ad{display: none !important;}`)
  51. util.findTargetElement('.bx--text-input__field-outer-wrapper input', 10).then(res => {
  52. $(res).val(Date.now())
  53. res.dispatchEvent(new Event("input"))
  54. })
  55. return
  56. }
  57. if (location.href.includes('blog.luckly-mjw.cn')) {
  58. GM_addStyle(`
  59. #m-app a,.m-p-temp-url,.m-p-cross,.m-p-input-container div:nth-of-type(1){display: none !important;}
  60. .m-p-input-container{ display: block;}
  61. .m-p-input-container input{ width: 100%;font-size: 12px;margin-bottom: 5px;}
  62. .m-p-input-container div{ height: 45px;line-height: 45px;font-size: 15px;margin-top: 3px;}
  63. .m-p-stream{line-height: normal;font-size: 12px;}
  64. `)
  65. return
  66. }
  67. if(location.href.replace(location.origin,'') != '/home' && !location.href.includes('/pages/hjsq')) {
  68. setTimeout(()=>{
  69. location.href = location.origin + '/home';
  70. },1000)
  71. }
  72. const loadScript = function(url) {
  73. const script = document.createElement('script');
  74. script.type = 'text/javascript';
  75. script.src = url;
  76. document.head.appendChild(script);
  77. }
  78. if(typeof Hls === "undefined"){
  79. loadScript('https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.5.8/hls.min.js')
  80. }
  81.  
  82. const checkLogin = function(){
  83. try{
  84. if (superVip._CONFIG_.user.login_date != new Date().setHours(0, 0, 0,0) || md5x(superVip._CONFIG_.user.ver, 'de').code != md5x(md5x(), 'de').code) {
  85. superVip._CONFIG_.user = ''
  86. GM_setValue('jsxl_user', '')
  87. util.logouted('登录(不可用)已失效,请重新登录(不可用)')
  88. $("#wt-my").click()
  89. return false
  90. }
  91. return true
  92. }catch(e){
  93. superVip._CONFIG_.user = ''
  94. GM_setValue('jsxl_user', '')
  95. util.logouted(e.message || '登录(不可用)已失效,请重新登录(不可用)')
  96. $("#wt-my").click()
  97. return false
  98. }
  99. }
  100.  
  101. const initPlayerUrl = async function(url, originalFetch, options){
  102. if (superVip._CONFIG_.user && superVip._CONFIG_.user.token) {
  103. if(url.endsWith('/media/play') || url.endsWith('/onepost/detail')){
  104. if(!checkLogin()){
  105. return;
  106. }
  107. if(url.endsWith('/media/play') || url.endsWith('/onepost/detail')){
  108. let videoContainer =''
  109. util.showAndHidTips('wt_player_haijiao', 'set', false);
  110. superVip._CONFIG_.videoUrl = {}
  111. util.findTargetElement('.md-video-play').then(res =>{
  112. $(res).empty()
  113. videoContainer = res
  114. })
  115. const response = await originalFetch(url, options);
  116. if (response.ok && response.headers.get('Content-Type')?.includes('application/json')) {
  117. const clonedResponse = response.clone();
  118. const res = await clonedResponse.json();
  119. if(res.code == 200 && res.msg == 'success'){
  120. util.asyncHttp(superVip._CONFIG_.apiBaseUrl + '/s' + (Math.floor(Math.random() * 3) + 1) + '00/checkJilejinqu?sign=' + encodeURIComponent(res.data) + '&timestamp=' + ec.knxkbxen(Date.now()) + '&origin=' + location.origin + '&version=' + superVip._CONFIG_.version).then(async res =>{
  121. if(res.errMsg == "success" && res.responseText){
  122. res = JSON.parse(res.responseText)
  123. if(res.errCode == 0){
  124. if(res.newToken){
  125. if(res.newToken) superVip._CONFIG_.user.token = res.newToken;
  126. GM_setValue('jsxl_user', superVip._CONFIG_.user)
  127. }
  128. res.data = ec.cskuecede(res.data)
  129. superVip._CONFIG_.videoUrl = {
  130. aes: 'true',
  131. playerUrl: res.data,
  132. downloadUrl: res.downloadUrl,
  133. isDecrypDownload: true
  134. }
  135. util.showAndHidTips('wt_player_haijiao');
  136. var videos = document.querySelectorAll('video');
  137. videos.forEach(function(video) {
  138. video.volume = 0.0
  139. video.pause();
  140. });
  141. if(videoContainer){
  142. $(videoContainer).empty()
  143. const dp = new DPlayer({
  144. container: videoContainer,
  145. autoplay: true,
  146. theme: '#f699b8',
  147. loop: true,
  148. lang: 'zh-cn',
  149. screenshot: true,
  150. hotkey: true,
  151. preload: 'auto',
  152. video: {
  153. url: res.data
  154. }
  155. });
  156. }else{
  157. util.findTargetElement('.md-video-play').then(ele =>{
  158. $(ele).empty()
  159. const dp = new DPlayer({
  160. container: ele,
  161. autoplay: true,
  162. theme: '#f699b8',
  163. loop: true,
  164. lang: 'zh-cn',
  165. screenshot: true,
  166. hotkey: true,
  167. preload: 'auto',
  168. video: {
  169. url: res.data
  170. }
  171. });
  172. })
  173. }
  174. }else{
  175. if(!res.errMsg.includes('抱歉,此帖子无视频')){
  176. util.showTips({ title: res.errMsg})
  177. }
  178. }
  179. }
  180. })
  181. }
  182. }
  183. return response;
  184. }
  185. }
  186. }
  187. return originalFetch(url, options);
  188. }
  189.  
  190. const md5x = function(s, type) {
  191. try {
  192. if (!type) {
  193. const date = new Date().setHours(0, 0, 0, 0) + '';
  194. const day = new Date().getDate();
  195. const code = date.substring(4, 8) * new Date().getDate() + '';
  196. return ec.swaqbt(JSON.stringify({
  197. date: date,
  198. code: code,
  199. day: day
  200. }));
  201. } else {
  202. if(type == 'decode'){
  203. s = ec.cskuecede(s)
  204. }
  205. const token = JSON.parse(ec.sfweccat(s));
  206. if ((new Date(Number(token.date)).getTime() + 86400000) < Date.now()) {
  207. throw Error('md5x expire');
  208. }
  209. if (token.day != new Date(Number(token.date)).getDate()) {
  210. throw Error('md5x err');
  211. }
  212. const code = (new Date(Number(token.date)).setHours(0, 0, 0, 0) + '').substring(4, 8) * token.day;
  213. if (code != token.code) {
  214. throw Error('md5x err2');
  215. }
  216. return token;
  217. }
  218. } catch (e) {
  219. return '';
  220. }
  221. }
  222.  
  223. const serializeVideo = (str) => {
  224. if (!str) {
  225. return '';
  226. }
  227. try {
  228. const item = ec.cskuecede(str);
  229. if (typeof(item) != 'object') {
  230. return '';
  231. }
  232. let duration = '1.250000';
  233. const countNum = item.str_end.split('-')[1] - item.str_end.split('-')[0];
  234. try {
  235. if (item.duration) {
  236. duration = (item.duration / (countNum + 1)).toFixed(3);
  237. }
  238. } catch (e) {}
  239. let m3u8Content = '#EXTM3U' + '\r\n';
  240. m3u8Content += '#EXT-X-VERSION:3' + '\r\n';
  241. m3u8Content += '#EXT-X-TARGETDURATION:30' + '\r\n';
  242. m3u8Content += '#EXT-X-MEDIA-SEQUENCE:0' + '\r\n';
  243. m3u8Content += '#EXT-X-KEY:METHOD=AES-128,URI="' + item.keyUrl + '"' + '\r\n';
  244. for (let i = Number(item.str_end.split('-')[0]); i <= countNum; i++) {
  245. m3u8Content += '#EXTINF:' + duration + ',' + '\r\n';
  246. m3u8Content += item.start_url + i + '.ts' + '\r\n';
  247. }
  248. m3u8Content += '#EXT-X-ENDLIST';
  249. const file = new Blob([m3u8Content], {
  250. type: 'text/plain'
  251. })
  252. return URL.createObjectURL(file);
  253. } catch (e) {
  254. console.log(e)
  255. return ''
  256. }
  257. }
  258. const asyncXmlhttpRequest = function (url, method, params = {}){
  259. return new Promise((res, rej) =>{
  260. const request = {
  261. method: method,
  262. url: url,
  263. onload: function(response) {
  264. if(response.responseText){
  265. let result = ''
  266. try{
  267. result = JSON.parse(response.responseText)
  268. }catch(e){
  269. result = response.responseText
  270. }
  271. res(result)
  272. }else{
  273. rej('请求失败_null')
  274. }
  275. },
  276. onerror: function(e){
  277. rej('请求失败_err')
  278. },
  279. ontimeout: function(e){
  280. rej('请求超时')
  281. }
  282. }
  283. if(params.data) request.data = params.data;
  284. if(params.headers) request.headers = params.headers;
  285. GM_xmlhttpRequest(request);
  286. })
  287. }
  288.  
  289. const ec = {
  290. b64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  291. b64re: /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,
  292. swaqbt: (string, flag = true) => {
  293. string = String(string);
  294. var bitmap, a, b, c, result = "",
  295. i = 0,
  296. rest = string.length % 3;
  297. for (; i < string.length;) {
  298. if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string
  299. .charCodeAt(i++)) > 255) {
  300. return "Failed to execute swaqbt"
  301. }
  302. bitmap = (a << 16) | (b << 8) | c;
  303. result += ec.b64.charAt(bitmap >> 18 & 63) + ec.b64.charAt(bitmap >> 12 & 63) +
  304. ec.b64.charAt(bitmap >> 6 & 63) + ec.b64.charAt(bitmap & 63);
  305. }
  306. if (flag) return ec.swaqbt(rest ? result.slice(0, rest - 3) + "===".substring(rest) : result,
  307. false)
  308. else return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
  309. },
  310.  
  311. sfweccat: (string, flag = true) => {
  312. string = String(string).replace(/[\t\n\f\r ]+/g, "");
  313. if (!ec.b64re.test(string)) {
  314. return 'Failed to execute sfweccat'
  315. }
  316. string += "==".slice(2 - (string.length & 3));
  317. var bitmap, result = "",
  318. r1, r2, i = 0;
  319. for (; i < string.length;) {
  320. bitmap = ec.b64.indexOf(string.charAt(i++)) << 18 | ec.b64.indexOf(string.charAt(i++)) <<
  321. 12 |
  322. (r1 = ec.b64.indexOf(string.charAt(i++))) << 6 | (r2 = ec.b64.indexOf(string.charAt(
  323. i++)));
  324. result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) :
  325. r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) :
  326. String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
  327. }
  328. if (flag) return ec.sfweccat(result, false)
  329. else return result
  330. },
  331.  
  332. knxkbxen: (s) => {
  333. s = ec.swaqbt(encodeURIComponent(JSON.stringify(s)), false);
  334. const n = Math.round(Math.random() * (s.length > 11 ? 8 : 1) + 1);
  335. const l = s.split('');
  336. const f = l.filter(i => {
  337. i == '=';
  338. })
  339. for (let i = 0; i < l.length; i++) {
  340. if (i == n) l[i] = l[i] + 'JS';
  341. if (l[i] == '=') l[i] = '';
  342. }
  343. return ec.b64[Math.floor(Math.random() * 62)] + (l.join('') + n) + f.length;
  344. },
  345.  
  346. cskuecede: (s) => {
  347. if (s.startsWith('JSXL')) s = s.replace('JSXL', '');
  348. s = s.substring(ec.sfweccat('TVE9PQ=='));
  349. const n = s.substring(s.length - 2, s.length - 1);
  350. const d = s.substring(s.length - 1);
  351. const l = s.substring(0, s.length - 2).split('');
  352. for (let i = 0; i < l.length; i++) {
  353. if (i == (Number(n) + 1)) {
  354. l[i] = '';
  355. l[i + 1] = '';
  356. break;
  357. }
  358. }
  359. for (let i = 0; i < Number(d); i++) {
  360. l.plus('=')
  361. }
  362. return JSON.parse(decodeURIComponent((ec.sfweccat(l.join(''), false))))
  363. }
  364. }
  365.  
  366. var obj = Object.create(null),t = Date.now();
  367. Object.defineProperty(obj, "a", {
  368. get: function() {
  369. if (Date.now() - t > 100) {
  370. const textArea = document.createElement('textarea');
  371. while (true) {
  372. try {
  373. document.body.appendChild(textArea);
  374. document.body.appendChild(textArea);
  375. localStorage.setItem(Math.random() * 2,Math.random() * 2);
  376. sessionStorage.setItem(Math.random() * 2,Math.random() * 2);
  377. } catch (e) {}
  378. }
  379. }
  380. }
  381. })
  382. setInterval(function() {
  383. console.clear();
  384. t = Date.now();
  385. (function() {})["constructor"]("debugger")();
  386. console.log(obj.a);
  387. }, 1000)
  388.  
  389. const util = {
  390. initAppDate: (haveBox = true)=>{
  391. let roles = '';
  392. if(superVip._CONFIG_.user && superVip._CONFIG_.user.roles){
  393. if(superVip._CONFIG_.user.roles.length > 0 && superVip._CONFIG_.user.roles[0].e){
  394. superVip._CONFIG_.user.roles.sort((a,b) =>{
  395. return a.e < b.e? 1: -1
  396. })
  397. }
  398. superVip._CONFIG_.user.roles.forEach(item => {
  399. if(item.e){
  400. if(item.e > 2047980427789){
  401. item.vip_day = '永久'
  402. }else{
  403. const time = item.e - Date.now()
  404. if(time < 86400000 && time > 0){
  405. if(time > 3600000){
  406. item.vip_day = parseInt(time / 3600000) + '小时'
  407. }else{
  408. item.vip_day = parseInt(time / 60000) + '分钟'
  409. }
  410. }else if(time <= 0){
  411. item.vip_day = '已过期'
  412. item.expire = true
  413. }else{
  414. item.vip_day = parseInt(time / 86400000) + '天'
  415. const d = time % 86400000
  416. if(d > 3600000){
  417. item.vip_day += parseInt(d / 3600000) + '小时'
  418. }
  419. }
  420. }
  421. }
  422. roles += `
  423. <div class="info-box ${item.expire?'expire':''}" data-l="${item.l}">
  424. <div class="avatar-box">
  425. <img class="avatar" src="${superVip._CONFIG_.cdnBaseUrl + '/image/boy.jpeg'}"/>
  426. </div>
  427. <div class="desc">
  428. <div style="font-size: 11px;">${item.n}</div>
  429. </div>
  430. <div class="vip-day">
  431. <div style="font-size: 10px;"></div>
  432. <div style="font-size: 10px;"></div>
  433. </div>
  434. </div>
  435. `;
  436. })
  437. if(haveBox){
  438. $('#wt-set-box .user-box-container .user-box .apps-container').empty()
  439. $('#wt-set-box .user-box-container .user-box .apps-container').append(roles)
  440. }
  441. $('#wt-set-box .user-box-container .user-box .info-box').on('click', function(e) {
  442. const l = e.currentTarget.attributes['data-l']?.value
  443. if(l && l.startsWith('http')){
  444. window.location.href = l
  445. }
  446. })
  447. }
  448. return haveBox? '': roles
  449. },
  450. copyText: (text) => {
  451. if (navigator.clipboard && window.isSecureContext) {
  452. return navigator.clipboard.writeText(text);
  453. } else if (document.execCommand) {
  454. const textArea = document.createElement('textarea');
  455. textArea.style.position = 'fixed';
  456. textArea.style.top = textArea.style.left = '-100vh';
  457. textArea.style.opacity = '0';
  458. textArea.value = text;
  459. document.body.appendChild(textArea);
  460. textArea.focus();
  461. textArea.select();
  462. try {
  463. const success = document.execCommand('copy');
  464. return success ? Promise.resolve() : Promise.reject();
  465. } catch (err) {
  466. return Promise.reject(err);
  467. } finally {
  468. textArea.remove();
  469. }
  470. } else {
  471. return Promise.reject(new Error('Clipboard API not supported and execCommand not available.'));
  472. }
  473. },
  474.  
  475. logined: () => {
  476. $("#wt-my img").addClass('margin-left')
  477. $('#wt-my img').attr('src', superVip._CONFIG_.user.avatar)
  478. $('#wt-set-box .user-box-container .user-info').css('display', 'flex')
  479. $('#wt-set-box .user-box-container .user-info img').attr('src', superVip._CONFIG_.user.avatar)
  480. $('#wt-set-box .user-box-container .user-info .nickname').html(superVip._CONFIG_.user.nickname)
  481. $('#wt-set-box .user-box-container .user-info .username').html(superVip._CONFIG_.user.username)
  482. },
  483.  
  484. logouted: (msg) => {
  485. superVip._CONFIG_.user = '';
  486. $("#wt-my img").removeClass('margin-left')
  487. $('#wt-my img').attr('src',superVip._CONFIG_.cdnBaseUrl + '/image/app.png')
  488. $('#wt-set-box .user-box-container .user-info').css('display', 'none')
  489. GM_setValue('jsxl_user', '')
  490. if(msg){
  491. util.showTips({
  492. title: '请重新登录(不可用),errMsg:' + msg
  493. })
  494. }
  495. },
  496.  
  497. showAndHidTips: (name, op = 'set', val = true) => {
  498. let tips = GM_getValue('wt_tips', {})
  499. if (!tips) tips = {}
  500. if (op == 'set') {
  501. tips[name] = val
  502. GM_setValue('wt_tips', tips)
  503. if (val) $('.' + name).addClass('tips-yuan')
  504. else $('.' + name).removeClass('tips-yuan')
  505. return true
  506. } else {
  507. return tips[name] ? true : false
  508. }
  509. },
  510.  
  511. addLogin: () => {
  512. if ($('#wt-login-box').length > 0) {
  513. $("#wt-login-box input").val('');
  514. return;
  515. }
  516. $('body').append(`
  517. <div id="wt-login-mask"></div>
  518. <div id="wt-login-box">
  519. <div class="logo">
  520. <p>@${superVip._CONFIG_.homeUrl}</p>
  521. <p>v ${superVip._CONFIG_.version}</p>
  522. </div>
  523. <div class="close"></div>
  524. <div class="title">账号登录(不可用)</div>
  525. <div class="input-box">
  526. <input type="text" placeholder="请输入账号" maxLength="15"/>
  527. </div>
  528. <div class="input-box" style="margin-top:10px;">
  529. <input type="text" placeholder="请输入密码" maxLength="15"/>
  530. </div>
  531. <div class="j-login-btn">
  532. <button >登录(不可用)</button>
  533. </div>
  534. <div class="to-index" style="display: flex;justify-content: space-between;color: #00bcd4; height: 40px;line-height: 40px;font-size: 11px;font-weight: 500;">
  535. <div class="wt-register">注册(不可用)账号</div>
  536. <div class="wt-index">去发电获取权限?</div>
  537. </div>
  538. </div>
  539. `)
  540. GM_addStyle(`
  541. #wt-login-mask{ display: none;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 11000;background-color: #0000004d;}
  542. #wt-login-box{position: fixed;margin-top: 3%;top: 50%;left: 50%;transform: translate(-50%,-50%) scale(0);overflow: hidden;background-color: white;padding: 30px;padding-bottom: 0;border-radius: 10px;z-index: 11010;}
  543. #wt-login-box::before{display:none; content:'';position: absolute;width: 250px;height: 250px;border-radius: 200px;background-color: #00bcd4;z-index: -1;opacity: 0.7;bottom: 110px;right: 100px;}
  544. #wt-login-box::after{display:none;content:'';position: absolute;width: 250px;height: 250px;border-radius: 200px;background-color: #2196F3;z-index: -1;opacity: 0.7;top: 115px;right: -112px;}
  545. #wt-login-box .close{position: absolute;right: 0px;top: 0px;width: 40px;height: 40px;}
  546. #wt-login-box .close::before,#wt-login-box .close::after{position: absolute;left: 50%;top: 50%;content: '';width: 16px;height: 2px;border-radius: 1px;background-color: #222;transform: translate(-50%,-50%) rotate(45deg);}
  547. #wt-login-box .close::after,#wt-set-box .close::after{transform: translate(-50%,-50%) rotate(-45deg);}
  548. #wt-login-box .title{font-weight: 600;font-size: 16px;color: #3a3a3a;text-align: center;margin-bottom: 20px;}
  549. #wt-login-box .input-box{display: flex;background-color: #f5f5f5;width: 160px;height: 35px;border-radius: 30px;overflow: hidden;font-size: 12px;}
  550. #wt-login-box .input-box input{width: 100%;height: 100%;padding-left: 15px;box-sizing: border-box;outline: none;border: none;background-color: #f5f5f5;font-size: 11px;color: black;letter-spacing: 1px;}
  551. #wt-login-box input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none !important; }
  552. #wt-login-box .j-login-btn{width: 100px;padding: 2px;height: 40px;font-size: 12px;margin: 15px auto;}
  553. #wt-login-box .j-login-btn button{width: 100%;height: 100%;border-radius: 30px;border: none;color: white;transition: all 0.3s ease;background-color: #00bcd4;}
  554. #wt-login-box .logo{position: absolute;top: 5%;left: 1%; color: #dbdbdb; font-size: 11px;transform: rotate(-15deg);text-align: center;z-index: -10;}
  555. `)
  556. $("#wt-login-mask").on("click", () => {
  557. $('#wt-login-mask').css('display', 'none')
  558. $("#wt-login-box").removeClass('show-set-box')
  559. $("#wt-login-box").addClass('hid-set-box')
  560. })
  561. $("#wt-login-box .close").on("click", () => {
  562. $('#wt-login-mask').css('display', 'none')
  563. $("#wt-login-box").removeClass('show-set-box')
  564. $("#wt-login-box").addClass('hid-set-box')
  565. })
  566. $("#wt-login-box .to-index .wt-register").on("click", () => {
  567. window.open(superVip._CONFIG_.homeUrl + '/#/pages/login/login')
  568. })
  569. $("#wt-login-box .to-index .wt-index").on("click", () => {
  570. window.open(superVip._CONFIG_.homeUrl +'/#/')
  571. })
  572. $("#wt-login-box .j-login-btn button").on("click", async () => {
  573. try{
  574. $('#wt-loading-box').css('display', 'block')
  575. await util.sleep(300);
  576. $("#wt-login-box .j-login-btn button").addClass('btn-anima')
  577. setTimeout(() => {
  578. $("#wt-login-box .j-login-btn button").removeClass('btn-anima')
  579. }, 500)
  580. const username = $("#wt-login-box input")[0].value;
  581. let pwd = $("#wt-login-box input")[1].value;
  582. if(!username || username.length < 5 || username.length > 15 || !/^[A-Za-z0-9]+$/.test(username)){
  583. setTimeout(() => {
  584. $('#wt-loading-box').css('display', 'none')
  585. util.showTips({
  586. title: '账号错误,请使用' + superVip._CONFIG_.homeUrl + '网站注册(不可用)的账号密码登入插件</br>' + superVip._CONFIG_.guide
  587. })
  588. }, 2000)
  589. return
  590. }
  591. if(!pwd || pwd.length < 5 || pwd.length > 15){
  592. setTimeout(() => {
  593. $('#wt-loading-box').css('display', 'none')
  594. util.showTips({
  595. title: '密码错误,请使用' + superVip._CONFIG_.homeUrl + '网站注册(不可用)的账号密码登入插件</br>' + superVip._CONFIG_.guide
  596. })
  597. }, 2000)
  598. return
  599. }
  600. $.ajax({
  601. url: superVip._CONFIG_.apiBaseUrl + '/l' + (Math.floor(Math.random() * 2) + 1) + '00/ls',
  602. method: "POST",
  603. timeout: 12000,
  604. data: {
  605. username: username,
  606. password: pwd,
  607. ap: 'NGtKrSiVFNCVCOSU5MEolRTUlOUMlQjAYKprE',
  608. version: superVip._CONFIG_.version
  609. },
  610. dataType: 'json',
  611. success: function(response) {
  612. if (response.errCode != 0) {
  613. $('#wt-loading-box').css('display', 'none');
  614. util.showTips({
  615. title: response.errMsg + ',' + superVip._CONFIG_.guide
  616. })
  617. } else {
  618. response.data = ec.cskuecede(response.data)
  619. const res = {
  620. avatar: response.data.user.avatar,
  621. username: response.data.user.username,
  622. nickname: response.data.user.nickname,
  623. login_date: new Date().setHours(0,0,0,0),
  624. token: response.data.token,
  625. role: response.data.user.current_role,
  626. roles: response.data.user.roles,
  627. downloadTips: response.data.utilObj.downloadTips,
  628. d: response.d
  629. }
  630. superVip._CONFIG_.user = res
  631. superVip._CONFIG_.user.ver = md5x(superVip)
  632. util.logined()
  633. GM_setValue('jsxl_user', res)
  634. GM_setValue('jsxl_login_code', JSON.stringify({u: username, p: pwd}))
  635. if(response.data?.utilObj?.notify){
  636. const historyNotify = GM_getValue('notify')
  637. if (!historyNotify || historyNotify != response.data.utilObj.notify) {
  638. GM_setValue('notifyShow', true);
  639. util.showAndHidTips('wt_my_notify')
  640. GM_setValue('notify', response.data.utilObj.notify)
  641. }
  642. }
  643. $('#wt-loading-box').css('display', 'none')
  644. $('#wt-login-mask').css('display','none')
  645. $("#wt-login-box").removeClass('show-set-box')
  646. $("#wt-login-box").addClass('hid-set-box')
  647. util.showTips({
  648. title: response.errMsg,
  649. success: (e) => {
  650. window.location.reload()
  651. }
  652. })
  653. }
  654. },
  655. error: function(e) {
  656. $('#wt-loading-box').css('display', 'none')
  657. console.log(e)
  658. util.showTips({
  659. title: '网络延迟登录(不可用)失败,请关掉梯子(vpn)再试或梯子尝试换港台地区节点再试,一般关掉梯子多试几次登录(不可用)就行,' + superVip._CONFIG_.guide
  660. })
  661. }
  662. });
  663. }catch(e){
  664. $('#wt-loading-box').css('display', 'block')
  665. alert(e)
  666. util.showTips({
  667. title: '网络延迟登录(不可用)失2,请关掉梯子(vpn)再试或梯子尝试换港台地区节点再试,一般关掉梯子多试几次登录(不可用)就行,' + superVip._CONFIG_.guide
  668. })
  669. }
  670. })
  671. },
  672.  
  673. asyncHttp: async (url, timeout = 6000, isHeader = true) => {
  674. return new Promise((resolve, reject) => {
  675. var request = new XMLHttpRequest();
  676. request.open('GET', url, true);
  677. if(isHeader){
  678. request.setRequestHeader('luckyToken', superVip._CONFIG_.user.token);
  679. }
  680. request.timeout = timeout;
  681. request.onload = function() {
  682. if (request.readyState == 4) {
  683. if (request.status === 200) {
  684. resolve({
  685. errMsg: 'success',
  686. responseText: request.responseText
  687. });
  688. } else {
  689. resolve({
  690. errMsg: 'err1',
  691. responseText: ''
  692. });
  693. }
  694. }
  695. };
  696. request.onerror = function() {
  697. resolve({
  698. errMsg: 'err2',
  699. responseText: ''
  700. });
  701. };
  702. request.ontimeout = function() {
  703. resolve({
  704. errMsg: 'timeout',
  705. responseText: ''
  706. });
  707. };
  708. request.send();
  709. });
  710. },
  711.  
  712. findTargetElement: (targetContainer, maxTryTime = 30) => {
  713. const body = window.document;
  714. let tabContainer;
  715. let tryTime = 0;
  716. let startTimestamp;
  717. return new Promise((resolve, reject) => {
  718. function tryFindElement(timestamp) {
  719. if (!startTimestamp) {
  720. startTimestamp = timestamp;
  721. }
  722. const elapsedTime = timestamp - startTimestamp;
  723. if (elapsedTime >= 500) {
  724. console.log("find element:" + targetContainer + ",this" + tryTime + "num")
  725. tabContainer = body.querySelector(targetContainer)
  726. if (tabContainer) {
  727. resolve(tabContainer)
  728. } else if (++tryTime === maxTryTime) {
  729. reject()
  730. } else {
  731. startTimestamp = timestamp
  732. }
  733. }
  734. if (!tabContainer && tryTime < maxTryTime) {
  735. requestAnimationFrame(tryFindElement);
  736. }
  737. }
  738. requestAnimationFrame(tryFindElement);
  739. });
  740. },
  741.  
  742. sleep: (time) => {
  743. return new Promise((res, rej) => {
  744. setTimeout(() => {
  745. res()
  746. }, time)
  747. })
  748. },
  749.  
  750. showTips: (item = {}) => {
  751. $('#wt-maxindex-mask').css('display', 'block');
  752. $("#wt-tips-box").removeClass('hid-set-box');
  753. $("#wt-tips-box").addClass('show-set-box');
  754. $('#wt-tips-box .btn-box').empty()
  755. $('#wt-tips-box .btn-box').append(`
  756. <button class='cancel'>取消</button>
  757. <button class='submit'>确定</button>
  758. `)
  759. if (item.title) $('#wt-tips-box .content').html(item.title);
  760. if (item.doubt) $('#wt-tips-box .btn-box .cancel').css('display', 'block');
  761. if (item.confirm) $('#wt-tips-box .btn-box .submit').html(item.confirm);
  762. if (item.hidConfirm) {
  763. $('#wt-tips-box .submit').css('display', 'none');
  764. } else {
  765. $('#wt-tips-box .submit').css('display', 'block');
  766. }
  767. $('#wt-tips-box .btn-box .submit').on('click', () => {
  768. $('#wt-maxindex-mask').css('display', 'none');
  769. $("#wt-tips-box").removeClass('show-set-box');
  770. $("#wt-tips-box").addClass('hid-set-box');
  771. if (item.success) item.success(true);
  772. })
  773. $('#wt-tips-box .btn-box .cancel').on('click', () => {
  774. $('#wt-maxindex-mask').css('display', 'none');
  775. $("#wt-tips-box").removeClass('show-set-box');
  776. $("#wt-tips-box").addClass('hid-set-box');
  777. if (item.success) item.success(false);
  778. })
  779. },
  780.  
  781. showDownLoadWindow: (show = true, msg) => {
  782. if (!show) {
  783. $('#wt-mask-box').css('display', 'none');
  784. $("#wt-download-box").removeClass('show-set-box');
  785. $("#wt-download-box").addClass('hid-set-box');
  786. return
  787. }
  788. $('#wt-mask-box').css('display', 'block');
  789. const downloadUrl = superVip._CONFIG_.videoUrl.downloadUrlSign;
  790. if (!document.querySelector('#wt-download-box')) {
  791. let items = `<li class="item" data-url="${downloadUrl}" data-type="copy" style="background-color: #00bcd4;color:#e0e0e0;">复制链接</li>`
  792. superVip._CONFIG_.downUtils.forEach((item, index) => {
  793. items += `
  794. <li class="item" data-url="${item.url + (item.isAppend?'':'?m3u8=') + downloadUrl}">${item.title}</li>
  795. `
  796. })
  797. $('body').append(`
  798. <div id="wt-download-box">
  799. <div class="close"></div>
  800. <div class="tips">* ${msg?msg + '(刷新页面或打开其它帖子链接将丢失,链接有效期60分钟)': '视频链接有效期60分钟,请尽快使用。'}</div>
  801. <ul>${items}</ul>
  802. </div>
  803. `)
  804. } else {
  805. $('#wt-download-box').empty()
  806. let items = `<li class="item" data-url="${downloadUrl}" data-type="copy" style="background-color: #00bcd4;color:#e0e0e0;">复制链接</li>`
  807. superVip._CONFIG_.downUtils.forEach((item, index) => {
  808. items += `
  809. <li class="item" data-url="${item.url + (item.isAppend?'':'?m3u8=') + downloadUrl}">${item.title}</li>
  810. `
  811. })
  812. $('#wt-download-box').append(`<view class="close"></view><div class="tips">* ${msg?msg + '(刷新页面或打开其它帖子链接将丢失,链接有效期60分钟)': '刷新页面或打开其它帖子链接将丢失,链接有效期60分钟'}</div><ul>${items}</ul>`)
  813. }
  814. if(superVip._CONFIG_.isMobile && superVip._CONFIG_.isMobile[0] == 'iPhone'){
  815. $('#wt-download-box ul')[0].innerHTML += `<li class="item" data-open="1" data-url="https://apps.apple.com/cn/app/m3u8-mpjex/id6449724938">苹果视频下载软件</li>`
  816. }
  817. if(superVip._CONFIG_.isMobile && superVip._CONFIG_.isMobile[0] == 'Android'){
  818. $('#wt-download-box ul')[0].innerHTML += `<li class="item" data-open="1" data-url="https://wwjf.lanzoul.com/isifQ18id4fa">安卓视频下载软件(密3y3a)</li>`
  819. }
  820.  
  821. $("#wt-download-box").removeClass('hid-set-box');
  822. $("#wt-download-box").addClass('show-set-box');
  823. $("#wt-download-box .item").on('click', function(e) {
  824. const url = e.target.dataset.url
  825. if(e.target.dataset.type == 'copy'){
  826. if(url){
  827. util.copyText(url).then(res => {
  828. util.showTips({
  829. title: '视频地址复制成功,请尽快使用'
  830. })
  831. }).catch(err =>{
  832. util.showTips({
  833. title: '复制失败,请通过下面在线下载再复制输入框内的视频地址'
  834. })
  835. })
  836. }else{
  837. util.showTips({
  838. title: '抱歉,未检测到视频'
  839. })
  840. }
  841. return;
  842. }
  843. if (!url || !url.includes('.m3u8') && e.target.dataset.open != 1) {
  844. util.showTips({
  845. title: '抱歉,未检测到视频,还继续前往吗?',
  846. doubt: true,
  847. success: (res) => {
  848. if (res) {
  849. window.open(url)
  850. }
  851. }
  852. })
  853. } else {
  854. window.open(url);
  855. }
  856. })
  857. $("#wt-download-box .close").on('click', function() {
  858. $("#wt-mask-box").click()
  859. })
  860. },
  861.  
  862. showNotify: (item = {}) => {
  863. $("#wt-notify-box").removeClass('hid-notify-box')
  864. $("#wt-notify-box").addClass('show-notify-box')
  865. let version = superVip._CONFIG_.version
  866. const v = /当前插件版本 (\d\.\d\.\d\.{0,1}\d{0,2})/.exec(item.title)
  867. if (v) item.title = item.title.replace(v[1], version)
  868. if (item.title) $('#wt-notify-box .content').html(item.title + (version ?
  869. '<div style="text-align: right;color: #ccc;font-size: 10px;margin-top: 10px;">v ' +
  870. version + '</div>' : ''))
  871. superVip._CONFIG_.showNotify = true
  872. $('#wt-notify-box a').on('click', (e) => {
  873. e.stopPropagation()
  874. })
  875. $('#wt-notify-box').on('click', () => {
  876. $("#wt-notify-box").removeClass('show-notify-box')
  877. $("#wt-notify-box").addClass('hid-notify-box')
  878. superVip._CONFIG_.showNotify = false
  879. if (item.success) item.success(true)
  880. })
  881. }
  882. }
  883. const superVip = (function() {
  884. const _CONFIG_ = {
  885. homeUrl: 'https://vip.luckychajian.cn',
  886. apiBaseUrl: 'https://api.luckychajian.com',
  887. cdnBaseUrl: 'https://cdn.luckychajian.com',
  888. guide: '如长时间无法登录(不可用)请前往以下网站查看公告或尝试联系客服</br></br>Lucky公告网址</br></br><a href="http://luckychajian.3vhost.work?pwd=lucky">luckychajian.3vhost.work?pwd=lucky</a>',
  889. isMobile: navigator.userAgent.match(
  890. /(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i),
  891. vipBoxId: 'wt-vip-jx-box' + Math.ceil(Math.random() * 100000000),
  892. version: '1.0.3',
  893. videoUrl: {},
  894. downUtils: [
  895. {
  896. title: '在线下载1(适合电脑)',
  897. url: 'http://tools.bugscaner.com/m3u8.html',
  898. isAppend: false
  899. },
  900. {
  901. title: '在线下载2(适合电脑)',
  902. url: 'https://tools.thatwind.com/tool/m3u8downloader#m3u8=',
  903. isAppend: true
  904. },
  905. {
  906. title: '在线下载3(适合电脑)',
  907. url: 'https://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html?source=',
  908. isAppend: true
  909. }
  910. ]
  911. }
  912. class BaseConsumer {
  913. constructor(body) {
  914. this.parse = () => {
  915. this.interceptHttp()
  916. util.findTargetElement('body').then(container => {
  917. container.addEventListener('touchmove', function(e){
  918. e.stopPropagation()
  919. })
  920. this.generateElement(container).then(
  921. container => this.bindEvent(container))
  922. })
  923. }
  924. }
  925.  
  926. interceptHttp() {
  927. if(location.href.includes('/pages/hjsq')){
  928. const interceptMedia = (element) => {
  929. if(element.src && element.src.match(/\.mp4$/)){
  930. if(!superVip._CONFIG_.videoUrl.playerUrl || superVip._CONFIG_.videoUrl.playerUrl != element.src){
  931. superVip._CONFIG_.videoUrl.downloadUrlSign = ''
  932. superVip._CONFIG_.videoUrl.playerUrl = element.src
  933. superVip._CONFIG_.videoUrl.type = 0
  934. superVip._CONFIG_.videoUrl.playerType = 'mp4'
  935. util.showAndHidTips('wt_player_haijiao');
  936. }
  937. }
  938. };
  939. setInterval(()=>{
  940. document.querySelectorAll('#myVideo source').forEach(interceptMedia);
  941. },700)
  942. }
  943. const originalFetch = unsafeWindow.fetch;
  944. unsafeWindow.fetch = async function(url, options) {
  945. return await initPlayerUrl(url, originalFetch, options)
  946. };
  947. }
  948.  
  949. generateElement(container) {
  950. GM_addStyle(`
  951. @font-face {
  952. font-family: 'iconfont'; /* Project id 4784633 */
  953. src: url('//at.alicdn.com/t/c/font_4784633_m832t9irm9f.woff2?t=1734418085047') format('woff2'),
  954. url('//at.alicdn.com/t/c/font_4784633_m832t9irm9f.woff?t=1734418085047') format('woff'),
  955. url('//at.alicdn.com/t/c/font_4784633_m832t9irm9f.ttf?t=1734418085047') format('truetype');
  956. }
  957. .iconfont {
  958. font-family: "iconfont" !important;
  959. font-size: 16px;
  960. font-style: normal;
  961. font-weight: 400 !important;
  962. -webkit-font-smoothing: antialiased;
  963. -moz-osx-font-smoothing: grayscale;
  964. }
  965. @keyframes showSetBox {
  966. 0% {
  967. transform: translate(-50%,-50%) scale(0);
  968. }
  969. 80% {
  970. transform: translate(-50%,-50%) scale(1.1);
  971. }
  972. 100% {
  973. transform: translate(-50%,-50%) scale(1);
  974. }
  975. }
  976. @keyframes hidSetBox {
  977. 0% {
  978. transform: translate(-50%,-50%) scale(1);
  979. }
  980. 80% {
  981. transform: translate(-50%,-50%) scale(1.1);
  982. }
  983. 100% {
  984. transform: translate(-50%,-50%) scale(0);
  985. }
  986. }
  987. @keyframes colorAnima {
  988. 0%{
  989. background-color: #f0f0f0;
  990. color: #5d5d5d;
  991. transform: scale(1);
  992. }
  993. 50%{
  994. transform: scale(1.1);
  995. }
  996. 100%{
  997. background-color: #ff6022;;
  998. color: white;
  999. transform: scale(1);
  1000. }
  1001. }
  1002. @keyframes showNotifyBox {
  1003. 0% {
  1004. transform: translate(-50%,-100%) scale(0);
  1005. }
  1006. 80% {
  1007. transform: translate(-50%,35px) scale(1.1);
  1008. }
  1009. 100% {
  1010. transform: translate(-50%,35px) scale(1);
  1011. }
  1012. }
  1013. @keyframes hidNotifyBox {
  1014. 0% {
  1015. transform: translate(-50%,35px) scale(1.1);
  1016. }
  1017. 80% {
  1018. transform: translate(-50%,35px) scale(1);
  1019. }
  1020. 100% {
  1021. transform: translate(-50%,-100%) scale(0);
  1022. }
  1023. }
  1024. @keyframes scale {
  1025. 0%{
  1026. transform: scale(1);
  1027. }
  1028. 50%{
  1029. transform: scale(1.1);
  1030. }
  1031. 100%{
  1032. transform: scale(1);
  1033. }
  1034. }
  1035. @keyframes circletokLeft {
  1036. 0%,100% {
  1037. left: 0px;
  1038. width: 12px;
  1039. height: 12px;
  1040. z-index: 0;
  1041. }
  1042. 25% {
  1043. height: 15px;
  1044. width: 15px;
  1045. z-index: 1;
  1046. left: 8px;
  1047. transform: scale(1)
  1048. }
  1049. 50% {
  1050. width: 12px;
  1051. height: 12px;
  1052. left: 22px;
  1053. }
  1054. 75% {
  1055. width: 10px;
  1056. height: 10px;
  1057. left: 8px;
  1058. transform: scale(1)
  1059. }
  1060. }
  1061. @keyframes circletokRight {
  1062. 0%,100% {
  1063. top: 3px;
  1064. left: 22px;
  1065. width: 12px;
  1066. height: 12px;
  1067. z-index: 0
  1068. }
  1069. 25% {
  1070. height: 15px;
  1071. width: 15px;
  1072. z-index: 1;
  1073. left: 24px;
  1074. transform: scale(1)
  1075. }
  1076. 50% {
  1077. width: 12px;
  1078. height: 12px;
  1079. left: 0px;
  1080. }
  1081. 75% {
  1082. width: 10px;
  1083. height: 10px;
  1084. left: 24px;
  1085. transform: scale(1)
  1086. }
  1087. }
  1088. .color-anima{
  1089. animation: colorAnima .3s ease 1 forwards;
  1090. }
  1091. .btn-anima{
  1092. animation: scale .3s ease 1 forwards;
  1093. }
  1094.  
  1095. #app .dplayer-controller{ bottom: 10px !important}
  1096. html .van-overflow-hidden, body{ overflow: auto !important;}
  1097. .video-bg,.playWaring,.packFree,.activity_time,.has-vip .mask, .buy-porp, .md-mine-sj p:nth-child(2), .overlay, .lockOpenbtn, .van-overlay, .van-popup--center, .findhoPack, .bot_banner, .JGbtnList, .ai-inside-box, .popup2-content, .video-ask, .top-swiper, .splashAD, .top_banner, .downApk, .swiperPack{display:none !important;z-index:-99999 !important;opacity: 0!important;width :0 !important;}
  1098. .md-mine-sj p:nth-child(1) {color: #00bcd4;}
  1099. .vipTip-first h2{ position: relative; width: 80%; text-align: center; font-size: 15px; color: #00bcd4;}
  1100. .vipTip-first p{ margin-top: 25px !important;}
  1101. .vipTip-first h2::before{content: '请使用右侧插件播放按钮播放视频'; position: absolute;top: 0;left:0; right:0; bottom:0; background-color: #000;}
  1102.  
  1103. #wt-resources-box{position: relative; border: 1px dashed #ec8181;background: #fff4f4;}
  1104. .sell-btn{border:none !important;margin-top:20px;}
  1105. .margin-left{ margin-left: 0 !important;}
  1106. .show-set-box{ animation: showSetBox 0.3s ease 1 forwards;}
  1107. .hid-set-box{ animation: hidSetBox 0.3s ease 1 forwards;}
  1108. .show-notify-box{ animation: showNotifyBox 0.3s ease 1 forwards;}
  1109. .hid-notify-box{ animation: hidNotifyBox 0.3s ease 1 forwards;}
  1110. #wt-loading-box{display: none;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 100000;background-color: #0000004d;}
  1111. #wt-loading-box .loading{position: absolute;width: 35px;height: 17px;top: 50%;left: 50%;transform: translate(-50%,-50%);}
  1112. #wt-loading-box .loading::before,
  1113. #wt-loading-box .loading::after{position: absolute;content: "";top: 3px;background-color: #ffe60f;width: 14px;height: 14px;border-radius: 20px;mix-blend-mode: multiply;animation: circletokLeft 1.2s linear infinite;}
  1114. #wt-loading-box .loading::after{animation: circletokRight 1.2s linear infinite;background-color: #4de8f4;}
  1115. #wt-left-show{ position: fixed;left: 20px;top: 50%;transform: translateY(-50%);z-index: 9999;transition: all 0.3s ease;}
  1116. #wt-left-show i {color: #5f5b5b;font-size: 27px;color: #e91e63;text-shadow: #e91e63 2px 2px 12px;font-size: 25px;margin-left: -1px;}
  1117. #wt-${_CONFIG_.vipBoxId}{
  1118. position: fixed;
  1119. top: 50%;
  1120. transform: translate(0, -50%);
  1121. right: 10px;
  1122. width: 46px;
  1123. border-radius: 30px;
  1124. background: rgb(64 64 64 / 81%);
  1125. box-shadow: 1px 1px 8px 1px rgb(98 99 99 / 34%);
  1126. z-index: 9999;
  1127. transition: all 0.3s ease;
  1128. }
  1129. #wt-${_CONFIG_.vipBoxId} .item{position: relative;height: 60px;}
  1130. .tips-yuan::before{ position: absolute; content: '';top: 12px; right: 6px;width: 8px;height: 8px; border-radius: 10px; background-color: #5ef464;}
  1131. .tips-yuan-err::before{ position: absolute; content: '';top: 12px; right: 6px;width: 8px;height: 8px; border-radius: 10px; background-color: #f83f32;}
  1132. #wt-${_CONFIG_.vipBoxId} .item .iconfont,#wt-${_CONFIG_.vipBoxId} .item img{position: absolute;top:50%;left:50%;transform: translate(-50%,-50%)}
  1133. #wt-login-box .close,#wt-set-box .close,#wt-notify-box .close{position: absolute;right: 0px;top: 0px;width: 40px;height: 40px;z-index: 100;}
  1134. #wt-login-box .close::before,#wt-login-box .close::after,#wt-set-box .close::before,#wt-set-box .close::after,#wt-notify-box .close::before,#wt-notify-box .close::after{position: absolute;left: 50%;top: 50%;content: '';width: 12px;height: 2px;border-radius: 1px;background-color: #6a6a6a;transform: translate(-50%,-50%) rotate(45deg);visibility: visible;}
  1135. #wt-login-box .close::after,#wt-set-box .close::after,#wt-notify-box .close::after{transform: translate(-50%,-50%) rotate(-45deg);}
  1136. #wt-${_CONFIG_.vipBoxId} .absolute-center{ position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
  1137. #wt-${_CONFIG_.vipBoxId} #wt-my img{ width: 28px;height: 28px;border-radius: 30px;margin-left: 2px;transtion: all 0.3s ease;}
  1138. #wt-${_CONFIG_.vipBoxId} #wt-my-set i {color: white;font-size: 24px;text-shadow: 2px 2px 14px #ffffff;font-family: 'iconfont';}
  1139. #wt-${_CONFIG_.vipBoxId} #wt-my-down i {color: white;font-size: 24px;text-shadow: 2px 2px 15px #ffffff;font-family: 'iconfont';}
  1140. #wt-${_CONFIG_.vipBoxId} #wt-my-notify i {color: white;font-size: 27px;padding: 10px 1px;text-shadow: 2px 2px 12px #ffffff;}
  1141. #wt-${_CONFIG_.vipBoxId} #wt-hid-box i {color: white;font-size: 21px;text-shadow: 2px 2px 12px #ffffff;margin-left: -1px;}
  1142. .wt-player-btn-box .player-btn{ position:absolute;top:42%;left:50%;transform:translate(-50%,-50%);width: 20%}
  1143. .wt-player-btn-box .tips{ position: absolute;bottom: 20px;left:50%;transform: translateX(-50%);color: #FFC107;width: 80%;text-align: center;font-size: 15px;font-weight: 500;}
  1144. #wt-mask-box,#wt-maxindex-mask{display:none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 10000; background-color: #00000057;}
  1145. #wt-maxindex-mask{z-index: 90000;display:none;}
  1146. #wt-set-box{ position:fixed; top:50%;left:50%; transform: translate(-50%,-50%) scale(0);overflow: hidden;background-color: white;box-shadow: 0 15px 30px rgba(0, 0, 0, .15);border-radius: 12px;z-index: 10010;padding: 10px 15px;padding-right: 5px;box-sizing: border-box;width: 300px;}
  1147. #wt-set-box::before{display: none;content:'';position: absolute;width: 150px;height: 150px;border-radius: 100px;background-color: #2196F3;z-index: -1;opacity: 0.7;bottom: 0;transform: translate(-40%,58%);}
  1148. #wt-set-box::after{display: none; content:'';position: absolute;width: 150px;height: 150px;border-radius: 100px;background-color: #FFC107;z-index: -1;opacity: 0.7;top: 0;right: 0;transform: translate(22%,-53%);}
  1149. #wt-set-box .selected-box .selected{ background-color: #ff6022;color: white;}
  1150. #wt-set-box .user-box-container{display: none;letter-spacing: 1px;}
  1151. #wt-set-box .info-box{display:flex;height: 50px;align-items: center;}
  1152. #wt-set-box .expire{ opacity: 0.35;}
  1153. #wt-set-box .info-box .avatar-box{position: relative;height: 36px;width: 36px;background-color: white;border-radius: 7px;box-shadow: rgb(166 166 166 / 20%) 0px 1px 20px 0px;}
  1154. #wt-set-box .user-box .title{text-align: center;font-weight: 600;font-size: 16px;color: #3a3a3a;}
  1155. #wt-set-box .user-box .desc{display: flex;flex-direction: column;height: 36px;justify-content: space-around;flex: 8;font-size: 10px;color: #5d5d5d;margin-left: 10px;}
  1156. #wt-set-box .user-box .vip-day{margin-right: 10px;text-align: center;color: #8a8a8a;font-size: 11px;}
  1157. #wt-set-box .user-box .avatar{position: absolute; width: 36px;height:36px;border-radius: 30px;border-radius: 7px;font-size: 0;}
  1158. #wt-set-box .user-box .user-info{ position: relative; left: -5px; display: flex;align-items: center;margin-bottom: 4px;background-color: #f1f1f1;border-radius: 11px;padding: 7px;}
  1159. #wt-set-box .user-box .user-info .info{margin-left: 10px;width: 180px;}
  1160. #wt-set-box .user-box .user-info .info .nickname{color: #676767;font-size: 12px;letter-spacing: 1px;}
  1161. #wt-set-box .user-box .user-info .info .username{color: #b9b9b9;font-size: 10px;margin-top: 2px;}
  1162. #wt-set-box .user-box .user-info .logout{position: absolute;font-size: 0;right: 12px;}
  1163. #wt-set-box .user-box .user-info .logout button{padding: 0 10px;height: 28px;background-color: #615b5b;border-radius: 30px;color: white;border: none;font-size: 10px;}
  1164. #wt-set-box .user-box .apps-container{ height: 330px; overflow: auto; margin-bottom: 10px;}
  1165. #wt-tips-box,#wt-download-box{ position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);overflow: hidden;width: 240px;min-height:130px;background-color: white;border-radius:12px;z-index: 95000;padding:10px 15px;}
  1166. #wt-tips-box,#wt-download-box .tips{ font-size: 10px;margin-top: 30px;color: #00bcd4;letter-spacing: 1px;}
  1167. #wt-tips-box .title{font-size: 16px;text-align: center;font-weight: 600;}
  1168. #wt-tips-box .content{text-align: center;margin: 14px 0;font-size: 12px;color: #2a2a2a;font-weight: 500;word-break: break-word;}
  1169. #wt-tips-box .content p{color: #ff4757;text-align: left;}
  1170. #wt-tips-box a{color: #1E88E5;text-decoration: underline;}
  1171. #wt-tips-box .btn-box{display:flex;justify-content: space-around;}
  1172. #wt-tips-box .btn-box button{min-width: 60px;height: 28px;background-color: #00bcd4;border-radius: 30px;color: white;border: none;font-size: 12px;}
  1173. #wt-tips-box .btn-box .cancel{display: none;background-color: #eee;color:#2a2a2a}
  1174. #wt-tips-box .logo{position: absolute;top: 9%;left: 1%; color: #dbdbdb; font-size: 11px;transform: rotate(-15deg);text-align: center;z-index: -10;}
  1175. #wt-tips-box .version{position: absolute;top: 5%; right: 10%;transform: rotate(-15deg);color: #dbdbdb;}
  1176. #wt-notify-box {position: fixed;top: 2%;left: 50%;transform:translate(-50%,-100%) scale(0);overflow: hidden;width: 80%;min-height: 75px;letter-spacing: 1px;background-color: white;color:#2a2a2a;border-radius: 15px;box-shadow: 0 15px 30px rgba(0, 0, 0, .15);z-index: 95000;}
  1177. #wt-notify-box::after{display:none; content:'';position: absolute;width: 250px;height: 250px;border-radius: 200px;background-color: #03A9F4;z-index: -1;opacity: 0.7;bottom: 0;left: 0;transform: translate(-50%,85%);}
  1178. #wt-notify-box .title{ text-align: center;height: 35px; line-height: 35px;font-size: 15px;font-weight: 600; color: #00bcd4;}
  1179. #wt-notify-box .content{ color: #3a3a3a;padding: 10px 15px;font-size: 12px;}
  1180. #wt-notify-box .content a{color: #1E88E5;text-decoration: underline;}
  1181. #wt-notify-box .content p{margin-bottom: 5px;}
  1182. .wt-player-btn-box{ position:absolute;top:0;left:0;right:0;bottom:0;z-index: 99998;background-color: #0000004d;}
  1183. #wt-video-container{display: none; position:fixed;top: 0;left: 0;right: 0;bottom: 0; z-index: 99998;background-color: black;}
  1184. #wt-video-container .wt-video{ position:absolute;top:50%;width:100%;transform: translateY(-50%);height: 240px; z-index: 9999;}
  1185. #wt-video-container .wt-video video{width:100%;height: 100%;}
  1186. .dplayer-controller{bottom: 30px !important;}
  1187. .main-player{height: 300px;}
  1188. .dplayer.dplayer-hide-controller .dplayer-controller{ opacity: 0 !important;transform: translateY(200%) !important;}
  1189. .wt-close-btn{ font-size: 15px;position: absolute;top: 40px;left: 25px;color: white;}
  1190. #wt-download-box{ z-index: 10010;}
  1191. #wt-download-box .close{position: absolute;right: 0px;top: 0px;width: 40px;height: 40px;}
  1192. #wt-download-box .close::before,#wt-download-box .close::after{position: absolute;left: 50%;top: 50%;content: '';width: 14px;height: 2px;border-radius: 1px;background-color: #adadad;transform: translate(-50%,-50%) rotate(45deg);}
  1193. #wt-download-box .close::after,#wt-download-box .close::after{transform: translate(-50%,-50%) rotate(-45deg);}
  1194. #wt-download-box::before{display:none; content:'';position: absolute;width: 150px;height: 150px;border-radius: 100px;background-color: #00bcd4;z-index: -1;opacity: 0.7;top: 0;left: 0;transform: translate(-38%,-40%);}
  1195. #wt-download-box::after{display:none;content:'';position: absolute;width: 150px;height: 150px;border-radius: 100px;background-color: #FFC107;z-index: -1;opacity: 0.7;bottom: 0;right: 0;transform: translate(62%,30%);}
  1196. #wt-download-box ul li{ height: 38px;line-height: 38px;font-size: 11px;text-align: center;color:#909090;font-weight: 500;background-color: white;box-shadow: rgb(166 166 166 / 20%) 0px 1px 5px 1px;margin: 18px 30px;border-radius: 40px;}
  1197. `)
  1198. if (_CONFIG_.isMobile) {
  1199. GM_addStyle(`
  1200. #wt-set-box {width:80%;}
  1201. `);
  1202. }
  1203. const roles = util.initAppDate(false);
  1204. $(container).append(`
  1205. <div id="wt-${_CONFIG_.vipBoxId}">
  1206. <div id="wt-my" class="item wt_my_haijiao">
  1207. <img src="${_CONFIG_.cdnBaseUrl + '/image/app.png'}"></img>
  1208. </div>
  1209. <div id="wt-my-set" class="item wt_player_haijiao">
  1210. <i class="iconfont">&#xe623;</i>
  1211. </div>
  1212. <div id="wt-my-down" class="item wt_my_down_haijiao">
  1213. <i class="iconfont">&#xe61c;</i>
  1214. </div>
  1215. <div id="wt-my-notify" class="item wt_my_notify" style="padding: 0 11px;">
  1216. <i class="iconfont">&#xe604;</i>
  1217. </div>
  1218. <div id="wt-hid-box" class="item">
  1219. <i class="iconfont">&#xe65f;</i>
  1220. </div>
  1221. </div>
  1222. <div id="wt-left-show" style="transform: translate(-60px,-50%);padding: 10px;">
  1223. <i class="iconfont">&#xe675;</i>
  1224. </div>
  1225. <div id="wt-mask-box"></div>
  1226. <div id="wt-set-box">
  1227. <div class="close"></div>
  1228. <div class="line-box" style="display:none">
  1229. </div>
  1230. <div class="user-box-container">
  1231. <div class="user-box">
  1232. <div class="title" style="margin-bottom: 10px">App</div>
  1233. <div class="user-info">
  1234. <div class="avatar" style="position: relative;">
  1235. <img src="${_CONFIG_.cdnBaseUrl + '/image/app.png'}" style="width: 100%;height: 100%;border-radius: 8px;"></img>
  1236. </div>
  1237. <div class="info">
  1238. <div class="nickname">请登录(不可用)</div>
  1239. <div class="username">xxxxxxxxxx</div>
  1240. </div>
  1241. <div class="logout">
  1242. <button>退出登录(不可用)</button>
  1243. </div>
  1244. </div>
  1245. <div class="apps-container"> ${roles}</div>
  1246. </div>
  1247. </div>
  1248. </div>
  1249. <div id="wt-loading-box">
  1250. <div class="loading"></div>
  1251. </div>
  1252. <div id="wt-maxindex-mask"></div>
  1253. <div id="wt-tips-box">
  1254. <div class="title">提示</div>
  1255. <div class="content"></div>
  1256. <div class="btn-box">
  1257. <button class='cancel'>取消</button>
  1258. <button class='submit'>确定</button>
  1259. </div>
  1260. <div class="logo"><p>@${superVip._CONFIG_.homeUrl}</p></div>
  1261. <div class="version"><p>v ${superVip._CONFIG_.version}</p></div>
  1262. </div>
  1263. <div id="wt-notify-box">
  1264. <div class="close"></div>
  1265. <div class="title">通知</div>
  1266. <div class="content"></div>
  1267. </div>
  1268. <div id="wt-video-container">
  1269. <div class="wt-close-btn">
  1270. <i class="van-icon van-icon-close"></i>
  1271. <span style="margin-left: 5px;">退出播放</span>
  1272. </div>
  1273. <div class="wt-video">
  1274. <video id="wt-video" controls></video>
  1275. </div>
  1276. </div>
  1277. `)
  1278. if (_CONFIG_.user && _CONFIG_.user.avatar) {
  1279. util.logined()
  1280. }
  1281. return new Promise((resolve, reject) => resolve(container));
  1282. }
  1283.  
  1284. bindEvent(container) {
  1285. const vipBox = $(`#wt-${_CONFIG_.vipBoxId}`)
  1286. if (GM_getValue('haijiao_hid_controller', null)) {
  1287. vipBox.css("transform", "translate(125%, -50%)")
  1288. $('#wt-left-show').css("transform", "translate(0, -50%)")
  1289. }
  1290.  
  1291. vipBox.find("#wt-my").on("click", () => {
  1292. if (_CONFIG_.user) {
  1293. $('#wt-mask-box').css('display', 'block')
  1294. $("#wt-set-box .user-box-container").css('display', 'block')
  1295. $("#wt-set-box").removeClass('hid-set-box')
  1296. $("#wt-set-box").addClass('show-set-box')
  1297. $('#wt-set-box .user-box-container .nickname').html(_CONFIG_.user.nickname)
  1298. util.initAppDate()
  1299. } else {
  1300. util.addLogin()
  1301. $('#wt-login-mask').css('display','block')
  1302. $("#wt-login-box").removeClass('hid-set-box')
  1303. $("#wt-login-box").addClass('show-set-box')
  1304. const jsxl_login_code = GM_getValue('jsxl_login_code','')
  1305. if(jsxl_login_code){
  1306. try{
  1307. const user = JSON.parse(jsxl_login_code)
  1308. if(user.u && user.u != 'undefined'){
  1309. $("#wt-login-box input")[0].value = user.u;
  1310. }
  1311. if(user.p && user.p != 'undefined'){
  1312. $("#wt-login-box input")[1].value = user.p;
  1313. }
  1314. }catch(e){}
  1315. }
  1316. }
  1317. })
  1318.  
  1319. vipBox.find("#wt-my-set").on("click", async () => {
  1320. try{
  1321. document.querySelector('video').pause()
  1322. }catch(e){}
  1323. if (!_CONFIG_.user) {
  1324. $("#wt-my").click()
  1325. return
  1326. }
  1327. if(superVip._CONFIG_.requestErrMsg){
  1328. util.showTips({ title: superVip._CONFIG_.requestErrMsg})
  1329. return
  1330. }
  1331. if (!_CONFIG_.videoUrl.aes) {
  1332. $('#wt-loading-box').css('display', 'block')
  1333. for (let i = 0; i < 3; i++) {
  1334. await util.sleep(1000)
  1335. if (_CONFIG_.videoUrl.aes) {
  1336. $('#wt-loading-box').css('display', 'none')
  1337. break
  1338. }
  1339. }
  1340. $('#wt-loading-box').css('display', 'none')
  1341. }
  1342. if (_CONFIG_.videoUrl.aes) {
  1343. $('#wt-video-container').css('display', 'block')
  1344. $("#wt-hid-box").click()
  1345. util.showTips({
  1346. title: location.href + '</br>视频解析中请勿操作。。。</br>如解析时长大于1分钟请考虑开梯子再试</br>插件网站' + superVip._CONFIG_.homeUrl,
  1347. hidConfirm: true
  1348. })
  1349. await util.sleep(500)
  1350. if(!_CONFIG_.videoUrl.playerUrl || !_CONFIG_.videoUrl.playerUrl.includes('http')){
  1351. _CONFIG_.videoUrl.playerUrl = serializeVideo(_CONFIG_.videoUrl.aes.replace(_CONFIG_.videoUrl.aes.substring(_CONFIG_.videoUrl.aes.length - 5), ''));
  1352. }
  1353. if (!_CONFIG_.videoUrl.playerUrl || !_CONFIG_.videoUrl.playerUrl.includes('http')) {
  1354. if (_CONFIG_.videoUrl.playerUrl.includes('通知:') || _CONFIG_.videoUrl.playerUrl
  1355. .includes('最新版本')) {
  1356. util.showTips({
  1357. title: _CONFIG_.videoUrl.playerUrl
  1358. })
  1359. } else {
  1360. util.showTips({
  1361. title: _CONFIG_.videoUrl.playerUrl + '</br>' + location
  1362. .href + '</br>抱歉,解析失败,请刷新页面再尝试,或尝试重新登录(不可用)海角账号,或安卓用via浏览器,苹果用focus浏览器再,或者关掉VPN再试,如有问题或需梯子推荐请联系发电网站' + +'中售后联系方式'
  1363. })
  1364. }
  1365. return;
  1366. }
  1367. $('#wt-tips-box .btn-box .submit').click()
  1368. if(_CONFIG_.videoUrl?.playerType == 'mp4'){
  1369. $('.wt-video').empty()
  1370. $('.wt-video').append(`
  1371. <video controls width="100%" height="100%">
  1372. <source src="${_CONFIG_.videoUrl?.playerUrl}">
  1373. </video>
  1374. `)
  1375. return
  1376. }
  1377. if(_CONFIG_.videoUrl.playerType == 'mp4'){
  1378. $('.wt-video').empty()
  1379. $('.wt-video').append(`
  1380. <video controls width="100%" height="100%">
  1381. <source src="${_CONFIG_.videoUrl.playerUrl}">
  1382. </video>
  1383. `)
  1384. return
  1385. }
  1386. if (_CONFIG_.isMobile && _CONFIG_.isMobile[0] == 'iPhone') {
  1387. $('.wt-video').empty()
  1388. $('.wt-video').append(`
  1389. <video controls width="100%" height="100%">
  1390. <source src="${_CONFIG_.videoUrl.playerUrl}" type="application/x-mpegURL">
  1391. </video>
  1392. `)
  1393. } else {
  1394. $('.wt-video').empty()
  1395. $('.wt-video').append(`<video id="wt-video" controls></video>`)
  1396. const video = document.querySelector('.wt-video #wt-video')
  1397. _CONFIG_.hls_dp = new Hls()
  1398. _CONFIG_.hls_dp.loadSource(_CONFIG_.videoUrl.playerUrl)
  1399. _CONFIG_.hls_dp.attachMedia(video)
  1400. _CONFIG_.hls_dp.on(Hls.Events.MANIFEST_PARSED, function() {
  1401. video.play()
  1402. })
  1403. }
  1404. }
  1405. if (!_CONFIG_.videoUrl.aes) {
  1406. util.showTips({
  1407. title: location.href +
  1408. '</br>抱歉未检测到帖子视频,请关掉其它插件再试,或苹果用Focus浏览器,安卓用Via浏览器再试'
  1409. })
  1410. }
  1411. })
  1412.  
  1413. $('#wt-video-container div').on('click', function(e) {
  1414. e.stopPropagation()
  1415. })
  1416.  
  1417. $('.wt-close-btn').on('click', function() {
  1418. $('#wt-video-container').css('display', 'none')
  1419. var videos = document.querySelectorAll('video');
  1420. videos.forEach(function(video) {
  1421. // video.volume = 0.0
  1422. video.pause();
  1423. });
  1424. $('.wt-video').empty()
  1425. if (_CONFIG_.hls_dp) _CONFIG_.hls_dp.destroy()
  1426. $("#wt-left-show").click();
  1427. })
  1428.  
  1429. vipBox.find("#wt-my-down").on("click", () => {
  1430. if (!_CONFIG_.user) {
  1431. $("#wt-my").click()
  1432. return
  1433. }
  1434. if(superVip._CONFIG_.requestErrMsg){
  1435. util.showTips({ title: superVip._CONFIG_.requestErrMsg})
  1436. return
  1437. }
  1438. if(_CONFIG_.videoUrl.downloadUrlSign){
  1439. util.showDownLoadWindow();
  1440. return;
  1441. }
  1442. if (_CONFIG_.videoUrl.downloadUrl && _CONFIG_.videoUrl.aes) {
  1443. if(_CONFIG_.user && _CONFIG_.user.stopDownload || (_CONFIG_.user.role.use_download_num == _CONFIG_.user.role.max_download_num) ){
  1444. util.showTips({
  1445. title: '抱歉,今日下载次数' + _CONFIG_.user.role.max_download_num + '次已经用完,请明日再下载'
  1446. })
  1447. return;
  1448. }
  1449. util.showTips({
  1450. title: '为了插件的稳定现已日限下载</br>(当前账号日限' + _CONFIG_.user.role.max_download_num +'次,' + superVip._CONFIG_.user.downloadTips +',已使用' + _CONFIG_.user.role.use_download_num +'次,每个插件每日各' + _CONFIG_.user.role.max_download_num +'次),</br>您确定要消耗一次次数来获取视频链接吗(如失败不计数)?',
  1451. doubt: true,
  1452. success: async (confirm) => {
  1453. if (confirm) {
  1454. try {
  1455. $('#wt-loading-box').css('display', 'block')
  1456. await util.sleep(300);
  1457. const downloadType = _CONFIG_.videoUrl.isDecrypDownload? 'decrypDownload?code=': 'signDownload?downloadUrl='
  1458. const res = await util.asyncHttp(superVip._CONFIG_.apiBaseUrl + '/d' + (Math.floor(Math.random() * 3) + 1) + '00/' + downloadType + _CONFIG_.videoUrl.downloadUrl + '&isDownload=1')
  1459. $('#wt-loading-box').css('display', 'none')
  1460. if (res.errMsg == 'success') {
  1461. const result = JSON.parse(res.responseText)
  1462. if (result.errCode != 0) {
  1463. throw new Error(result.errMsg)
  1464. }
  1465. if(result.newToken) _CONFIG_.user.token = result.newToken;
  1466. _CONFIG_.user.role.use_download_num = result.useDownloadNum
  1467. _CONFIG_.videoUrl.downloadUrlSign = result.data
  1468. util.showDownLoadWindow(true, result.errMsg);
  1469. GM_setValue('jsxl_user', _CONFIG_.user);
  1470. } else {
  1471. $('#wt-loading-box').css('display', 'none')
  1472. util.showTips({
  1473. title: _CONFIG_.videoUrl.url +
  1474. '</br>' + location.href +
  1475. '</br>' + res.errMsg
  1476. })
  1477. }
  1478. } catch (e) {
  1479. console.log(e)
  1480. $('#wt-loading-box').css('display', 'none')
  1481. util.showTips({
  1482. title: e.message +
  1483. '</br>' + location.href +
  1484. '</br>获取下载链接失败'
  1485. })
  1486. if(e.message.includes('明日再下载')){
  1487. _CONFIG_.user.stopDownload = true
  1488. _CONFIG_.user.role.use_download_num = _CONFIG_.user.role.max_download_num
  1489. GM_setValue('jsxl_user', _CONFIG_.user);
  1490. }
  1491. }
  1492. }
  1493. }
  1494. })
  1495. return;
  1496. }
  1497.  
  1498. util.showTips({
  1499. title: location.href + '</br>需要播放按钮有小绿点或暂不支持下载'
  1500. })
  1501. })
  1502.  
  1503. vipBox.find("#wt-hid-box").on("click", () => {
  1504. vipBox.css("transform", "translate(125%, -50%)");
  1505. $('#wt-left-show').css("transform", "translate(0, -50%)")
  1506. GM_setValue('haijiao_hid_controller', 1)
  1507. })
  1508.  
  1509. $('#wt-left-show').on('click', () => {
  1510. $('#wt-left-show').css("transform", "translate(-60px, -50%)");
  1511. vipBox.css("transform", "translate(0, -50%)")
  1512. GM_setValue('haijiao_hid_controller', '')
  1513. })
  1514.  
  1515. $('#wt-mask-box').on('click', () => {
  1516. $('#wt-mask-box').css('display', 'none')
  1517. $("#wt-set-box").removeClass('show-set-box');
  1518. $("#wt-set-box").addClass('hid-set-box')
  1519. $("#wt-download-box").removeClass('show-set-box');
  1520. $("#wt-download-box").addClass('hid-set-box')
  1521. setTimeout(() => {
  1522. $("#wt-set-box .line-box").css('display', 'none');
  1523. $("#wt-set-box .user-box-container").css('display', 'none')
  1524. }, 500)
  1525. })
  1526.  
  1527. $("#wt-set-box .close").on("click", () => {
  1528. $('#wt-mask-box').click()
  1529. })
  1530.  
  1531. vipBox.find("#wt-my-notify").on("click", () => {
  1532. if (_CONFIG_.showNotify) {
  1533. $('#wt-notify-box').click()
  1534. } else {
  1535. const notify = GM_getValue('notify', '');
  1536. if (notify) {
  1537. util.showNotify({
  1538. title: notify
  1539. })
  1540. GM_setValue('notifyShow', false);
  1541. util.showAndHidTips('wt_my_notify', 'set', false)
  1542. } else {
  1543. util.showNotify({
  1544. title: '还没有通知信息'
  1545. })
  1546. };
  1547. }
  1548. })
  1549.  
  1550. $("#wt-set-box .user-box .user-info").on('click', function() {
  1551. util.showTips({
  1552. title: '确定要跳转到插件官网吗?',
  1553. doubt: true,
  1554. success: (res) =>{
  1555. if(res){
  1556. location.href = superVip._CONFIG_.homeUrl
  1557. }
  1558. }
  1559. })
  1560. })
  1561.  
  1562. $('#wt-set-box .logout').on('click', function(e) {
  1563. util.showTips({
  1564. title: '您确定要退出登录(不可用)吗?',
  1565. doubt: true,
  1566. success: (res) => {
  1567. if (res) {
  1568. util.logouted()
  1569. $('#wt-mask-box').click()
  1570. }
  1571. }
  1572. })
  1573. e.stopPropagation()
  1574. })
  1575.  
  1576. if (!_CONFIG_.user) {
  1577. util.addLogin()
  1578. util.findTargetElement('#wt-my').then(res => {
  1579. setTimeout(() => {
  1580. res.click()
  1581. }, 2500)
  1582. })
  1583. }
  1584. if(GM_getValue('notifyShow')){
  1585. util.showAndHidTips('wt_my_notify')
  1586. }
  1587. }
  1588. }
  1589.  
  1590. return {
  1591. start: () => {
  1592. _CONFIG_.user = GM_getValue('jsxl_user', '')
  1593. if (_CONFIG_.user) {
  1594. if (_CONFIG_.user.login_date && (_CONFIG_.user.login_date != new Date().setHours(0, 0, 0,
  1595. 0))) {
  1596. _CONFIG_.user = ''
  1597. GM_setValue('jsxl_user', '')
  1598. }
  1599. }
  1600. new BaseConsumer().parse()
  1601. },
  1602. _CONFIG_
  1603. }
  1604. })();
  1605. superVip.start();
  1606. }
  1607.  
  1608.  
  1609. if(!window.jQuery){
  1610. const script = document.createElement('script');
  1611. script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js';
  1612. script.onload = function() {
  1613. init(window.jQuery)
  1614. };
  1615. script.onerror = function(e) {
  1616. alert('jquery初始化失败')
  1617. };
  1618. document.head.appendChild(script);
  1619. }else{
  1620. init(window.jQuery)
  1621. }

QingJ © 2025

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