Greasy Fork is available in English.

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

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

Från och med 2024-11-28. Se den senaste versionen.

  1. // ==UserScript==
  2. // @name 网购省钱助手,自动显示京东、淘宝、聚划算、天猫隐藏优惠券与历史价格。简洁无广告,省钱省心。
  3. // @name:zh-TW 網購省錢助手,自動顯示京東、淘寶、聚劃算、天貓隱藏優惠券與歷史價格。簡潔無廣告,省錢省心。
  4. // @namespace https://api.azkou.cn/ts.html
  5. // @version 1.0.4
  6. // @description 网购省钱助手~ 自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东大药房(yiyaojd.com)隐藏优惠券,让您开心购物。
  7. // @description:zh-TW 網購省錢助手~ 自動顯示京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、聚劃算、天貓超市、天貓國際(tmall.hk)、京東國際(jd.hk)、京東圖書、京東大藥房(yiyaojd.com)隱藏優惠券,讓您開心購物。
  8. // @author 云溪
  9. // @match *://*.taobao.com/*
  10. // @match *://*.tmall.com/*
  11. // @match *://chaoshi.detail.tmall.com/*
  12. // @match *://*.tmall.hk/*
  13. // @match *://*.liangxinyao.com/*
  14. // @match *://*.jd.com/*
  15. // @match *://*.jd.hk/*
  16. // @match *://*.yiyaojd.com/*
  17. // @match *://*.vip.com/*
  18. // @match *://*.vipglobal.hk/*
  19. // @exclude *://login.taobao.com/*
  20. // @exclude *://login.tmall.com/*
  21. // @exclude *://uland.taobao.com/*
  22. // @exclude *://pages.tmall.com/*
  23. // @exclude *://wq.jd.com/*
  24. // @connect azkou.cn
  25. // @require https://lib.baomitu.com/jquery/1.8.3/jquery.min.js
  26. // @require https://lib.baomitu.com/jquery.qrcode/1.0/jquery.qrcode.min.js
  27. // @antifeature referral-link 【应GreasyFork代码规范要求:含有优惠券查询功能的脚本必须添加此提示!在此感谢大家的理解...】
  28. // @grant unsafeWindow
  29. // @grant GM_xmlhttpRequest
  30. // @grant GM_addStyle
  31. // @license AGPL
  32. // ==/UserScript==
  33. (function() {
  34. 'use strict';
  35. let base={
  36. href:location.href,
  37. 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;}
  38. .coupon-center{display:flex;}
  39. .coupon-money{display: flex;align-items: center;justify-content: center;height:70px}
  40. .coupon-info{display: flex;flex-direction: column;justify-content: center;min-width: 170px;line-height: 20px;}
  41. .coupon-btn{justify-content: center;align-items: center;display: flex;height:70px}
  42. .coupon-btn a{display: flex;font-size: 20px;color: white;padding: 5px; }
  43. .coupon-btn a:hover{color:rgb(255,153,0)}
  44. .fsize30{font-size:30px}
  45. .fsize22{font-size:22px}
  46. .mg10{margin-top:10px}
  47. .mg20{margin-top:20px}
  48. `,
  49. warp:['.gl-warp >li','.mc .clearfix >li','#J-superkillGoodslist >li','.more2_list >li','.pd_common_wrap'],
  50. searchList:[],
  51. searchTempList:[],
  52. searchKey:0,
  53. num:5,
  54. getValue(name) {
  55. return GM_getValue(name);
  56. },
  57. setValue(name, value) {
  58. GM_setValue(name, value);
  59. },
  60. sleep(time){
  61. return new Promise((resolve) => setTimeout(resolve, time));
  62. },
  63. getParam(name){
  64. var reg = eval("/" + name + "/g");
  65. var r = window.location.search.substr(1);
  66. var flag = reg.test(r);
  67. if (flag) {
  68. return true;
  69. } else {
  70. return false;
  71. }
  72. },
  73. api:'https://api.azkou.cn/',
  74. tpi:'https://ts.azkou.cn/',
  75. post:async(url,data,headers) => {
  76. return new Promise((resolve, reject) => {
  77. GM_xmlhttpRequest({
  78. method: "POST",
  79. url,
  80. data,
  81. headers,
  82. responseType:'json',
  83. onload: (res) => {
  84. resolve(res.response || res.responseText);
  85. },
  86. onerror: (err) => {
  87. reject(err);
  88. },
  89. });
  90.  
  91. });
  92. },
  93. addStyle(style){
  94. GM_addStyle(style);
  95. },
  96. removeClass(html){
  97. let node_arr = html.split('|');
  98. for (let i = 0; i < node_arr.length; i++) {
  99. $(node_arr[i]).remove();
  100. }
  101. },
  102. removeHtml(html){
  103. base.removeClass(html);
  104. base.sleep(500).then(()=>{
  105. base.removeClass(html);
  106. })
  107. },
  108. jumpUrl:(url)=>{
  109. var form=null;
  110. if (document.getElementById('redirect_form')) {
  111. form = document.getElementById('redirect_form');
  112. form.action = url;
  113. } else {
  114. form = document.createElement('form');
  115. form.action =url;
  116. form.target = '_blank';
  117.  
  118. form.method = 'POST';
  119. form.setAttribute("id", 'redirect_form');
  120. document.body.appendChild(form);
  121. }
  122. form.submit();
  123. form.action = "";
  124. form.parentNode.removeChild(form);
  125. },
  126. addClassHtml(warp,html){
  127. let node_arr = warp.split('|');
  128. for (let i = 0; i < node_arr.length; i++) {
  129. if($('div').is(node_arr[i])){
  130. $(node_arr[i]).after(html);
  131. break;
  132. }
  133. }
  134. },
  135. search(){
  136. base.warp.forEach(function(item){
  137. let list=$(item);
  138. list.map(function(key,items){
  139. if($(items).attr('data-md5-value')!='yes'){
  140. base.searchList.push(items);
  141. base.searchTempList.push(items);
  142. $(items).attr('data-md5-key',base.searchKey);
  143. $(items).attr('data-md5-value','yes');
  144. base.searchKey++;
  145. }
  146. })
  147. })
  148. let requestTemp=base.searchTempList.splice(0,base.num);
  149. let requestList=[];
  150.  
  151. requestTemp.forEach(function(item,key){
  152. let temp={};
  153. temp['href']=$(item).find('a:first').attr('href');
  154. temp['md5']=$(item).attr('data-md5-key');
  155. requestList.push(temp);
  156. })
  157. if(requestList.length>0){
  158. base.post(`${base.api}?type=jdsearch&`,JSON.stringify({data:requestList}),{}).then((res)=>{
  159. if(res.status==1){
  160. res.data.map(function(item){
  161. if(item.url){
  162. $(base.searchList[item.md5]).find('a').bind("click", function(e) {
  163. e.preventDefault();
  164. base.jumpUrl(item.url);
  165. })
  166. }
  167. })
  168. }
  169. })
  170. }
  171. }
  172.  
  173. }
  174. base.addStyle(base.css);
  175. 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) {
  176. $.getJSON(base.api+'?type=tbitem&url='+encodeURIComponent(base.href), function(res) {
  177. let html='';
  178. if(res.status==1){
  179. 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>';
  180. }else{
  181. if(res.show==1){
  182. 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>';
  183. }
  184. }
  185. if(res.shortUrl){
  186. $("body").append(res.shortHtml);
  187. $(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
  188. }
  189. base.removeHtml(res.rwarp);
  190. base.sleep(500).then(()=>{
  191. base.addClassHtml(res.warp,html);
  192. })
  193.  
  194.  
  195. })
  196. }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) {
  197. if (!base.getParam('utm_campaign')) {
  198. $.getJSON(base.tpi+'?type=jditem&url='+encodeURIComponent(base.href), function(res) {
  199. if(res.data) window.location.href =res.data;
  200. })
  201. }
  202. $.getJSON(base.api+'?type=jditem&url='+encodeURIComponent(base.href), function(res) {
  203. let html='';
  204. if(res.status==1){
  205. 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>';
  206. }else{
  207. if(res.show==1){
  208. 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>';
  209. }
  210. }
  211. if(res.shortUrl){
  212. $("body").append(res.shortHtml);
  213. $(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
  214. }
  215. base.removeHtml(res.rwarp);
  216. if($('div').is(res.warp)){
  217. $(res.warp).after(html);
  218. }else{
  219. $('.summary-top').after(html);
  220. }
  221.  
  222. })
  223. }else if (base.href.indexOf("jingfen.jd") != -1){
  224. $.getJSON(base.api+'?type=jingfen&url='+encodeURIComponent(base.href), function(res) {
  225. base.sleep(500).then(()=>{
  226. base.removeHtml(res.rwarp);
  227. $(res.warp).append(res.shortHtml);
  228. $(res.qcode).qrcode({render: "canvas", width: 160,height: 150,text: res.shortUrl});
  229. })
  230. })
  231. }else if (base.href.indexOf("jd") != -1 || base.href.indexOf("m.jd") != -1){
  232. setInterval(base.search, 300);
  233. }
  234.  
  235. })();