Greasy Fork is available in English.

网购省钱助手,自动显示京东、淘宝、聚划算、天猫隐藏优惠券与历史价格。简洁无广告,省钱省心。

网购省钱助手~ 自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东大药房(yiyaojd.com)隐藏优惠券,让您开心购物。

// ==UserScript==
// @name              网购省钱助手,自动显示京东、淘宝、聚划算、天猫隐藏优惠券与历史价格。简洁无广告,省钱省心。
// @name:zh-TW        網購省錢助手,自動顯示京東、淘寶、聚劃算、天貓隱藏優惠券與歷史價格。簡潔無廣告,省錢省心。
// @namespace         https://api.azkou.cn/ts.html
// @version           1.0.3
// @description       网购省钱助手~ 自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东大药房(yiyaojd.com)隐藏优惠券,让您开心购物。
// @description:zh-TW 網購省錢助手~ 自動顯示京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、聚劃算、天貓超市、天貓國際(tmall.hk)、京東國際(jd.hk)、京東圖書、京東大藥房(yiyaojd.com)隱藏優惠券,讓您開心購物。
// @author            云溪
// @match             *://*.taobao.com/*
// @match             *://*.tmall.com/*
// @match             *://chaoshi.detail.tmall.com/*
// @match             *://*.tmall.hk/*
// @match             *://*.liangxinyao.com/*
// @match             *://*.jd.com/*
// @match             *://*.jd.hk/*
// @match             *://*.yiyaojd.com/*
// @match             *://*.vip.com/*
// @match             *://*.vipglobal.hk/*
// @exclude           *://login.taobao.com/*
// @exclude           *://login.tmall.com/*
// @exclude           *://uland.taobao.com/*
// @exclude           *://pages.tmall.com/*
// @exclude           *://wq.jd.com/*
// @connect           azkou.cn
// @require           https://cdn.bootcdn.net/ajax/libs/jquery/1.8.3/jquery.min.js
// @require           https://cdn.bootcdn.net/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js
// @antifeature       referral-link 【应GreasyFork代码规范要求:含有优惠券查询功能的脚本必须添加此提示!在此感谢大家的理解...】
// @grant             unsafeWindow
// @grant             GM_xmlhttpRequest
// @grant             GM_addStyle
// @license           AGPL
// ==/UserScript==
(function() {
	'use strict';
	let base={
		href:location.href,
		css:`.coupon-box{margin-top:5px;align-items: center;background-image: linear-gradient(150deg, rgb(255, 153, 0), rgb(255, 102, 153));max-width: 380px;color: white;border-radius: 6px;}
		.coupon-center{display:flex;}
		.coupon-money{display: flex;align-items: center;justify-content: center;height:70px}
		.coupon-info{display: flex;flex-direction: column;justify-content: center;min-width: 170px;line-height: 20px;}
		.coupon-btn{justify-content: center;align-items: center;display: flex;height:70px}
		.coupon-btn a{display: flex;font-size: 20px;color: white;padding: 5px; }
		.coupon-btn a:hover{color:rgb(255,153,0)}
		.fsize30{font-size:30px}
		.fsize22{font-size:22px}
		.mg10{margin-top:10px}
                .mg20{margin-top:20px}
		`,
		warp:['.gl-warp >li','.mc .clearfix >li','#J-superkillGoodslist >li','.more2_list >li','.pd_common_wrap'],
		searchList:[],
		searchTempList:[],
		searchKey:0,
		num:5,
		getValue(name) {
			return GM_getValue(name);
		},
		setValue(name, value) {
			GM_setValue(name, value);
		},
		sleep(time){
			return new Promise((resolve) => setTimeout(resolve, time));
		},
		getParam(name){
			var reg = eval("/" + name + "/g");
			var r = window.location.search.substr(1);
			var flag = reg.test(r);
			if (flag) {
				return true;
			} else {
				return false;
			}
		},
		api:'https://api.azkou.cn/',
		tpi:'https://ts.azkou.cn/',
		post:async(url,data,headers) => {
						return new Promise((resolve, reject) => {
								 GM_xmlhttpRequest({
									method: "POST",
									url,
									data,
									headers,
									responseType:'json',
									onload: (res) => {
										resolve(res.response || res.responseText);
									},
									onerror: (err) => {
										reject(err);
									},
								});

							});
		},
		addStyle(style){
			GM_addStyle(style);
		},
		removeClass(html){
			let node_arr = html.split('|');
			for (let i = 0; i < node_arr.length; i++) {
				$(node_arr[i]).remove();
			}
		},
		removeHtml(html){
			base.removeClass(html);
			base.sleep(500).then(()=>{
				base.removeClass(html);
			})
		},
		jumpUrl:(url)=>{
					var form=null;
					if (document.getElementById('redirect_form')) {
							form = document.getElementById('redirect_form');
							form.action = url;
						} else {
							form = document.createElement('form');
							form.action =url;
							form.target = '_blank';

							form.method = 'POST';
							form.setAttribute("id", 'redirect_form');
							document.body.appendChild(form);
						}
						form.submit();
						form.action = "";
						form.parentNode.removeChild(form);
		},
		addClassHtml(warp,html){
			let node_arr = warp.split('|');
			for (let i = 0; i < node_arr.length; i++) {
				if($('div').is(node_arr[i])){
					$(node_arr[i]).after(html);
					break;
				}
			}
		},
		search(){
			base.warp.forEach(function(item){
				let list=$(item);
				list.map(function(key,items){
					if($(items).attr('data-md5-value')!='yes'){
						base.searchList.push(items);
						base.searchTempList.push(items);
						$(items).attr('data-md5-key',base.searchKey);
						$(items).attr('data-md5-value','yes');
						base.searchKey++;
					}
				})
			})
			let requestTemp=base.searchTempList.splice(0,base.num);
			let requestList=[];

			requestTemp.forEach(function(item,key){
				let temp={};
				temp['href']=$(item).find('a:first').attr('href');
				temp['md5']=$(item).attr('data-md5-key');
				requestList.push(temp);
			})
			if(requestList.length>0){
				base.post(`${base.api}?type=jdsearch&`,JSON.stringify({data:requestList}),{}).then((res)=>{
					if(res.status==1){
						res.data.map(function(item){
			                if(item.url){
			                    $(base.searchList[item.md5]).find('a').bind("click", function(e) {
			                        e.preventDefault();
			                        base.jumpUrl(item.url);
			                    })
			                }
						})
					}
				})
			}
		}

	}
	base.addStyle(base.css);
	if (base.href.indexOf("//item.taobao.com/item") != -1 || base.href.indexOf("//detail.tmall.com/item") != -1 || base.href.indexOf("//chaoshi.detail.tmall.com/item") != -1 || base.href.indexOf("//detail.tmall.hk/hk/item") != -1 || base.href.indexOf("//detail.tmall.hk/item") != -1) {
		$.getJSON(base.api+'?type=tbitem&url='+encodeURIComponent(base.href), function(res) {
			let html='';
			if(res.status==1){
				 html+='<div class="coupon-box"><div class="coupon-center"><div class="coupon-money" style="width: 100px;"><div></div><div class="fsize30">'+res.money+'</div></div><div class="coupon-info"><div class="fsize22">'+res.label+'</div><div class="mg10">'+res.info+'</div></div><div class="coupon-btn"><a  class="" href="'+res.link+'">立即领取</a></div></div></div>';
			}else{
				if(res.show==1){
					html+='<div class="coupon-box"><div class="coupon-center"><div class="coupon-money" style="width: 30px;"></div><div class="coupon-info"><div class="fsize22">'+res.label+'</div><div class="mg10">'+res.info+'</div></div><div class="coupon-btn" style="margin-left: 40px;"><a  class="" href="'+res.link+'">多平台比价</a></div></div></div>';
				}
			}
			if(res.shortUrl){
				$("body").append(res.shortHtml);
				$(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
			}
			base.removeHtml(res.rwarp);
			base.sleep(500).then(()=>{
				base.addClassHtml(res.warp,html);
			})


		})
	}else if (base.href.indexOf("item.jd") != -1 || base.href.indexOf("item.m.jd") != -1 || base.href.indexOf("//item.yiyaojd.com/") != -1 || base.href.indexOf("//e.jd.com/") != -1 || base.href.indexOf("//pro.jd.com/") != -1 || base.href.indexOf("//pro.m.jd.com/") != -1 || base.href.indexOf("//story.m.jd.com/") != -1 || base.href.indexOf("//prodev.m.jd.com/") != -1 || base.href.indexOf("//prodev.jd.com/") != -1) {
        if (!base.getParam('utm_campaign')) {
			$.getJSON(base.tpi+'?type=jditem&url='+encodeURIComponent(base.href), function(res) {
				if(res.data) window.location.href =res.data;
			})
		}
		$.getJSON(base.api+'?type=jditem&url='+encodeURIComponent(base.href), function(res) {
			let html='';
			if(res.status==1){
				 html+='<div class="coupon-box"><div class="coupon-center"><div class="coupon-money" style="width: 100px;"><div></div><div class="fsize30">'+res.money+'</div></div><div class="coupon-info"><div class="fsize22">'+res.label+'</div><div class="mg10">'+res.info+'</div></div><div class="coupon-btn"><a  class="" href="'+res.link+'">立即领取</a></div></div></div>';
			}else{
				if(res.show==1){
					html+='<div class="coupon-box"><div class="coupon-center"><div class="coupon-money" style="width: 30px;"></div><div class="coupon-info"><div class="fsize22">'+res.label+'</div><div class="mg10">'+res.info+'</div></div><div class="coupon-btn" style="margin-left: 40px;"><a  class="" href="'+res.link+'">平台比价</a></div></div></div>';
				}
			}
			if(res.shortUrl){
				$("body").append(res.shortHtml);
				$(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
			}
			base.removeHtml(res.rwarp);
			if($('div').is(res.warp)){
				$(res.warp).after(html);
			}else{
				$('.summary-top').after(html);
			}

        })
	}else if (base.href.indexOf("jingfen.jd") != -1){
		 $.getJSON(base.api+'?type=jingfen&url='+encodeURIComponent(base.href), function(res) {
			base.sleep(500).then(()=>{
				base.removeHtml(res.rwarp);
				$(res.warp).append(res.shortHtml);
				$(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
			})
		 })
	}else if (base.href.indexOf("jd") != -1 || base.href.indexOf("m.jd") != -1){
		setInterval(base.search, 300);
	}

})();