在您安装前,Greasy Fork 希望您知道此脚本包含可能不受欢迎的功能,也许会帮助脚本作者获利,而不能给你带来任何收益。
作者从这份脚本获得佣金,例如透过改写链接或提供优惠券代码以包含推荐或附属代码。
最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱!
目前为
// ==UserScript== // @name 优惠券小助手——自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫国际(tmall.hk)、唯品会(vip.com)、京东国际(jd.hk)优惠券,简洁易用! // @name:zh 优惠券小助手——自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫国际(tmall.hk)、唯品会(vip.com)、京东国际(jd.hk)优惠券,简洁易用! // @name:zh-TW 優惠券小助手——自動顯示京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、天貓國際(tmall.hk)、唯品會(vip.com)、京東國際(jd.hk)優惠券,簡潔易用! // @namespace yiyezhiqiu // @version 1.0.12 // @description 最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱! // @description:zh 最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱! // @description:zh-TW 最新簡潔易用的京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、唯品會(vip.com)優惠券小助手,自動顯示隱藏優惠券,支持各大電商平台,包括京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、聚划算、天貓超市、天貓國際(tmall.hk)、京東國際(jd.hk)、京東圖書、京東電子書、京東工業品、京東大藥房(yiyaojd.com)、唯品會(vip.com),讓您購物省心更省錢! // @author 一叶知秋 // @homepage https://coupon.jasonzk.com // @license None // @require https://cdn.jsdelivr.net/npm/[email protected]/crypto-js.min.js // @match *://*.taobao.com/* // @match *://*.tmall.com/* // @match *://*.tmall.hk/* // @match *://*.detail.tmall.com/* // @match *://*.liangxinyao.com/* // @match *://*.jd.com/* // @match *://*.jd.hk/* // @match *://*.yiyaojd.com/* // @match *://*.vip.com/* // @match *://*.vipglobal.hk/* // @exclude *://login.taobao.com/* // @exclude *://uland.taobao.com/* // @exclude *://login.tmall.com/* // @exclude *://pages.tmall.com/* // @exclude *://wq.jd.com/* // @exclude *://cart.jd.com/* // @exclude *://trade.jd.com/* // @exclude *://payc.m.jd.com/* // @icon data:image/png;base64,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 // @antifeature referral-link // @noframes // @grant unsafeWindow // @grant GM_openInTab // @grant GM_info // @grant window.close // ==/UserScript== (function() { 'use strict'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); (function(CryptoJS2) { "use strict"; var __vite_style__ = document.createElement("style"); __vite_style__.textContent = "*,\n::before,\n::after{\n box-sizing:border-box;\n border-width:0;\n border-style:solid;\n border-color:#e5e7eb;\n}\n\n::before,\n::after{\n --tw-content:'';\n}\n\nbutton,\ninput{\n font-family:inherit;\n font-feature-settings:inherit;\n font-variation-settings:inherit;\n font-size:100%;\n font-weight:inherit;\n line-height:inherit;\n letter-spacing:inherit;\n color:inherit;\n margin:0;\n padding:0;\n}\n\nbutton{\n text-transform:none;\n}\n\nbutton,\ninput:where([type='button']),\ninput:where([type='submit']){\n -webkit-appearance:button;\n background-color:transparent;\n background-image:none;\n}\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button{\n height:auto;\n}\n\n::-webkit-search-decoration{\n -webkit-appearance:none;\n}\n\n::-webkit-file-upload-button{\n -webkit-appearance:button;\n font:inherit;\n}\n\ninput::-moz-placeholder{\n opacity:1;\n color:#9ca3af;\n}\n\ninput::placeholder{\n opacity:1;\n color:#9ca3af;\n}\n\nbutton{\n cursor:pointer;\n}\n\n*, ::before, ::after{\n --tw-border-spacing-x:0;\n --tw-border-spacing-y:0;\n --tw-translate-x:0;\n --tw-translate-y:0;\n --tw-rotate:0;\n --tw-skew-x:0;\n --tw-skew-y:0;\n --tw-scale-x:1;\n --tw-scale-y:1;\n --tw-pan-x:;\n --tw-pan-y:;\n --tw-pinch-zoom:;\n --tw-scroll-snap-strictness:proximity;\n --tw-gradient-from-position:;\n --tw-gradient-via-position:;\n --tw-gradient-to-position:;\n --tw-ordinal:;\n --tw-slashed-zero:;\n --tw-numeric-figure:;\n --tw-numeric-spacing:;\n --tw-numeric-fraction:;\n --tw-ring-inset:;\n --tw-ring-offset-width:0px;\n --tw-ring-offset-color:#fff;\n --tw-ring-color:rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow:0 0 #0000;\n --tw-ring-shadow:0 0 #0000;\n --tw-shadow:0 0 #0000;\n --tw-shadow-colored:0 0 #0000;\n --tw-blur:;\n --tw-brightness:;\n --tw-contrast:;\n --tw-grayscale:;\n --tw-hue-rotate:;\n --tw-invert:;\n --tw-saturate:;\n --tw-sepia:;\n --tw-drop-shadow:;\n --tw-backdrop-blur:;\n --tw-backdrop-brightness:;\n --tw-backdrop-contrast:;\n --tw-backdrop-grayscale:;\n --tw-backdrop-hue-rotate:;\n --tw-backdrop-invert:;\n --tw-backdrop-opacity:;\n --tw-backdrop-saturate:;\n --tw-backdrop-sepia:;\n --tw-contain-size:;\n --tw-contain-layout:;\n --tw-contain-paint:;\n --tw-contain-style:;\n}\n\n::backdrop{\n --tw-border-spacing-x:0;\n --tw-border-spacing-y:0;\n --tw-translate-x:0;\n --tw-translate-y:0;\n --tw-rotate:0;\n --tw-skew-x:0;\n --tw-skew-y:0;\n --tw-scale-x:1;\n --tw-scale-y:1;\n --tw-pan-x:;\n --tw-pan-y:;\n --tw-pinch-zoom:;\n --tw-scroll-snap-strictness:proximity;\n --tw-gradient-from-position:;\n --tw-gradient-via-position:;\n --tw-gradient-to-position:;\n --tw-ordinal:;\n --tw-slashed-zero:;\n --tw-numeric-figure:;\n --tw-numeric-spacing:;\n --tw-numeric-fraction:;\n --tw-ring-inset:;\n --tw-ring-offset-width:0px;\n --tw-ring-offset-color:#fff;\n --tw-ring-color:rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow:0 0 #0000;\n --tw-ring-shadow:0 0 #0000;\n --tw-shadow:0 0 #0000;\n --tw-shadow-colored:0 0 #0000;\n --tw-blur:;\n --tw-brightness:;\n --tw-contrast:;\n --tw-grayscale:;\n --tw-hue-rotate:;\n --tw-invert:;\n --tw-saturate:;\n --tw-sepia:;\n --tw-drop-shadow:;\n --tw-backdrop-blur:;\n --tw-backdrop-brightness:;\n --tw-backdrop-contrast:;\n --tw-backdrop-grayscale:;\n --tw-backdrop-hue-rotate:;\n --tw-backdrop-invert:;\n --tw-backdrop-opacity:;\n --tw-backdrop-saturate:;\n --tw-backdrop-sepia:;\n --tw-contain-size:;\n --tw-contain-layout:;\n --tw-contain-paint:;\n --tw-contain-style:;\n}\n.cp-absolute{\n position:absolute;\n}\n.cp-relative{\n position:relative;\n}\n.cp-z-20{\n z-index:20;\n}\n.cp-mb-\\[12px\\]{\n margin-bottom:12px;\n}\n.cp-flex{\n display:flex;\n}\n.cp-h-\\[25px\\]{\n height:25px;\n}\n.cp-w-\\[120px\\]{\n width:120px;\n}\n.cp-w-\\[25px\\]{\n width:25px;\n}\n.cp-w-full{\n width:100%;\n}\n.cp-flex-none{\n flex:none;\n}\n.cp-flex-grow{\n flex-grow:1;\n}\n.cp-cursor-pointer{\n cursor:pointer;\n}\n.cp-flex-col{\n flex-direction:column;\n}\n.cp-gap-\\[4px\\]{\n gap:4px;\n}\n.cp-rounded{\n border-radius:0.25rem;\n}\n.cp-rounded-full{\n border-radius:9999px;\n}\n.cp-rounded-lg{\n border-radius:0.5rem;\n}\n.cp-rounded-md{\n border-radius:0.375rem;\n}\n.cp-rounded-e-lg{\n border-start-end-radius:0.5rem;\n border-end-end-radius:0.5rem;\n}\n.cp-border{\n border-width:1px;\n}\n.cp-border-l-4{\n border-left-width:4px;\n}\n.cp-border-r-2{\n border-right-width:2px;\n}\n.cp-border-dotted{\n border-style:dotted;\n}\n.cp-border-gray-300{\n --tw-border-opacity:1;\n border-color:rgb(209 213 219 / var(--tw-border-opacity));\n}\n.cp-border-l-red-600{\n --tw-border-opacity:1;\n border-left-color:rgb(220 38 38 / var(--tw-border-opacity));\n}\n.cp-bg-blue-400{\n --tw-bg-opacity:1;\n background-color:rgb(96 165 250 / var(--tw-bg-opacity));\n}\n.cp-bg-gray-50{\n --tw-bg-opacity:1;\n background-color:rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.cp-bg-slate-100{\n --tw-bg-opacity:1;\n background-color:rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.cp-bg-white{\n --tw-bg-opacity:1;\n background-color:rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.cp-p-4{\n padding:1rem;\n}\n.cp-p-\\[12px\\]{\n padding:12px;\n}\n.cp-py-\\[10px\\]{\n padding-top:10px;\n padding-bottom:10px;\n}\n.cp-pl-4{\n padding-left:1rem;\n}\n.cp-pl-\\[10px\\]{\n padding-left:10px;\n}\n.cp-pr-4{\n padding-right:1rem;\n}\n.cp-pr-\\[40px\\]{\n padding-right:40px;\n}\n.cp-text-center{\n text-align:center;\n}\n.cp-text-3xl{\n font-size:1.875rem;\n line-height:2.25rem;\n}\n.cp-text-lg{\n font-size:1.125rem;\n line-height:1.75rem;\n}\n.cp-text-sm{\n font-size:0.875rem;\n line-height:1.25rem;\n}\n.cp-font-bold{\n font-weight:700;\n}\n.cp-font-semibold{\n font-weight:600;\n}\n.cp-text-gray-500{\n --tw-text-opacity:1;\n color:rgb(107 114 128 / var(--tw-text-opacity));\n}\n.cp-text-gray-900{\n --tw-text-opacity:1;\n color:rgb(17 24 39 / var(--tw-text-opacity));\n}\n.cp-text-red-500{\n --tw-text-opacity:1;\n color:rgb(239 68 68 / var(--tw-text-opacity));\n}\n*,\n::before,\n::after{\n box-sizing:initial;\n}\n"; document.head.appendChild(__vite_style__); function noop() { } function run(fn) { return fn(); } function blank_object() { return /* @__PURE__ */ Object.create(null); } function run_all(fns) { fns.forEach(run); } function is_function(thing) { return typeof thing === "function"; } function safe_not_equal(a, b) { return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; } function is_empty(obj) { return Object.keys(obj).length === 0; } function subscribe(store, ...callbacks) { if (store == null) { for (const callback of callbacks) { callback(void 0); } return noop; } const unsub = store.subscribe(...callbacks); return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; } function component_subscribe(component, store, callback) { component.$$.on_destroy.push(subscribe(store, callback)); } function append(target, node) { target.appendChild(node); } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } function detach(node) { if (node.parentNode) { node.parentNode.removeChild(node); } } function element(name) { return document.createElement(name); } function text(data) { return document.createTextNode(data); } function space() { return text(" "); } function empty() { return text(""); } function listen(node, event, handler, options) { node.addEventListener(event, handler, options); return () => node.removeEventListener(event, handler, options); } function attr(node, attribute, value) { if (value == null) node.removeAttribute(attribute); else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); } function children(element2) { return Array.from(element2.childNodes); } function set_data(text2, data) { data = "" + data; if (text2.data === data) return; text2.data = /** @type {string} */ data; } function set_style(node, key, value, important) { if (value == null) { node.style.removeProperty(key); } else { node.style.setProperty(key, value, ""); } } let current_component; function set_current_component(component) { current_component = component; } const dirty_components = []; const binding_callbacks = []; let render_callbacks = []; const flush_callbacks = []; const resolved_promise = /* @__PURE__ */ Promise.resolve(); let update_scheduled = false; function schedule_update() { if (!update_scheduled) { update_scheduled = true; resolved_promise.then(flush); } } function add_render_callback(fn) { render_callbacks.push(fn); } const seen_callbacks = /* @__PURE__ */ new Set(); let flushidx = 0; function flush() { if (flushidx !== 0) { return; } const saved_component = current_component; do { try { while (flushidx < dirty_components.length) { const component = dirty_components[flushidx]; flushidx++; set_current_component(component); update(component.$$); } } catch (e) { dirty_components.length = 0; flushidx = 0; throw e; } set_current_component(null); dirty_components.length = 0; flushidx = 0; while (binding_callbacks.length) binding_callbacks.pop()(); for (let i = 0; i < render_callbacks.length; i += 1) { const callback = render_callbacks[i]; if (!seen_callbacks.has(callback)) { seen_callbacks.add(callback); callback(); } } render_callbacks.length = 0; } while (dirty_components.length); while (flush_callbacks.length) { flush_callbacks.pop()(); } update_scheduled = false; seen_callbacks.clear(); set_current_component(saved_component); } function update($$) { if ($$.fragment !== null) { $$.update(); run_all($$.before_update); const dirty = $$.dirty; $$.dirty = [-1]; $$.fragment && $$.fragment.p($$.ctx, dirty); $$.after_update.forEach(add_render_callback); } } function flush_render_callbacks(fns) { const filtered = []; const targets = []; render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); targets.forEach((c) => c()); render_callbacks = filtered; } const outroing = /* @__PURE__ */ new Set(); let outros; function group_outros() { outros = { r: 0, c: [], p: outros // parent group }; } function check_outros() { if (!outros.r) { run_all(outros.c); } outros = outros.p; } function transition_in(block, local) { if (block && block.i) { outroing.delete(block); block.i(local); } } function transition_out(block, local, detach2, callback) { if (block && block.o) { if (outroing.has(block)) return; outroing.add(block); outros.c.push(() => { outroing.delete(block); if (callback) { if (detach2) block.d(1); callback(); } }); block.o(local); } else if (callback) { callback(); } } function create_component(block) { block && block.c(); } function mount_component(component, target, anchor) { const { fragment, after_update } = component.$$; fragment && fragment.m(target, anchor); add_render_callback(() => { const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); if (component.$$.on_destroy) { component.$$.on_destroy.push(...new_on_destroy); } else { run_all(new_on_destroy); } component.$$.on_mount = []; }); after_update.forEach(add_render_callback); } function destroy_component(component, detaching) { const $$ = component.$$; if ($$.fragment !== null) { flush_render_callbacks($$.after_update); run_all($$.on_destroy); $$.fragment && $$.fragment.d(detaching); $$.on_destroy = $$.fragment = null; $$.ctx = []; } } function make_dirty(component, i) { if (component.$$.dirty[0] === -1) { dirty_components.push(component); schedule_update(); component.$$.dirty.fill(0); } component.$$.dirty[i / 31 | 0] |= 1 << i % 31; } function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) { const parent_component = current_component; set_current_component(component); const $$ = component.$$ = { fragment: null, ctx: [], // state props, update: noop, not_equal, bound: blank_object(), // lifecycle on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else callbacks: blank_object(), dirty, skip_bound: false, root: options.target || parent_component.$$.root }; append_styles && append_styles($$.root); let ready = false; $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => { const value = rest.length ? rest[0] : ret; if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); if (ready) make_dirty(component, i); } return ret; }) : []; $$.update(); ready = true; run_all($$.before_update); $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false; if (options.target) { if (options.hydrate) { const nodes = children(options.target); $$.fragment && $$.fragment.l(nodes); nodes.forEach(detach); } else { $$.fragment && $$.fragment.c(); } if (options.intro) transition_in(component.$$.fragment); mount_component(component, options.target, options.anchor); flush(); } set_current_component(parent_component); } class SvelteComponent { constructor() { /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$"); /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$set"); } /** @returns {void} */ $destroy() { destroy_component(this, 1); this.$destroy = noop; } /** * @template {Extract<keyof Events, string>} K * @param {K} type * @param {((e: Events[K]) => void) | null | undefined} callback * @returns {() => void} */ $on(type, callback) { if (!is_function(callback)) { return noop; } const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); callbacks.push(callback); return () => { const index = callbacks.indexOf(callback); if (index !== -1) callbacks.splice(index, 1); }; } /** * @param {Partial<Props>} props * @returns {void} */ $set(props) { if (this.$$set && !is_empty(props)) { this.$$.skip_bound = true; this.$$set(props); this.$$.skip_bound = false; } } } const PUBLIC_VERSION = "4"; if (typeof window !== "undefined") (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); function create_if_block_1$1(ctx) { let div; let t0; let t1; return { c() { div = element("div"); t0 = text("剩余:"); t1 = text( /*left*/ ctx[3] ); attr(div, "class", "cp-text-md"); }, m(target, anchor) { insert(target, div, anchor); append(div, t0); append(div, t1); }, p(ctx2, dirty) { if (dirty & /*left*/ 8) set_data( t1, /*left*/ ctx2[3] ); }, d(detaching) { if (detaching) { detach(div); } } }; } function create_if_block$2(ctx) { let div; let t0; let t1; return { c() { div = element("div"); t0 = text("有效期至:"); t1 = text( /*date*/ ctx[2] ); attr(div, "class", "cp-text-md"); }, m(target, anchor) { insert(target, div, anchor); append(div, t0); append(div, t1); }, p(ctx2, dirty) { if (dirty & /*date*/ 4) set_data( t1, /*date*/ ctx2[2] ); }, d(detaching) { if (detaching) { detach(div); } } }; } function create_fragment$3(ctx) { let div7; let div4; let div0; let t0; let div1; let t1; let div2; let t2; let t3; let t4; let div3; let t5; let t6; let div6; let div5; let t7; let t8; let t9; let t10; let mounted2; let dispose; let if_block0 = ( /*left*/ ctx[3] != null && /*left*/ ctx[3] > 0 && create_if_block_1$1(ctx) ); let if_block1 = ( /*date*/ ctx[2] && /*date*/ ctx[2] != "" && create_if_block$2(ctx) ); return { c() { div7 = element("div"); div4 = element("div"); div0 = element("div"); t0 = space(); div1 = element("div"); t1 = space(); div2 = element("div"); t2 = text("¥"); t3 = text( /*amount*/ ctx[0] ); t4 = space(); div3 = element("div"); t5 = text( /*condition*/ ctx[1] ); t6 = space(); div6 = element("div"); div5 = element("div"); t7 = text( /*amount*/ ctx[0] ); t8 = text("元优惠券"); t9 = space(); if (if_block0) if_block0.c(); t10 = space(); if (if_block1) if_block1.c(); attr(div0, "class", "cp-absolute cp-h-[25px] cp-w-[25px] cp-rounded-full cp-border cp-bg-slate-100"); set_style(div0, "border-bottom", "transparent"); set_style(div0, "border-right", "transparent"); set_style(div0, "transform", "rotate(-135deg)"); set_style(div0, "right", "-12.5px"); set_style(div0, "top", "-25px"); attr(div1, "class", "cp-absolute cp-h-[25px] cp-w-[25px] cp-rounded-full cp-border cp-bg-slate-100"); set_style(div1, "border-bottom", "transparent"); set_style(div1, "border-right", "transparent"); set_style(div1, "transform", "rotate(45deg)"); set_style(div1, "right", "-12.5px"); set_style(div1, "bottom", "-25px"); attr(div2, "class", "cp-text-3xl cp-font-bold cp-text-red-500"); attr(div3, "class", "cp-text-gray-500"); attr(div4, "class", "cp-relative cp-w-[120px] cp-flex-none cp-border-r-2 cp-border-dotted cp-pr-4 cp-text-center"); attr(div5, "class", "cp-text-lg cp-font-semibold"); attr(div6, "class", "cp-flex cp-flex-grow cp-flex-col cp-gap-[4px] cp-pl-4"); attr(div7, "class", "cp-flex cp-cursor-pointer cp-rounded-lg cp-border cp-border-l-4 cp-border-l-red-600 cp-bg-white cp-p-4"); }, m(target, anchor) { insert(target, div7, anchor); append(div7, div4); append(div4, div0); append(div4, t0); append(div4, div1); append(div4, t1); append(div4, div2); append(div2, t2); append(div2, t3); append(div4, t4); append(div4, div3); append(div3, t5); append(div7, t6); append(div7, div6); append(div6, div5); append(div5, t7); append(div5, t8); append(div6, t9); if (if_block0) if_block0.m(div6, null); append(div6, t10); if (if_block1) if_block1.m(div6, null); if (!mounted2) { dispose = listen( div7, "click", /*handleClick*/ ctx[4] ); mounted2 = true; } }, p(ctx2, [dirty]) { if (dirty & /*amount*/ 1) set_data( t3, /*amount*/ ctx2[0] ); if (dirty & /*condition*/ 2) set_data( t5, /*condition*/ ctx2[1] ); if (dirty & /*amount*/ 1) set_data( t7, /*amount*/ ctx2[0] ); if ( /*left*/ ctx2[3] != null && /*left*/ ctx2[3] > 0 ) { if (if_block0) { if_block0.p(ctx2, dirty); } else { if_block0 = create_if_block_1$1(ctx2); if_block0.c(); if_block0.m(div6, t10); } } else if (if_block0) { if_block0.d(1); if_block0 = null; } if ( /*date*/ ctx2[2] && /*date*/ ctx2[2] != "" ) { if (if_block1) { if_block1.p(ctx2, dirty); } else { if_block1 = create_if_block$2(ctx2); if_block1.c(); if_block1.m(div6, null); } } else if (if_block1) { if_block1.d(1); if_block1 = null; } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div7); } if (if_block0) if_block0.d(); if (if_block1) if_block1.d(); mounted2 = false; dispose(); } }; } function instance$2($$self, $$props, $$invalidate) { let { amount = 5 } = $$props; let { condition = "满100可用" } = $$props; let { date = "" } = $$props; let { url = "" } = $$props; let { left = 0 } = $$props; const handleClick = () => { if (url) { if (window.GM_openInTab) { GM_openInTab(url, { active: true }); window.close(); } } }; $$self.$$set = ($$props2) => { if ("amount" in $$props2) $$invalidate(0, amount = $$props2.amount); if ("condition" in $$props2) $$invalidate(1, condition = $$props2.condition); if ("date" in $$props2) $$invalidate(2, date = $$props2.date); if ("url" in $$props2) $$invalidate(5, url = $$props2.url); if ("left" in $$props2) $$invalidate(3, left = $$props2.left); }; return [amount, condition, date, left, handleClick, url]; } class Coupon extends SvelteComponent { constructor(options) { super(); init(this, options, instance$2, create_fragment$3, safe_not_equal, { amount: 0, condition: 1, date: 2, url: 5, left: 3 }); } } const subscriber_queue = []; function writable(value, start = noop) { let stop; const subscribers = /* @__PURE__ */ new Set(); function set(new_value) { if (safe_not_equal(value, new_value)) { value = new_value; if (stop) { const run_queue = !subscriber_queue.length; for (const subscriber of subscribers) { subscriber[1](); subscriber_queue.push(subscriber, value); } if (run_queue) { for (let i = 0; i < subscriber_queue.length; i += 2) { subscriber_queue[i][0](subscriber_queue[i + 1]); } subscriber_queue.length = 0; } } } } function update2(fn) { set(fn(value)); } function subscribe2(run2, invalidate = noop) { const subscriber = [run2, invalidate]; subscribers.add(subscriber); if (subscribers.size === 1) { stop = start(set, update2) || noop; } run2(value); return () => { subscribers.delete(subscriber); if (subscribers.size === 0 && stop) { stop(); stop = null; } }; } return { set, update: update2, subscribe: subscribe2 }; } function createCoupon() { const { subscribe: subscribe2, set, update: update2 } = writable(null); return { subscribe: subscribe2, updateCoupon: (data) => update2(() => data) }; } const coupon = createCoupon(); var UrlType = /* @__PURE__ */ ((UrlType2) => { UrlType2["Tmall"] = "tmall"; UrlType2["YYTmall"] = "liangxinyao"; UrlType2["Taobao"] = "taobao"; UrlType2["JD"] = "jd"; UrlType2["Vip"] = "vip"; return UrlType2; })(UrlType || {}); var Platform = /* @__PURE__ */ ((Platform2) => { Platform2[Platform2["Taobao"] = 1] = "Taobao"; Platform2[Platform2["JD"] = 2] = "JD"; Platform2[Platform2["Pdd"] = 3] = "Pdd"; Platform2[Platform2["Vip"] = 4] = "Vip"; Platform2[Platform2["None"] = 5] = "None"; return Platform2; })(Platform || {}); const PluginName = "3"; function createPlatform() { const { subscribe: subscribe2, set, update: update2 } = writable(null); return { subscribe: subscribe2, updatePlatform: (data) => update2(() => data) }; } const platform = createPlatform(); function create_else_block(ctx) { let span; return { c() { span = element("span"); span.textContent = "暂无优惠券!"; attr(span, "class", "cp-text-red-500"); }, m(target, anchor) { insert(target, span, anchor); }, p: noop, d(detaching) { if (detaching) { detach(span); } } }; } function create_if_block$1(ctx) { let if_block_anchor; let if_block = ( /*$platform*/ ctx[1] != Platform.JD && create_if_block_1() ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*$platform*/ ctx2[1] != Platform.JD ) { if (if_block) ; else { if_block = create_if_block_1(); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_1(ctx) { let span; return { c() { span = element("span"); span.textContent = "已领取优惠券!"; attr(span, "class", "cp-text-red-500"); }, m(target, anchor) { insert(target, span, anchor); }, d(detaching) { if (detaching) { detach(span); } } }; } function create_fragment$2(ctx) { let div; function select_block_type(ctx2, dirty) { if ( /*show*/ ctx2[0] ) return create_if_block$1; return create_else_block; } let current_block_type = select_block_type(ctx); let if_block = current_block_type(ctx); return { c() { div = element("div"); if_block.c(); attr(div, "class", "cp-text-center"); }, m(target, anchor) { insert(target, div, anchor); if_block.m(div, null); }, p(ctx2, [dirty]) { if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block) { if_block.p(ctx2, dirty); } else { if_block.d(1); if_block = current_block_type(ctx2); if (if_block) { if_block.c(); if_block.m(div, null); } } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div); } if_block.d(); } }; } function instance$1($$self, $$props, $$invalidate) { let $platform; component_subscribe($$self, platform, ($$value) => $$invalidate(1, $platform = $$value)); let { show = false } = $$props; $$self.$$set = ($$props2) => { if ("show" in $$props2) $$invalidate(0, show = $$props2.show); }; return [show, $platform]; } class Desc extends SvelteComponent { constructor(options) { super(); init(this, options, instance$1, create_fragment$2, safe_not_equal, { show: 0 }); } } function create_if_block(ctx) { var _a, _b, _c, _d, _e; let div; let t; let coupon_1; let current; coupon_1 = new Coupon({ props: { amount: ( /*$coupon*/ (_a = ctx[0]) == null ? void 0 : _a.amount ), condition: ( /*$coupon*/ (_b = ctx[0]) == null ? void 0 : _b.condition ), date: ( /*$coupon*/ (_c = ctx[0]) == null ? void 0 : _c.date ), url: ( /*$coupon*/ (_d = ctx[0]) == null ? void 0 : _d.short_url ), left: ( /*$coupon*/ (_e = ctx[0]) == null ? void 0 : _e.left ) } }); return { c() { div = element("div"); t = space(); create_component(coupon_1.$$.fragment); attr(div, "class", "cp-mb-[12px]"); }, m(target, anchor) { insert(target, div, anchor); insert(target, t, anchor); mount_component(coupon_1, target, anchor); current = true; }, p(ctx2, dirty) { var _a2, _b2, _c2, _d2, _e2; const coupon_1_changes = {}; if (dirty & /*$coupon*/ 1) coupon_1_changes.amount = /*$coupon*/ (_a2 = ctx2[0]) == null ? void 0 : _a2.amount; if (dirty & /*$coupon*/ 1) coupon_1_changes.condition = /*$coupon*/ (_b2 = ctx2[0]) == null ? void 0 : _b2.condition; if (dirty & /*$coupon*/ 1) coupon_1_changes.date = /*$coupon*/ (_c2 = ctx2[0]) == null ? void 0 : _c2.date; if (dirty & /*$coupon*/ 1) coupon_1_changes.url = /*$coupon*/ (_d2 = ctx2[0]) == null ? void 0 : _d2.short_url; if (dirty & /*$coupon*/ 1) coupon_1_changes.left = /*$coupon*/ (_e2 = ctx2[0]) == null ? void 0 : _e2.left; coupon_1.$set(coupon_1_changes); }, i(local) { if (current) return; transition_in(coupon_1.$$.fragment, local); current = true; }, o(local) { transition_out(coupon_1.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div); detach(t); } destroy_component(coupon_1, detaching); } }; } function create_fragment$1(ctx) { var _a, _b, _c, _d; let div; let desc; let t; let current; desc = new Desc({ props: { show: ( /*$coupon*/ ((_a = ctx[0]) == null ? void 0 : _a.amount) != null && /*$coupon*/ ((_b = ctx[0]) == null ? void 0 : _b.amount) > 0 ) } }); let if_block = ( /*$coupon*/ ((_c = ctx[0]) == null ? void 0 : _c.amount) != null && /*$coupon*/ ((_d = ctx[0]) == null ? void 0 : _d.amount) > 0 && create_if_block(ctx) ); return { c() { div = element("div"); create_component(desc.$$.fragment); t = space(); if (if_block) if_block.c(); attr(div, "class", "cp-mb-[12px] cp-rounded-md cp-bg-slate-100 cp-p-[12px]"); }, m(target, anchor) { insert(target, div, anchor); mount_component(desc, div, null); append(div, t); if (if_block) if_block.m(div, null); current = true; }, p(ctx2, [dirty]) { var _a2, _b2, _c2, _d2; const desc_changes = {}; if (dirty & /*$coupon*/ 1) desc_changes.show = /*$coupon*/ ((_a2 = ctx2[0]) == null ? void 0 : _a2.amount) != null && /*$coupon*/ ((_b2 = ctx2[0]) == null ? void 0 : _b2.amount) > 0; desc.$set(desc_changes); if ( /*$coupon*/ ((_c2 = ctx2[0]) == null ? void 0 : _c2.amount) != null && /*$coupon*/ ((_d2 = ctx2[0]) == null ? void 0 : _d2.amount) > 0 ) { if (if_block) { if_block.p(ctx2, dirty); if (dirty & /*$coupon*/ 1) { transition_in(if_block, 1); } } else { if_block = create_if_block(ctx2); if_block.c(); transition_in(if_block, 1); if_block.m(div, null); } } else if (if_block) { group_outros(); transition_out(if_block, 1, 1, () => { if_block = null; }); check_outros(); } }, i(local) { if (current) return; transition_in(desc.$$.fragment, local); transition_in(if_block); current = true; }, o(local) { transition_out(desc.$$.fragment, local); transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div); } destroy_component(desc); if (if_block) if_block.d(); } }; } function instance($$self, $$props, $$invalidate) { let $coupon; component_subscribe($$self, coupon, ($$value) => $$invalidate(0, $coupon = $$value)); return [$coupon]; } class Container extends SvelteComponent { constructor(options) { super(); init(this, options, instance, create_fragment$1, safe_not_equal, {}); } } const baseUrl = "https://api2.jasonzk.com"; const getPromoUrl = `${baseUrl}/compare/urlv2`; const getCouponUrl = `${baseUrl}/coupon/coupon`; const words = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "-", "," ]; function shuffleWords() { return words.sort(() => Math.random() - 0.5); } function getToken() { const words2 = shuffleWords(); const index0 = getIndex(words2, "all", true); const index1 = getIndex(words2, "iance", true); const random = Math.floor(Math.random() * 2); const splits = [getIndex(words2, ","), getIndex(words2, "-")]; const now = Date.now(); const split = random == 0 ? "," : "-"; const data = [ split, index0, splits[random] + split, index1, splits[random] + split, now ]; const key = "jason"; const token = CryptoJS2.AES.encrypt(data.join(""), key).toString(); const keyMap = getKeyMap(words2, now, split, key); return { token, keyMap }; } function getKeyMap(words2, now, split, key) { const data = [split, words2, now]; const keyMap = CryptoJS2.AES.encrypt(JSON.stringify(data), key).toString(); return keyMap; } function getIndex(words2, keyword, needSplit = false) { const index = []; for (let i = 0; i < keyword.length; i++) { index.push(words2.indexOf(keyword[i]).toString()); if (needSplit) { index.push("@"); } } return index.join(""); } async function get(url, data) { const params = new URLSearchParams(data ?? {}); url = url + "?" + params.toString(); const { token, keyMap } = getToken(); const headers = { authorization: token, authhash: keyMap, plgn: PluginName }; if (window.GM_info) { headers["plgv"] = GM_info.script.version; } const res = await fetch(url, { headers }); const json = await res.json(); if (json.code == 1003 && json.updateVersion && json.updateVersion.force) { window.GM_openInTab && GM_openInTab(json.updateVersion.addr, { active: true }); } return json; } function create_fragment(ctx) { let main; let container; let t; let current; container = new Container({}); let if_block = false; return { c() { main = element("main"); create_component(container.$$.fragment); t = space(); }, m(target, anchor) { insert(target, main, anchor); mount_component(container, main, null); append(main, t); current = true; }, p: noop, i(local) { if (current) return; transition_in(container.$$.fragment, local); transition_in(if_block); current = true; }, o(local) { transition_out(container.$$.fragment, local); transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(main); } destroy_component(container); } }; } class App extends SvelteComponent { constructor(options) { super(); init(this, options, null, create_fragment, safe_not_equal, {}); } } async function createTarget(target) { const div = document.createElement("div"); return new Promise((resolve) => { let timer = 0; function addSibling() { let t = null; for (const item of target) { t = document.querySelector(item); if (t) { break; } } if (t) { t.after(div); clearTimeout(timer); resolve(div); } else { timer = setTimeout(addSibling, 100); } } timer = setTimeout(addSibling, 100); }); } async function getTitle(p) { const pat = p ?? ensurePlatform(); let title = ""; switch (pat) { case Platform.Taobao: title = await getTbTitle(); break; case Platform.JD: title = await getJdTitle(); break; case Platform.Vip: title = await getVipTitle(); break; } return { platform: pat, title }; } function getTbTitle() { return new Promise((resolve) => { var _a; const title = (_a = document.querySelector("h1")) == null ? void 0 : _a.textContent; if (title) { resolve(title); } else { const observer = new MutationObserver(() => { var _a2; const title2 = (_a2 = document.querySelector("h1")) == null ? void 0 : _a2.textContent; if (title2) { observer.disconnect(); resolve(title2); } }); observer.observe(document.body, { childList: true, subtree: true }); } }); } function getJdTitle() { return new Promise((resolve) => { var _a; const title = (_a = document.querySelector(".sku-name")) == null ? void 0 : _a.textContent; if (title) { const rt = title.replace(/\s+/g, ""); resolve(rt); } else { const observer = new MutationObserver(() => { var _a2; const title2 = (_a2 = document.querySelector(".sku-name")) == null ? void 0 : _a2.textContent; if (title2) { observer.disconnect(); const rt = title2.replace(/\s+/g, ""); resolve(rt); } }); observer.observe(document.body, { childList: true, subtree: true }); } }); } function getVipTitle() { const isH5 = isMobile(); const className = isH5 ? ".name_title_ll" : ".pib-title-detail"; return new Promise((resolve) => { var _a; const title = (_a = document.querySelector(className)) == null ? void 0 : _a.textContent; if (title && title != "商家店铺") { resolve(title.replace("商家店铺", "")); } else { const observer = new MutationObserver(() => { var _a2; const title2 = (_a2 = document.querySelector(className)) == null ? void 0 : _a2.textContent; if (title2 && title2 != "商家店铺") { observer.disconnect(); resolve(title2.replace("商家店铺", "")); } }); observer.observe(document.body, { childList: true, subtree: true }); } }); } function ensurePlatform() { const url = window.location.host; let p = Platform.None; if (url.indexOf(UrlType.Taobao) != -1 || url.indexOf(UrlType.Tmall) != -1 || url.indexOf(UrlType.YYTmall) != -1) { platform.updatePlatform(Platform.Taobao); p = Platform.Taobao; } else if (url.indexOf(UrlType.JD) != -1) { platform.updatePlatform(Platform.JD); p = Platform.JD; } else if (url.indexOf(UrlType.Vip) != -1) { platform.updatePlatform(Platform.Vip); p = Platform.Vip; } else { platform.updatePlatform(Platform.None); } return p; } function checkCanRedirect(platform2, title) { const href = window.location.href; switch (platform2) { case Platform.Taobao: return href.indexOf("mm_117425171_2324550020_111391250310") == -1 && href.indexOf("mm_117425171_21428696_71990812") == -1 && href.indexOf("mm_117425171_33696257_277458675") == -1 && title != "天猫" && title != "淘宝网"; case Platform.JD: return href.indexOf("2015895618") == -1 || href.indexOf(".jasonzk.com") > -1; case Platform.Vip: return href.indexOf("a1bea5af456e316c7745ed3ca2a379e6") == -1 && href.indexOf("f938d6787b301f8cd8d258aa477437a3") == -1 && href.indexOf("41c6df95c56c4de075bf27fffb06af9f") == -1 && (window.location.pathname.indexOf("detail-") > -1 || window.location.hostname.indexOf("m.vip.com") > -1); default: return false; } } function isMobile() { return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent); } async function mounted() { const platform2 = ensurePlatform(); const { title } = await getTitle(platform2); const flag = checkCanRedirect(platform2, title); if (flag) { const json2 = await get(getPromoUrl, { title, platform: platform2, pt: PluginName, url: window.location.href }); if (json2 && json2.data) { if (!window.GM_openInTab || isMobile() && platform2 == Platform.Vip) { window.location.replace(json2.data); } else { GM_openInTab(json2.data, { active: true }); window.close(); } } } if (isMobile() && platform2 == Platform.Vip) { return; } const json = await get(getCouponUrl, { title, platform: platform2, pt: PluginName, url: window.location.href }); if (json && json.data) { coupon.updateCoupon(json.data); const target = await createTarget(json.data.selector); new App({ target }); } } mounted(); })(CryptoJS); })();