// ==UserScript== // @name 【玩的嗨】VIP工具箱,全网VIP视频免费破解去广告,一站式音乐搜索下载,获取B站封面,下载B站视频,上学吧答案获取等众多功能聚合 长期更新,放心使用 // @namespace https://www.wandhi.com/ // @version 4.2.36 // @homepage https://tools.wandhi.com/scripts // @supportURL https://wiki.wandhi.com/ // @description 功能介绍:1、Vip视频解析;2、一站式音乐搜索解决方案;3、bilibili视频封面获取;4、bilibili视频下载;5、上学吧答案查询(接口偶尔抽风);6、商品历史价格展示(一次性告别虚假降价);7、优惠券查询 // @author MaxZhang // @icon https://www.wandhi.com//favicon.ico // @include *://m.youku.com/v* // @include *://m.youku.com/a* // @include *://v.youku.com/v_* // @include *://*.iqiyi.com/v_* // @include *://*.iqiyi.com/w_* // @include *://*.iqiyi.com/a_* // @include *://*.iqiyi.com/adv* // @include *.iq.com/play/* // @include *://*.le.com/ptv/vplay/* // @include *v.qq.com/x/cover/* // @include *v.qq.com/x/page/* // @include *v.qq.com/*play* // @include *v.qq.com/cover* // @include *://*.tudou.com/listplay/* // @include *://*.tudou.com/albumplay/* // @include *://*.tudou.com/programs/view/* // @include *://*.tudou.com/v* // @include *://*.mgtv.com/b/* // @include *://film.sohu.com/album/* // @include *://tv.sohu.com/v/* // @include *://*.acfun.cn/v/* // @include *://*.bilibili.com/video/* // @include *://*.bilibili.com/anime/* // @include *://*.bilibili.com/bangumi/play/* // @include *://*.pptv.com/show/* // @include *://*.baofeng.com/play/* // @include *://*.wasu.cn/Play/show* // @include *://v.yinyuetai.com/video/* // @include *://v.yinyuetai.com/playlist/* // @include *://*.wasu.cn/Play/show/* // @include *://music.taihe.com/song* // @include *://item.taobao.com/* // @include *://s.taobao.com/search* // @include *://list.tmall.com/search_product.htm* // @include *://detail.tmall.com/* // @include *://chaoshi.detail.tmall.com/* // @include *://detail.tmall.hk/* // @include *://item.jd.com/* // @include *://item.jd.hk/* // @include *://detail.vip.com/detail-* // @include *://product.suning.com/* // @include *://music.163.com/song* // @include *://music.163.com/m/song* // @include *://y.qq.com/* // @include *://*.kugou.com/* // @include *://*.kuwo.cn/* // @include *://*.xiami.com/* // @include *://music.taihe.com/* // @include *://*.1ting.com/player* // @include *://www.qingting.fm/* // @include *://www.lizhi.fm/* // @include *://music.migu.cn/* // @include *://www.shangxueba.com/ask/*.html // @include *://www.ximalaya.com/* // @include *://www.shangxueba.com/ask/*.html // @include *://pan.baidu.com/disk/home* // @include *://yun.baidu.com/disk/home* // @include *://pan.baidu.com/s/* // @include *://yun.baidu.com/s/* // @include *://pan.baidu.com/share/link* // @include *://yun.baidu.com/share/link* // @exclude *://*.wandhi.com/* // @require https://lib.baomitu.com/jquery/1.12.4/jquery.min.js // @require https://cdn.jsdelivr.net/npm/sweetalert2@11 // @require https://lib.baomitu.com/echarts/4.6.0/echarts.min.js // @require https://lib.baomitu.com/layer/2.3/layer.js // @require https://lib.baomitu.com/reflect-metadata/0.1.13/Reflect.min.js // @require https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js // @require https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js // @require https://cdn.jsdelivr.net/npm/qrcode@1.4.4/build/qrcode.min.js // @require https://cdn.jsdelivr.net/npm/crypto-js@4.0.0/crypto-js.js // @license MIT // @grant GM_setClipboard // @run-at document-end // @connect shangxueba365.com // @connect api.wandhi.com // @connect cdn.jsdelivr.net // @connect tool.manmanbuy.com // @connect xbeibeix.com // @connect gwdang.com // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_info // @grant GM.addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_notification // @grant GM_openInTab // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @antifeature referral-link 此提示为GreasyFork代码规范要求含有查券功能的脚本必须添加,实际使用无任何强制跳转,代码可查,请知悉。 // @downloadURL none // ==/UserScript== !function(global, factory) { "object" == typeof exports && "undefined" != typeof module ? factory(require("vue"), require("reflect-metadata"), require("sweetalert2"), require("crypto-js")) : "function" == typeof define && define.amd ? define([ "vue", "reflect-metadata", "sweetalert2", "crypto-js" ], factory) : factory((global = "undefined" != typeof globalThis ? globalThis : global || self).Vue, null, global.Swal, global.CryptoJS); }(this, (function(Vue, reflectMetadata, Swal, CryptoJS) { "use strict"; function _interopDefaultLegacy(e) { return e && "object" == typeof e && "default" in e ? e : { default: e }; } var Vue__default = _interopDefaultLegacy(Vue), Swal__default = _interopDefaultLegacy(Swal), CryptoJS__default = _interopDefaultLegacy(CryptoJS), extendStatics = function(d, b) { return (extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) { d.__proto__ = b; } || function(d, b) { for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]); })(d, b); }; function __extends(d, b) { function __() { this.constructor = d; } extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __); } function __decorate(decorators, target, key, desc) { var d, c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc; if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); return c > 3 && r && Object.defineProperty(target, key, r), r; } function __metadata(metadataKey, metadataValue) { if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(metadataKey, metadataValue); } function __awaiter(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : function adopt(value) { return value instanceof P ? value : new P((function(resolve) { resolve(value); })); }(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); } function __generator(thisArg, body) { var f, y, t, g, _ = { label: 0, sent: function() { if (1 & t[0]) throw t[1]; return t[1]; }, trys: [], ops: [] }; return g = { next: verb(0), throw: verb(1), return: verb(2) }, "function" == typeof Symbol && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return function step(op) { if (f) throw new TypeError("Generator is already executing."); for (;_; ) try { if (f = 1, y && (t = 2 & op[0] ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; switch (y = 0, t && (op = [ 2 & op[0], t.value ]), op[0]) { case 0: case 1: t = op; break; case 4: return _.label++, { value: op[1], done: !1 }; case 5: _.label++, y = op[1], op = [ 0 ]; continue; case 7: op = _.ops.pop(), _.trys.pop(); continue; default: if (!(t = _.trys, (t = t.length > 0 && t[t.length - 1]) || 6 !== op[0] && 2 !== op[0])) { _ = 0; continue; } if (3 === op[0] && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (6 === op[0] && _.label < t[1]) { _.label = t[1], t = op; break; } if (t && _.label < t[2]) { _.label = t[2], _.ops.push(op); break; } t[2] && _.ops.pop(), _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ], y = 0; } finally { f = t = 0; } if (5 & op[0]) throw op[1]; return { value: op[0] ? op[1] : void 0, done: !0 }; }([ n, v ]); }; } } var update_key = "isUpdate", Min = 60, Hour = 60 * Min, B1 = "YmVpYmVpZG91eXUxMjM0NQ==", B2 = "YmVpYmVpMTIzNDU2Nzg5MA==", Logger = function() { function Logger() {} return Logger.log = function(msg, level) {}, Logger.debug = function(msg) { this.log(msg, LogLevel.debug); }, Logger.info = function(msg) { this.log(msg, LogLevel.info); }, Logger.warn = function(msg) { this.log(msg, LogLevel.warn); }, Logger.error = function(msg) { this.log(msg, LogLevel.error); }, Logger; }(), LogLevel; !function(LogLevel) { LogLevel[LogLevel.debug = 0] = "debug", LogLevel[LogLevel.info = 1] = "info", LogLevel[LogLevel.warn = 2] = "warn", LogLevel[LogLevel.error = 3] = "error"; }(LogLevel || (LogLevel = {})); var Config = function() { function Config() {} return Object.defineProperty(Config, "env", { get: function() { return GM_info; }, enumerable: !1, configurable: !0 }), Config.get = function(key, defaultValue) { void 0 === defaultValue && (defaultValue = ""); var objStr = GM_getValue(this.encode(key), defaultValue); if (objStr) { var obj = JSON.parse(objStr); if (-1 == obj.exp || obj.exp > (new Date).getTime()) return Logger.info("cache true"), obj.value; } return Logger.info("cache false"), defaultValue; }, Config.set = function(key, v, exp) { void 0 === exp && (exp = -1); var obj = { key: key, value: v, exp: -1 == exp ? exp : (new Date).getTime() + 1e3 * exp }; GM_setValue(this.encode(key), JSON.stringify(obj)); }, Config.clear = function(key) { this.set(key, null, -10); }, Config.decode = function(str) { return atob(str); }, Config.encode = function(str) { return btoa(str); }, Config; }(), History = function History() { this.max = 0, this.price_detail = []; }, PriceDetail = function PriceDetail() {}, ListPriceItem = function ListPriceItem() {}, BrowerType; !function(BrowerType) { BrowerType[BrowerType.Edge = 0] = "Edge", BrowerType[BrowerType.Edg = 1] = "Edg", BrowerType[BrowerType.Chrome = 2] = "Chrome", BrowerType[BrowerType.Firefox = 3] = "Firefox", BrowerType[BrowerType.Safiri = 4] = "Safiri", BrowerType[BrowerType.Se360 = 5] = "Se360", BrowerType[BrowerType.Ie2345 = 6] = "Ie2345", BrowerType[BrowerType.Baidu = 7] = "Baidu", BrowerType[BrowerType.Liebao = 8] = "Liebao", BrowerType[BrowerType.UC = 9] = "UC", BrowerType[BrowerType.QQ = 10] = "QQ", BrowerType[BrowerType.Sogou = 11] = "Sogou", BrowerType[BrowerType.Opera = 12] = "Opera", BrowerType[BrowerType.Maxthon = 13] = "Maxthon"; }(BrowerType || (BrowerType = {})); var Core = function() { function Core() { this.url = this.currentUrl(); } return Core.appendTo = function(selecter, html) { $(selecter).append(html); }, Core.lazyload = function(callback, time) { void 0 === time && (time = 5), setTimeout((function() { callback(); }), 1e3 * time); }, Core.autoLazyload = function(is_ok, callback, time) { void 0 === time && (time = 5), is_ok() ? callback() : setTimeout((function() { Core.autoLazyload(is_ok, callback, time); }), 1e3 * time); }, Core.prototype.background = function(callback, time) { void 0 === time && (time = 5), setInterval((function() { callback(); }), 1e3 * time); }, Object.defineProperty(Core, "head", { get: function() { return unsafeWindow.window.document.head; }, enumerable: !1, configurable: !0 }), Core.isNumber = function(a) { return !Array.isArray(a) && a - parseFloat(a) >= 0; }, Core.addUrl = function(key, url) { GM_setValue(key, url); }, Core.openUrl = function(key) { this.open(GM_getValue(key)); }, Core.prototype.getPar = function(option, url) { void 0 === url && (url = window.location.search); var v = url.match(new RegExp("[?&]" + option + "=([^&]+)", "i")); return null == v || v.length < 1 ? "" : v[1]; }, Core.appendCss = function(url) { var linkCSS = document.createElement("link"); linkCSS.type = "text/css", linkCSS.rel = "stylesheet", linkCSS.href = url, Core.head.appendChild(linkCSS); }, Core.appendCssContent = function(content) { var Style = document.createElement("style"); Style.innerHTML = content, Core.head.appendChild(Style); }, Core.prototype.bodyAppendCss = function(url) { $("body").append($('')); }, Core.bodyAppend = function(html) { $("body").append(html); }, Core.appendJs = function(url) { var linkScript = document.createElement("script"); linkScript.type = "text/javascript", linkScript.src = url, this.head.appendChild(linkScript); }, Core.prototype.bodyAppendJs = function(url) { $("body").append($('