在您安装前,Greasy Fork 希望您知道此脚本包含可能不受欢迎的功能,也许会帮助脚本作者获利,而不能给你带来任何收益。
作者从这份脚本获得佣金,例如透过改写链接或提供优惠券代码以包含推荐或附属代码。
脚本作者的说明:
此提示为GreasyFork代码规范要求含有查券功能的脚本必须添加,实际使用无任何强制跳转,代码可查,请知悉。
🔥🔥🔥全网多功能工具箱,完全免费;各大视频网站去广告,免费观看,包括优酷、爱奇艺、乐视、腾讯视频等;网易云音乐、qq音乐、酷狗、酷我等音乐网站免费在线免客户端试听下载;VIP文库免费复制下载;短视频网站包括抖音等免水印下载;一键领取【淘宝】,【天猫】,【京东】隐藏优惠券,购物比价,查看商品历史价格,助您购物省钱🔥🔥🔥
目前为
// ==UserScript== // @name 🛠️多功能工具箱,全网VIP视频去广告,免费观看;全网会员音乐免费下载;文库复制、下载;短视频无水印下载;免费领取淘宝、天猫、京东隐藏优惠券、查询历史价格;长期更新,放心下载|更多功能持续更新中 // @namespace https://www.ergirl.com // @version 1.1.12 // @description 🔥🔥🔥全网多功能工具箱,完全免费;各大视频网站去广告,免费观看,包括优酷、爱奇艺、乐视、腾讯视频等;网易云音乐、qq音乐、酷狗、酷我等音乐网站免费在线免客户端试听下载;VIP文库免费复制下载;短视频网站包括抖音等免水印下载;一键领取【淘宝】,【天猫】,【京东】隐藏优惠券,购物比价,查看商品历史价格,助您购物省钱🔥🔥🔥 // @author jares chiang // @match *://*.youku.com/* // @match *://*.iqiyi.com/* // @match *://*.le.com/* // @match *://v.qq.com/* // @match *://music.163.com/* // @match *://y.qq.com/* // @match *://*.kugou.com/* // @match *://*.kuwo.cn/* // @match *://*.douyin.com/* // @match *://wenku.baidu.com/* // @match *://*.tmall.com/* // @match *://*.taobao.com/* // @match *://*.tmall.hk/* // @match *://*.jd.com/* // @match *://*.jd.hk/* // @exclude *://passport.jd.com/* // @exclude *://uland.taobao.com/* // @license MIT // @grant GM_download // @grant GM_addStyle // @grant GM_xmlhttpRequest // @connect api.ergirl.com // @run-at document-start // @require https://cdn.bootcdn.net/ajax/libs/jquery/1.6.3/jquery.js // @require https://cdn.bootcdn.net/ajax/libs/echarts/5.1.1/echarts.js // @require https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.min.js // @require https://cdn.bootcdn.net/ajax/libs/Swiper/5.4.5/js/swiper.min.js // @require https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcode.min.js // basic // @require https://greasyfork.org/scripts/441330-%E5%85%AC%E5%85%B1%E5%BA%93js/code/%E5%85%AC%E5%85%B1%E5%BA%93js.js?version=1049610 // @require https://greasyfork.org/scripts/441331-md5/code/md5.js?version=1026891 // ttList // ttDetail // ttTop // @require https://greasyfork.org/scripts/441333-%E6%B7%98%E5%AE%9D%E5%A4%A9%E7%8C%AB%E8%AF%A6%E6%83%85%E5%A4%B4%E9%83%A8%E6%8E%A8%E8%8D%90js/code/%E6%B7%98%E5%AE%9D%E5%A4%A9%E7%8C%AB%E8%AF%A6%E6%83%85%E5%A4%B4%E9%83%A8%E6%8E%A8%E8%8D%90js.js?version=1026914 // jdHome // @require https://greasyfork.org/scripts/441334-%E4%BA%AC%E4%B8%9C%E9%A6%96%E9%A1%B5js/code/%E4%BA%AC%E4%B8%9C%E9%A6%96%E9%A1%B5js.js?version=1079218 // jdList // @require https://greasyfork.org/scripts/441335-%E4%BA%AC%E4%B8%9C%E5%88%97%E8%A1%A8js/code/%E4%BA%AC%E4%B8%9C%E5%88%97%E8%A1%A8js.js?version=1079215 // jdDetail // @require https://greasyfork.org/scripts/441336-%E4%BA%AC%E4%B8%9C%E8%AF%A6%E6%83%85js/code/%E4%BA%AC%E4%B8%9C%E8%AF%A6%E6%83%85js.js?version=1153213 // jdTopRec // @antifeature referral-link 此提示为GreasyFork代码规范要求含有查券功能的脚本必须添加,实际使用无任何强制跳转,代码可查,请知悉。 // ==/UserScript== ;(function () { ;('use strict') /** * @description: 动态创建播放路径按钮 * @return {*} */ class CreatPlayerBtn { constructor(obj) { this.playList = obj.playList this.replaceNode = obj.replaceNode } // 创建DOM init() { let that = this let playerBtnBox = document.createElement('div') playerBtnBox.className = 'player-btn-box' getElement('body').then((res) => { document.body.appendChild(playerBtnBox) }) let ul = document.createElement('ul') playerBtnBox.appendChild(ul) for (let i = 0; i < this.playList.length; i++) { let item = this.playList[i] let li = document.createElement('li') li.setAttribute('data-item', JSON.stringify(item)) li.innerHTML = item.name ul.appendChild(li) } let tips = document.createElement('div') tips.className = 'tips' tips.innerHTML = '提示:所有资源来自互联网,如有侵权告知删除!' playerBtnBox.appendChild(tips) playerBtnBox.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement that.btnClick(target) }) } // 动态创建节点点击事件; btnClick(node) { let obj = JSON.parse(node.getAttribute('data-item')) // 播放链接 let playSrc = obj.url + window.location.href // 替换播放节点 let playNode = document.querySelector(this.replaceNode) let play = new CreatPlayer({ playSrc: playSrc, playNode: playNode, }) play.init() } } /** * @description: 创建播放器替换原来播放器组件 * @return {*} */ class CreatPlayer { constructor(obj) { this.playSrc = obj.playSrc this.playNode = obj.playNode } init() { this.creatPlayerBox() } // 创建播放器 creatPlayerBox() { this.playNode.innerHTML = '' this.playNode.appendChild(this.creatElement()) } // 创建iframe creatElement() { let iframe = document.createElement('iframe') iframe.src = this.playSrc iframe.style.width = '100%' iframe.style.height = '100%' iframe.style.border = '0' iframe.id = 'player-box-iframe' return iframe } } // 视频 function videoInit() { // 播放路径 let playLineList = [ { name: '纯净1', url: 'https://z1.m1907.top/?jx=' }, { name: 'B站1', url: 'https://jx.bozrc.com:4433/player/?url=' }, { name: '爱豆', url: 'https://jx.aidouer.net/?url=' }, { name: 'CHok', url: 'https://www.gai4.com/?url=' }, { name: 'OK', url: 'https://okjx.cc/?url=' }, { name: 'RDHK', url: 'https://jx.rdhk.net/?v=' }, { name: '人人迷', url: 'https://jx.blbo.cc:4433/?url=' }, { name: '思古3', url: 'https://jsap.attakids.com/?url=' }, { name: '听乐', url: 'https://jx.dj6u.com/?url=' }, { name: '分享网', url: 'https://www.ckmov.com/?url=' }, { name: '虾米视频', url: 'https://jx.xmflv.com/?url=' }, ] let platformList = [ { host: 'v.youku.com', pathname: 'v_show', element: '#player', numNode: '.anthology-content', }, { host: 'www.iqiyi.com', pathname: 'v_', element: '#flashbox', numNode: '.qy-episode-num', }, { host: 'www.le.com', pathname: 'vplay', element: '#le_playbox', numNode: '.juji_grid', }, { host: 'v.qq.com', pathname: 'cover', element: '.container-player', numNode: '.episode-list-rect', }, ] platformList.forEach((item) => { if (window.location.host === item.host) { if (window.location.pathname.indexOf(item.pathname) > -1) { // 创建播放器 let playerBtn = new CreatPlayerBtn({ playList: playLineList, replaceNode: item.element, }) // 播放按钮初始化 playerBtn.init() } getElement(item.numNode).then((res) => { res.onclick = function () { setTimeout(() => { location.reload() }, 1000) } }) } }) } // 音乐 function musicInit() { setTimeout(() => { getMusicName() }, 2000) } // 获取音乐名称 function getMusicName() { let name = '' // let platformList = [ // { // host: 'music.163.com', // href: 'song', // element: '.f-ff2', // type: 'innerHTML', // }, // { // host: 'y.qq.com', // href: 'songDetail', // element: '.data__name_txt', // type: 'title', // }, // { // host: 'www.kugou.com', // href: 'song', // element: '.audioName', // type: 'title', // }, // { // host: 'kuwo.cn', // href: 'play_detail', // element: '#songinfo-name', // type: 'value', // }, // ] // for (let i = 0; i < platformList.length; i++) { // let item = platformList[i] // if (window.location.host === item.host) { // if (window.location.href.indexOf(item.href) > -1) { // let ele = document.querySelector(item.element) // if (ele) { // name = ele.type // } // } // } // } // getMusicList(name) // 网易云音乐 if ( window.location.host === 'music.163.com' && window.location.href.indexOf('song') > -1 ) { let ele = document.querySelector('.f-ff2') name = ele.innerHTML } else if ( // qq音乐 window.location.host === 'y.qq.com' && window.location.href.indexOf('songDetail') > -1 ) { let ele = document.querySelector('.data__name_txt') name = ele.title } else if ( // 酷狗 window.location.host === 'www.kugou.com' && window.location.href.indexOf('song') > -1 ) { let ele = document.querySelector('.audioName') name = ele.title } else if ( // 酷我 window.location.host === 'kuwo.cn' && window.location.href.indexOf('play_detail') > -1 ) { let ele = document.querySelector('#songinfo-name') name = ele.value } else { return false } getMusicList(name) } // 获取音乐列表 function getMusicList(name) { let pageNum = 0 let pageSize = 10 let details = { method: 'GET', timeout: 10000, url: 'https://api.ergirl.com/getMusic?name=' + name + '&pageNum=' + pageNum + '&pageSize=' + pageSize, responseType: 'json', onload: function (res) { if (res.status === 200) { let data = eval('(' + res.responseText + ')') let arr = data.abslist let newArr = [] arr.forEach((item) => { let o = { id: item.MUSICRID, name: item.NAME, artist: item.ARTIST, album: item.ALBUM, img: 'https://img2.kuwo.cn/star/albumcover/' + item.web_albumpic_short, } newArr.push(o) }) let params = { playList: newArr, } let music = new CreateMusicPlayer(params) music.init() } else { console.error(res) } }, ontimeout: (res) => { console.error(res) }, onerror: (res) => { console.error(res) }, } GM_xmlhttpRequest(details) } // 音乐类 class CreateMusicPlayer { constructor(option) { this.audio = null this.playList = option.playList } init() { this.creatElement() } // 创建div creatElement() { let that = this let ele = document.createElement('div') ele.className = 'music-player' let ul = document.createElement('ul') ele.appendChild(ul) for (let i = 0; i < this.playList.length; i++) { // 名称 let item = this.playList[i] let li = document.createElement('li') let nameEle = document.createElement('span') nameEle.className = 'name' nameEle.innerHTML = item.name + ' - ' + item.artist // 暂停 let pauseEle = document.createElement('span') pauseEle.className = 'pause' pauseEle.setAttribute('data-id', item.id) pauseEle.innerHTML = '暂停' pauseEle.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement that.audio.pause() li.classList.remove('active') }) // 播放 let playEle = document.createElement('span') playEle.className = 'play' playEle.setAttribute('data-id', item.id) playEle.innerHTML = '试听' playEle.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement let id = target.getAttribute('data-id') let liList = document .querySelector('.music-player') .querySelectorAll('li') Array.prototype.forEach.call(liList, (el) => { el.classList.remove('active') }) if (that.audio) { that.audio.pause() } li.classList.add('active') that.play(id) }) // 下载 let downEle = document.createElement('span') downEle.className = 'down' downEle.setAttribute('data-id', item.id) downEle.innerHTML = '下载' downEle.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement let id = target.getAttribute('data-id') that.download(id, item.name) }) li.appendChild(nameEle) li.appendChild(pauseEle) li.appendChild(playEle) li.appendChild(downEle) ul.appendChild(li) } let tips = document.createElement('div') tips.className = 'tips' tips.innerHTML = '提示:所有资源来自互联网,如有侵权告知删除!' ele.appendChild(tips) document.body.appendChild(ele) } getUrl(id) { let url = 'https://api.ergirl.com/getMusicUrl' return new Promise(function (resolve, reject) { let details = { method: 'GET', timeout: 10000, url: url + '?id=' + id, responseType: 'json', onload: function (res) { if (res.status === 200) { resolve(res.response) } else { console.error(res) } }, ontimeout: (res) => { console.error(res) }, onerror: (res) => { console.error(res) }, } GM_xmlhttpRequest(details) }) } async play(id) { const { url } = await this.getUrl(id) if (this.audio) { this.audio.pause() } this.audio = new Audio() this.audio.src = url this.audio.play() } pause() { this.audio.pause() } async download(id, name) { const { url } = await this.getUrl(id) GM_download(url, name + '.mp3') } } // 短视频 function shortVideoInit() { if (window.location.host === 'www.douyin.com') { if (window.location.href.indexOf('video') > -1) { let div = document.createElement('div') div.innerHTML = '下载' div.className = 'dy-down-btn' div.addEventListener('click', function (e) { let id = getDyId() getDyUrl(id) }) document.querySelector('.xg-right-grid').appendChild(div) } else { dyAddBtn() scrollListener(() => { dyAddBtn() }) } } } // 添加下载按钮 function dyAddBtn() { // 移除下载按钮 var oWrap = document.querySelector('.dy-down-btn') if (oWrap) { oWrap.remove() } let node = document.querySelector('.swiper-slide-active') let id = node .querySelector('.video-info-detail') .getAttribute('data-e2e-aweme-id') let div = document.createElement('div') div.innerHTML = '下载' div.className = 'dy-down-btn' div.setAttribute('data-id', id) div.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement let id = target.getAttribute('data-id') getDyUrl(id) }) node.querySelector('.xg-right-grid').appendChild(div) } // 获取抖音ID function getDyId() { var href = window.location.href var index = href.lastIndexOf('/') id = href.substring(index + 1, href.length) return id } // 获取链接 function getDyUrl(id) { id = id || getDyId() let url = 'https://api.ergirl.com/getDYInfo/web/api/v2/aweme/iteminfo/' let details = { method: 'GET', timeout: 10000, url: url + '?item_ids=' + id, responseType: 'json', onload: function (res) { if (res.status === 200) { let data = res.response let vid = data.item_list[0].video.vid let url = 'https://aweme.snssdk.com/aweme/v1/play/?video_id=' + vid let title = data.item_list[0].share_info.share_title GM_download(url, title + '.mp4') } else { console.error(res) } }, ontimeout: (res) => { console.error(res) }, onerror: (res) => { console.error(res) }, } GM_xmlhttpRequest(details) } // 文库 class Library { constructor() { this.arr = [] this.html = '' } init() { let that = this document.addEventListener('DOMContentLoaded', () => { const originObj = { context2DPrototype: unsafeWindow.document .createElement('canvas') .getContext('2d').__proto__, } document.createElement = new Proxy(document.createElement, { apply: function (target, thisArg, argumentsList) { const ele = Reflect.apply(target, thisArg, argumentsList) const data = { canvas: ele, data: [], } if (argumentsList[0] === 'canvas') { ele.getContext('2d').fillText = function (...args) { data.data.push(args) originObj.context2DPrototype.fillText.apply(this, args) } that.arr.push(data) } return ele }, }) that.createCopy() }) } createCopy() { let that = this let copy = document.createElement('div') copy.innerHTML = '复制' copy.class = 'copy' copy.style.position = 'absolute' copy.style.zIndex = '99999' copy.style.top = '50%' copy.style.padding = '10px' copy.style.backgroundColor = '#ccc' copy.style.cursor = 'pointer' document.body.appendChild(copy) copy.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement let copyBox = document.querySelector('.copy-box') if (copyBox) { copyBox.remove() } that.createHtml() that.createBox() }) } createBox() { let that = this let box = document.createElement('div') box.innerHTML = '' box.className = 'copy-box' box.style.width = '60%' box.style.height = '600px' box.style.backgroundColor = '#fff' box.style.position = 'absolute' box.style.zIndex = '99999' box.style.top = '50%' box.style.left = '50%' box.style.transform = 'translate(-50%,-50%)' box.style.boxShadow = '0 0 10px #ccc' box.innerHTML = '<ul style="height: 100%;overflow: auto;position: relative;">' + that.html + '</ul>' let close = document.createElement('span') close.style.position = 'absolute' close.style.top = '10px' close.style.right = '30px' close.style.zIndex = '999999' close.style.cursor = 'pointer' close.innerHTML = '关闭' close.addEventListener('click', function (e) { // 兼容性处理 var event = e || window.event var target = event.target || event.srcElement that.closeBox() }) box.appendChild(close) document.body.appendChild(box) } closeBox() { let that = this that.arr = [] let copyBox = document.querySelector('.copy-box') copyBox.remove() } createHtml() { let that = this that.html = '' let reader = document.querySelector('#reader-container') if (reader) { that.html = reader.innerHTML } else { let arr = that.arr.filter((item) => item.canvas.id) arr.forEach((item, index) => { item.data.forEach((child, idx) => { that.html += '<p style="position:absolute;left: ' + child[1] + 'px;top:' + child[2] + 'px;">' + child[0] + '</p>' }) }) } } } function libraryInit() { if (window.location.host === 'wenku.baidu.com') { if (window.location.pathname.indexOf('/view') > -1) { let library = new Library() library.init() window.addEventListener('pushState', function (e) { library.closeBox() }) } } } musicInit() setTimeout(() => { shortVideoInit() }, 2000) videoInit() libraryInit() // --------------------列表功能开始-------------------- /** * @description: 查询列表优惠券 * @param {*} appkey * @param {*} sid * @param {*} pid * @param {*} num_iid * @param {*} signurl * @param {*} type * @return {*} */ class TList { constructor(options) { this.params = { appkey: options.appkey, sid: options.sid, pid: options.pid, num_iid: options.num_iid, signurl: options.signurl, type: options.type, } } // 初始化 init() { setTimeout(() => { this.getData() }, 1000) } // 获取数据 getData() { let _this = this let list = $('.J_MouserOnverReq') if (_this.params.type === 'taobao') { list = $('.J_MouserOnverReq') list.each(function () { let that = $(this) that.css({ position: 'relative' }) let params = { appkey: _this.params.appkey, tao_id: $(this).find('a').attr('data-nid'), // 接口更换了taoid } dtd( 'https://api.zhetaoke.com:10002/api/api_detail.ashx', params, (res) => { let tao_id = JSON.parse(res).content[0].tao_id _this.params.num_iid = tao_id let url = 'https://api.zhetaoke.com:10001/api/open_gaoyongzhuanlian.ashx' dtd(url, _this.params, (res) => { _this.addEle(that, res) }) } ) }) } else if (_this.params.type === 'tmall') { list = $('.product') list.each(function () { let that = $(this) let params = { appkey: _this.params.appkey, tao_id: $(this).attr('data-id'), // 接口更换了taoid } dtd( 'https://api.zhetaoke.com:10002/api/api_detail.ashx', params, (res) => { let tao_id = JSON.parse(res).content[0].tao_id _this.params.num_iid = tao_id let url = 'https://api.zhetaoke.com:10001/api/open_gaoyongzhuanlian.ashx' dtd(url, _this.params, (res) => { _this.addEle(that, res) }) } ) }) } } // 插入元素 addEle(that, data) { let obj = JSON.parse(data) if (obj.tbk_privilege_get_response) { let result = obj.tbk_privilege_get_response.result if (result.data.coupon_info) { let html = "<div class='jar-list-coupon'><p><a target='_blank' href=https://api.ergirl.com/jump.html?url=" + result.data.shorturl + '>' + result.data.coupon_info + '</a></p></div>' that.append(html) } } else { // console.log("无"); } } } /** * @description: 列表头部推荐 * @param {*} type tb tm * @param {*} data 数据源 * @return {*} */ class ListRec { constructor(options) { this.type = options.type this.data = options.data } // 初始化 init() { this.addEle(this.data) } // 淘宝添加元素 addEle(data) { let that = this let list = data let html = '' let html1 = '<div class="m-itemlist jar-list-rec">' + '<div class="grid g-clearfix">' + '<div class="swiper-container">' + '<div class="swiper-wrapper">' let html3 = '</div><div class="swiper-button-prev" style="width:45px;height:100px;color: #f40;margin-top:-50px;background:rgba(0,0,0,0.4)"></div>' + '<div class="swiper-button-next" style="width:45px;height:100px;color: #f40;margin-top:-50px;margin-right: 20px;background:rgba(0,0,0,0.4);"></div>' + '</div></div></div>' list.forEach((item) => { turnUrl(item.tao_id).then((res) => { that.recChangeUrl(res) }) if (that.type === 'taobao') { let html2 = '<div class="swiper-slide">' + '<div class="items" data-id="' + item.tao_id + '">' + '<div class="item J_MouserOnverReq" style="height: 365px;">' + '<div class="pic-box J_MouseEneterLeave J_PicBox">' + '<div class="pic-box-inner">' + '<div class="pic">' + '<a class="pic-link J_ClickStat J_ItemPicA" data-nid="' + item.tao_id + '" href="' + item.item_url + '" target="_blank">' + '<img class="J_ItemPic img" src="' + item.pict_url + '" alt="' + item.tao_title + '">' + '</a></div></div></div>' + '<div class="ctx-box J_MouseEneterLeave J_IconMoreNew">' + '<div class="row row-1 g-clearfix">' + '<div class="price g_price g_price-highlight">' + '<span>¥</span><strong>' + item.quanhou_jiage + '</strong>' + '</div>' + '<div class="deal-cnt">' + item.volume + '人付款</div>' + '</div>' + '<div class="row row-2 title">' + '<a class="J_ClickStat" href="' + item.item_url + '" target="_blank">' + item.tao_title + '</a></div></div></div></div></div>' html += html2 } else if (that.type === 'tmall') { let html2 = '<div class="swiper-slide">' + '<div class="items product" data-id="' + item.tao_id + '" style="width:100%;height:315px;">' + '<div class="product-iWrap">' + '<div class="productImg-wrap">' + '<a href="' + item.item_url + '" class="productImg" target="_blank">' + '<img src="' + item.pict_url + '">' + '</a>' + '</div>' + '<p class="productPrice">' + '<em title="' + item.quanhou_jiage + '"><b>¥</b>' + item.quanhou_jiage + '</em>' + '</p>' + '<p class="productTitle">' + '<a href="' + item.item_url + '">' + item.tao_title + '</a>' + '</p>' + '</div>' + '</div>' + '</div>' html += html2 } }) if (this.type === 'taobao') { $('#mainsrp-related').append(html1 + html + html3) } else if (this.type === 'tmall') { $('#J_NavAttrsForm').append(html1 + html + html3) } this.swiperInit() } // 淘宝推荐天猫推荐插入优惠券 recChangeUrl(data) { let obj = data let node = $('.jar-list-rec .items[data-id="' + obj.item_id + '"]') if (obj.coupon_info) { let html = "<div class='jar-list-coupon' style='right:22px;bottom:0;'><p><a target='_blank' href=https://api.ergirl.com/jump.html?url=" + obj.shorturl + '>' + obj.coupon_info + '</a></p></div>' node.append(html) } } // 轮播图初始化 swiperInit() { let num = 0 if (this.type === 'taobao') { num = 4 } else if (this.type === 'tmall') { num = 5 } var mySwiper = new Swiper('.swiper-container', { slidesPerView: num, slidesPerGroup: num, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, }) } } // 列表初始化 initTlist() /** * @description: 淘宝天猫列表初始化入口 * @return {*} */ function initTlist() { if (host.indexOf('taobao') > -1) { if (host.indexOf('item.taobao') === -1) { setTimeout(() => { let node = $('#mainsrp-itemlist')[0] || $('#listsrp-itemlist')[0] domAddEventListener(node, () => { let tList = new TList({ appkey: config.zhetaoke.appkey, sid: config.zhetaoke.sid, pid: config.zhetaoke.pid, num_iid: '', signurl: 4, type: 'taobao', }) tList.init() }) }, 3000) let tList = new TList({ appkey: config.zhetaoke.appkey, sid: config.zhetaoke.sid, pid: config.zhetaoke.pid, num_iid: '', signurl: 4, type: 'taobao', }) tList.init() } // 淘宝列表推荐 listRecInit('taobao') } else if (host.indexOf('tmall') > -1) { let tmList = new TList({ appkey: config.zhetaoke.appkey, sid: config.zhetaoke.sid, pid: config.zhetaoke.pid, num_iid: '', signurl: 4, type: 'tmall', }) tmList.init() // 天猫列表推荐 listRecInit('tmall') } } /** * @description: 淘宝天猫列表推荐初始化 * @param {*} type 类别 * @return {*} */ async function listRecInit(type) { let q = getQueryVariable('q') if (!q) { return false } let url = 'https://api.zhetaoke.com:10003/api/api_quanwang.ashx' let params = { appkey: config.zhetaoke.appkey, page: '1', page_size: '20', sort: 'sale_num_desc', q: q, youquan: '1', } if (type === 'tmall') { let qq = '' try { //utf-8 qq = decodeURI(q) } catch (err) { //gbk or 其他编码 let pro = new Promise(function (resolve, reject) { urldecode(q, 'gbk', function (str) { if (str) { resolve(str) } else { reject('') } }) }) qq = await pro } params.q = qq } dtd(url, params, (res) => { let listRec = new ListRec({ type: type, data: JSON.parse(res).content, }) listRec.init() }) } /** * @description: 详情 * @param {*} appkey * @param {*} sid * @param {*} pid * @param {*} num_iid * @param {*} signurl * @return {*} */ // --------------------列表功能结束-------------------- // --------------------详情功能开始-------------------- // 获取新ID class GetNewId { constructor(options) { this.id = '' } async getNewId() { let paramsDetail = { appkey: '52b273a5972949388ce7b57b84453aa4', tao_id: getQueryVariable('id'), // 接口更换了taoid } // 获取详情 拿coupon_id 判断 const urlDetail = new URL( 'https://api.zhetaoke.com:10002/api/api_detail.ashx' ) urlDetail.search = new URLSearchParams(paramsDetail).toString() let resDetail = await fetch(urlDetail) const resDetailContent = await resDetail.json() let objDetail = resDetailContent.content[0] let paramsList = { appkey: '52b273a5972949388ce7b57b84453aa4', page_size: 120, sort: 'new', tj: objDetail.user_type, yunfeixian: objDetail.yunfeixian, pinpai: objDetail.pinpai, q: objDetail.shop_title + objDetail.tao_title, } const urlList = new URL('https://api.zhetaoke.com:10001/api/api_all.ashx') urlList.search = new URLSearchParams(paramsList).toString() let resList = await fetch(urlList) const resListContent = await resList.json() let newArr = resListContent.content.filter((item) => { return item.coupon_id === objDetail.coupon_id }) if (newArr.length > 0) { this.id = newArr[0].tao_id } return this.id } } class Detail { constructor(options) { this.couParams = { appkey: options.appkey, sid: options.sid, pid: options.pid, num_iid: options.num_iid, signurl: options.signurl, } this.couParams.sign = makeSign(this.couParams) } // 获取淘宝天猫优惠券 getCoupon() { let that = this let url = 'https://api.zhetaoke.com:10001/api/open_gaoyongzhuanlian.ashx' let params = this.couParams dtd(url, params, (res) => { let data = JSON.parse(res) if (data.tbk_privilege_get_response) { that.addCoupon(res) } }) } // 插入基本元素 addBasic() { let html = '<div class="jar-detail-coupon">' + '<div class="jar-tab" >' + "<ul>" + '<li class="active">领券</li>' + "<li>相似比价</li>" + "<li>价格趋势</li>" + '</ul><span class="jar-show">隐藏</span>' + "</div >" + '<div class="jar-body">' + "<ul>" + "<li>" + '<div class="jar-body-coupon">' + '<div class="jar-body-coupon-top"></div>' + '<div class="clear"></div>' + '<div class="jar-body-coupon-right">温馨提示: <br><span><a href="https://www.ergirl.com" rel="noreferrer nofollow" target="_blank">扫码小程序查询更多优惠券</a><br></a>精选商品优惠券领取QQ群:<br><a rel="noreferrer nofollow" target="_blank" href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=KvfpLy5G2dkc1ug3RqLszwoQd7eyFGrk&authKey=o8nT3Aug3MR6oq0HbO2AmwrtwaTt5MQxJnOYbh9SDIo50wBVoYznE5GyHnUILx5T&noverify=0&group_code=858786643">858786643</a></span><img style="width: 118px;position: absolute;top: -10px;left:180px" src="https://api.ergirl.com/images/mp-code.jpg" />' + "</div>" + "</div>" + "</li>" + "<li>" + '<div class="jar-like-list">' + "</div> " + "</li>" + "<li>" + '<div class="jar-history">' + '<div id="historyChart" style="width: 468px; height: 200px;"></div>' + "</div>" + "</li>" + "</ul>" + "</div>" + "</div >"; if (host.indexOf('taobao') > -1) { // 插入淘宝 $('#J_juValid').before(html) } else if (host.indexOf('tmall') > -1) { // 插入天猫 if ($('.tb-action').length > 0) { $('.tb-action').before(html) } else if ($('.BasicContent--sku--6N_nw6c').length > 0) { $('.BasicContent--sku--6N_nw6c').before(html) } } $('.jar-detail-coupon .jar-tab li').click(function () { let index = $(this).index() $('.jar-detail-coupon .jar-tab li').removeClass('active') $(this).addClass('active') $('.jar-detail-coupon .jar-body li').hide() $('.jar-detail-coupon .jar-body li').eq(index).show() }) $('.jar-show').click(function () { if ($('.jar-show').html() == '隐藏') { $('.jar-show').html('展开') } else { $('.jar-show').html('隐藏') } $('.jar-detail-coupon .jar-body').toggle() }) } // 插入淘宝天猫优惠券 addCoupon(data) { let obj = JSON.parse(data) if (obj.tbk_privilege_get_response) { let result = obj.tbk_privilege_get_response.result let shortUrl = result.data.shorturl let jumpLink = ""; if (result.data.coupon_info) { jumpLink = '<a href="https://api.ergirl.com/jump.html?url=' + encodeURIComponent(shortUrl) + "&id=" + getQueryVariable("id"); } else { jumpLink = '<a href="https://api.ergirl.com/jump.html?&url=' + encodeURIComponent(result.data.coupon_click_url) + "&id=" + getQueryVariable("id"); } if (result.data.coupon_info) { let couponInfo = result.data.coupon_info let couponEndTime = result.data.coupon_end_time.substring(0, 10) let couponRemainCount = result.data.coupon_remain_count let html = '<div class="jar-body-coupon-left">' + couponInfo + '</div>' + '<div div class="jar-body-coupon-center">' + '<div>优惠券结束时间: <span>' + couponEndTime + '</span></div>' + '<div>优惠券剩余量: <span>' + couponRemainCount + '</span></div>' + '</div >' + '<div id="jar-qrcode" style="float:right;"></div>' + '<span style="color: #ff0036;text-align: center;position: absolute;right:10px;top:100px;font-weight:bold;"><p>淘宝、天猫、支付宝扫一扫</p><p>领取优惠券</p></span>' + '<div class="jar-button">' + jumpLink + '" target="_blank">点击领取</a></div>' $('.jar-body-coupon-top').append(html) var qrcode = new QRCode('jar-qrcode', { text: shortUrl, width: 500, height: 500, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H, }) } else { let html = '<div class="getAgain">' + '<div class="again-box">' + '<img src="https://gw.alicdn.com/tps/TB11KWxOVXXXXXHXXXXXXXXXXXX-190-150.png" alt="">' + '<p>正在查询...</p>' + '<p>随后将返回详情页</p>' + '</div>' + '</div>' + '<div class="jar-body-coupon-left">当前商品暂无优惠券</div>' + '<div div class="jar-body-coupon-center">' + '<div>优惠券结束时间: <span>0</span></div>' + '<div>优惠券剩余量: <span>0</span></div>' + '</div >' + '<div id="jar-qrcode" style="float:right;"></div>' + '<span style="color: #ff0036;text-align: center;position: absolute;right:10px;top:100px;font-weight:bold;"><p>淘宝、天猫、支付宝扫一扫</p><p>查看详情</p></span>' + '<div class="jar-button"><a href="https://api.ergirl.com/jump.html?url=' + shortUrl + '&id=' + getQueryVariable('id') + '" target="_blank">深度查询</a></div>' $('.jar-body-coupon-top').before(html) var qrcode = new QRCode('jar-qrcode', { text: shortUrl, width: 500, height: 500, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H, }) } } else { let html = '<div class="jar-body-coupon-left">当前商品暂无优惠券</div>' + '<div div class="jar-body-coupon-center">' + '<div>优惠券结束时间: <span>0</span></div>' + '<div>优惠券剩余量: <span>0</span></div>' + '</div >' $('.jar-body-coupon-top').before(html) } } } // 初始化详情 if (host.indexOf('item.taobao') > -1 || host.indexOf('detail.tmall') > -1) { let params = { appkey: '52b273a5972949388ce7b57b84453aa4', tao_id: getQueryVariable('id'), // 接口更换了taoid } let newId = new GetNewId() newId.getNewId().then((id) => { let detailParams = { appkey: '52b273a5972949388ce7b57b84453aa4', sid: '45532', pid: 'mm_55657354_2155900321_111019450222', num_iid: id, signurl: '4', } setTimeout(() => { let detail = new Detail(detailParams) detail.addBasic() detail.getCoupon() }, 1000) }) } /** * @description: 相似比价 * @param {*} appkey * @param {*} item_id * @param {*} page_size * @return {*} */ class Like { constructor(options) { this.likeParams = { appkey: options.appkey, item_id: options.item_id, page_size: 10, } } getLike() { let that = this let url = 'https://api.zhetaoke.com:10001/api/open_item_guess_like.ashx' let params = this.likeParams dtd(url, params, (res) => { that.addLike(res) }) } // 插入元素 addLike(data) { let list = JSON.parse(data).content list.forEach((item) => { let html = '<dl>' + '<dd><a href="' + item.item_url + '" target="_blank">' + '<div class="img">' + '<img src="' + item.pict_url + '" alt="">' + '</div>' + '<div class="infor" >' + '<div>价格: <span>' + item.quanhou_jiage + '</span></div>' + '<div class="jar-like-coupon">优惠券: <span>' + item.coupon_info_money + '</span></div>' + '<div>销量: <span>' + item.sellCount + '</span></div>' + '</div>' + '<div class="clear"></div>' + '<div class="title">' + item.tao_title + '</div>' + '</a></dd>' + '</dl>' $('.jar-like-list').append(html) }) } } let like = new Like({ appkey: '52b273a5972949388ce7b57b84453aa4', item_id: getQueryVariable('id'), page_size: 10, }) like.getLike() /** * @description: 获取历史记录 * @param {*} * @return {*} */ class History { constructor(options) { this.hisParams = { appKey: '5cfe247e623ce', version: 'v1.0.0', goodsId: options.id, } this.hisParams.sign = makeSign(this.hisParams) } // 获取数据 getHistory() { let that = this let url = 'https://openapi.dataoke.com/api/goods/price-trend' let params = this.hisParams dtd(url, params, (res) => { setTimeout(() => { that.addHistory(res) }, 1000) }) } // 插入历史数据 addHistory(res) { if (res.code === 0) { let arr = [] arr = res.data.historicalPrice let numArr = arr.map((item) => { return item.actualPrice }) let timeArr = arr.map((item) => { return timeFormat(item.date, 1) }) let obj = { time: timeArr, historyPrice: numArr, maxNum: getMaxMin(numArr)[0], minNum: getMaxMin(numArr)[1], } eachart(obj) } else { $('#historyChart').html('暂无历史数据') } } } /** * @description: 转链 * @param {*} id * @return {*} */ function turnUrl(id) { let params = { appkey: config.zhetaoke.appkey, sid: config.zhetaoke.sid, pid: config.zhetaoke.pid, signurl: 4, num_iid: id, } let url = 'https://api.zhetaoke.com:10001/api/open_gaoyongzhuanlian.ashx' return new Promise(function (resolve, reject) { dtd(url, params, (res) => { let data = JSON.parse(res) if (data.tbk_privilege_get_response) { resolve(data.tbk_privilege_get_response.result.data) } else { resolve({}) } }) }) } /** * @description: DOM监听 * @param {*} targetNode DOM节点 * @param {*} callback 回调函数 * @return {*} */ function domAddEventListener(targetNode, callback) { if (targetNode) { var observer = new MutationObserver(function (mutations) { callback() }) observer.observe(targetNode, { attributes: true, childList: true, }) } } // 历史记录 let newId = new GetNewId() newId.getNewId().then((id) => { let his = new History({ id: id }) if (host.indexOf('item.taobao') > -1 || host.indexOf('detail.tmall') > -1) { his.getHistory() } }) // 监听滚动 function scrollListener(handle) { //判断鼠标滚轮滚动方向 if (window.addEventListener) { //FF,火狐浏览器会识别该方法 window.addEventListener('DOMMouseScroll', wheel, false) } window.onmousewheel = document.onmousewheel = wheel //W3C //统一处理滚轮滚动事件 var throldHold = 200 //两次scroll事件触发之间最小的事件间隔 function wheel(event) { if (arguments.callee.timer) clearTimeout(arguments.callee.timer) arguments.callee.timer = setTimeout(function () { var delta = 0 if (!event) event = window.event if (event.wheelDelta) { //IE、chrome浏览器使用的是wheelDelta,且值为“正负120” delta = event.wheelDelta / 120 //因为IE、chrome等向下滚动是负值,FF是正值,为了处理一致性,在此取反处理 if (window.opera) delta = -delta } else if (event.detail) { //FF浏览器使用的是detail,其值为“正负3” delta = -event.detail / 3 } if (delta) { //上下滚动时的具体处理函数 handle(delta) } }, throldHold) } } // 延迟获取DOM节点 function getElement(node) { let pro = new Promise((resolve, reject) => { let timer = setInterval(() => { let ele = document.querySelector(node) if (ele) { resolve(ele) clearInterval(timer) } }, 1000) }) return pro } // 链接更换 const bindHistoryEvent = function (type) { const historyEvent = history[type] return function () { const newEvent = historyEvent.apply(this, arguments) //执行history函数 const e = new Event(type) //声明自定义事件 e.arguments = arguments window.dispatchEvent(e) //抛出事件 return newEvent //返回方法,用于重写history的方法 } } history.pushState = bindHistoryEvent('pushState') history.replaceState = bindHistoryEvent('replaceState') // 插入css let videolistCss = ` .player-btn-box { position:absolute; top: 20%; left: 20px; z-index: 999999; border-radius: 5px; background-color: #fff; } .player-btn-box ul { width: 250px; overflow:hidden; } .player-btn-box li{ font-size: 14px; width: 25%; height: 35px; color:#333; float:left; line-height: 35px; text-align:center; cursor: pointer; } .player-btn-box li:hover { color: #16e07a; } .player-btn-box .tips{ font-size: 12px; color: red; padding: 10px; box-sizing: border-box; } ` let musiclistCss = ` .music-player { position: fixed; top: 20%; left: 20px; z-index: 9999; padding: 20px; box-shadow: 0 0 10px #ccc; border-radius: 10px; background-color: #fff; } .music-player ul { overflow: hidden; } .music-player ul li { line-height: 35px } .music-player ul li .name { width: 400px; float: left; } .music-player ul li .pause { color: #31c27c; cursor: pointer; margin: 0 10px; display: none; } .music-player ul li .play { color: #31c27c; cursor: pointer; margin: 0 10px; } .music-player ul li .down { color: #00a9ff; cursor: pointer; margin: 0 10px; } .music-player ul .active .name { font-weight: bold; } .music-player ul .active .pause { display: inline; } .music-player ul .active .play { display: none; } .music-player .tips { font-size: 12px; color: red; } ` let dyCss = ` .dy-down-btn { font-size: 12px!important; color: #fff; margin: 5px 20px!important; padding: 2px 6px!important; background: #fe2c55; box-sizing: border-box; border-radius: 5px; } ` // 插入css let listCss = `.jar-list-coupon{font-family:microsoft Yahei;font-size:14px;color:#fff;position:absolute;right:0px;bottom:-11px;z-index:1;background:url(https://api.ergirl.com/coupon-bg.png) 50% no-repeat;background-size:cover;overflow:hidden;}.jar-list-coupon:before{content:"";width:150px;height:5px;background-color:#fff;opacity:0.3;position:absolute;left:-85px;transform:rotate(-36deg) translate(0px,0px);animation:mymove 1s ease-in-out infinite;-webkit-transform:rotate(-36deg) translate(0px,0px);-moz-transform:rotate(-36deg) translate(0px,0px);-ms-transform:rotate(-36deg) translate(0px,0px);-o-transform:rotate(-36deg) translate(0px,0px);}.jar-list-coupon a{color:#fff;height:30px;display:block;line-height:30px;padding:0 15px;}.jar-list-coupon a:hover{color:#fff;}@keyframes mymove{from{transform:rotate(-36deg) translate(0px,0px);-webkit-transform:rotate(-36deg) translate(0px,0px);-moz-transform:rotate(-36deg) translate(0px,0px);-ms-transform:rotate(-36deg) translate(0px,0px);-o-transform:rotate(-36deg) translate(0px,0px);}to{top:200px;transform:rotate(-36deg) translate(200px,300px);}}` let swiperCss = `@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA') format('woff');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next'}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}` let detailCss = `#jar-qrcode canvas {width:80px;height:80px;}#jar-qrcode img {width:80px;height:80px;}.getAgain{width:210px;height:210px;color:#fff;display:none;background:rgba(0,0,0,.7);border-radius:5px;text-align:center;position:fixed;top:50%;z-index:999;}.getAgain .again-box{width:100%;height:100%;}.getAgain .again-box img{width:60%;margin-top:20px;}.getAgain .again-box p{font-size:16px;}.jar-detail-coupon{font-family:microsoft Yahei;width:480px;position:relative;z-index:999999;}.jar-detail-coupon .jar-tab{font-size:14px;height:32px;line-height:30px;overflow:hidden;}.jar-detail-coupon .jar-tab ul{float:left;overflow:hidden;border-right:1px solid #c5c5c5;border-left:3px solid #f84e4e;}.jar-detail-coupon .jar-tab li{color:#666;padding:0 10px;float:left;border:1px solid #c5c5c5;border-right:0;cursor:pointer;}.jar-detail-coupon .jar-tab li.active{font-weight:bold;color:#f84e4e;}.jar-detail-coupon .jar-tab .jar-show{color:#666;float:left;margin-left:10px;cursor:pointer;}.jar-detail-coupon .jar-body{height:220px;margin-top:-1px;overflow:hidden;}.jar-detail-coupon .jar-body ul{position:absolute;z-index:4;background-color:#fff;}.jar-detail-coupon .jar-body li{width:478px;height:220px;display:none;border:1px solid #c5c5c5;}.jar-detail-coupon .jar-body li:first-child{display:block;}.jar-detail-coupon .jar-body .jar-body-coupon{padding:10px;}.jar-detail-coupon .jar-body .jar-body-coupon-left{font-size:14px;height:35px;color:#fff;padding:0 25px;float:left;line-height:35px;background:url('https://api.ergirl.com/coupon-bg.png') no-repeat;background-size:100% 100%;box-sizing:border-box;position:relative;overflow:hidden;}.jar-detail-coupon .jar-body .jar-body-coupon-left:before{content:"";width:150px;height:5px;background-color:#fff;opacity:0.3;position:absolute;left:-85px;transform:rotate(-36deg) translate(0px,0px);animation:mymove 1s ease-in-out infinite;-webkit-transform:rotate(-36deg) translate(0px,0px);-moz-transform:rotate(-36deg) translate(0px,0px);-ms-transform:rotate(-36deg) translate(0px,0px);-o-transform:rotate(-36deg) translate(0px,0px);}.jar-detail-coupon .jar-body .jar-body-coupon-center{font-size:14px;color:#666;margin:0 10px;float:left;}.jar-detail-coupon .jar-body .jar-body-coupon-center div{margin-bottom:10px;}.jar-detail-coupon .jar-body .jar-body-coupon-center div span{font-weight:bold;color:#f84e4e;}.jar-detail-coupon .jar-body .jar-body-coupon-right{font-size:14px;color:#666;margin-top:10px;position:relative}.jar-detail-coupon .jar-body .jar-body-coupon-right span a{font-weight:bold;color:#f84e4e!important;}.jar-detail-coupon .jar-body .jar-like-list{overflow:hidden;background: #fff;}.jar-detail-coupon .jar-body .jar-like-list dl{width:50%;float:left;}.jar-detail-coupon .jar-body .jar-like-list dd{padding:5px;}.jar-detail-coupon .jar-body .jar-like-list .img{width:100px;float:left;}.jar-detail-coupon .jar-body .jar-like-list img{max-width:100%;}.jar-detail-coupon .jar-body .jar-like-list .infor{margin-left:20px;float:left;}.jar-detail-coupon .jar-body .jar-like-list .infor div{font-size:14px;color:#666;display:block;margin-top:4px;}.jar-detail-coupon .jar-body .jar-like-list .infor div span{color:#f84e4e;}.jar-detail-coupon .jar-body .jar-like-list .infor .jar-like-coupon{color:#fff;padding:0 7px;background:url('https://api.ergirl.com/coupon-bg.png') no-repeat;background-size:100% 100%;}.jar-detail-coupon .jar-body .jar-like-list .infor .jar-like-coupon span{color:#fff;}.jar-detail-coupon .jar-body .jar-like-list .title{font-size:12px;height:35px;color:#333;overflow:hidden;}.jar-detail-coupon .jar-body .jar-like-list a:hover .title{color:red;}.jar-button{font-size:14px;width:90px;height:30px;float:left;line-height:30px;text-align:center;background-color:red;border-radius:3px;cursor:pointer;}.jar-button a{color:#fff!important;display:block;}.jar-history{font-size:16px;color:#f84e4e;text-align:center;line-height:100px;background:#fff;}.clear{clear:both;overflow:hidden;}@keyframes mymove{from{transform:rotate(-36deg) translate(0px,0px);-webkit-transform:rotate(-36deg) translate(0px,0px);-moz-transform:rotate(-36deg) translate(0px,0px);-ms-transform:rotate(-36deg) translate(0px,0px);-o-transform:rotate(-36deg) translate(0px,0px);}to{top:200px;transform:rotate(-36deg) translate(200px,300px);}}` let detailTop = `.detail-top{width:1190px}.detail-top .tab-top ul{width:505px;overflow:hidden;border-right:1px solid #b8b7bd}.detail-top .tab-top li{width:100px;float:left;line-height:30px;text-align:center;border:1px solid #b8b7bd;border-right:0;cursor:pointer}.detail-top .tab-top li.active{color:#fff;background-color:#f50}.detail-top .tab-body{height:360px}.detail-top .tab-body ul{margin:0 -10px;display:none}.detail-top .tab-body ul:first-child{display:block}.detail-top .tab-body li{height:360px;float:left;margin:0 10px;border:1px solid #ededed}.detail-top .tab-body li .pic img{width:220px;height:220px}.detail-top .tab-body li .info{font-size:18px;color:#F40;padding:0 10px;box-sizing:border-box}.detail-top .tab-body li .info .row{line-height:40px;overflow:hidden}.detail-top .tab-body li .info .price{float:left}.detail-top .tab-body li .info .price span{float:left}.detail-top .tab-body li .info .price strong{float:left}.detail-top .tab-body li .info .deal-cnt{font-size:16px;color:#888;float:right}.detail-top .tab-body li .info .title{font-size:14px;color:#3d3d3d}.detail-top .tab-body li .top-coupon{font-size:14px;color:#fff;padding:0 25px;line-height:35px;display:inline-block;background:url(https://api.ergirl.com/coupon-bg.png) no-repeat;background-size:100% 100%;position:absolute;right:11px;bottom:1px;overflow:hidden}.detail-top .tab-body li .top-coupon:before{content:"";width:150px;height:5px;background-color:#fff;opacity:.3;position:absolute;left:-85px;transform:rotate(-36deg) translate(0px,0px);animation:mymove 1s ease-in-out infinite}@keyframes mymove{from{transform:rotate(-36deg) translate(0px,0px)}to{top:200px;transform:rotate(-36deg) translate(200px,300px)}}` GMaddStyle(videolistCss) GMaddStyle(musiclistCss) GMaddStyle(dyCss) GMaddStyle(listCss) GMaddStyle(swiperCss) GMaddStyle(detailCss) GMaddStyle(detailTop) function GMaddStyle(cssText) { let a = document.createElement('style') a.type = 'text/css' a.textContent = cssText let doc = document.head || document.documentElement doc.appendChild(a) } })()