// ==UserScript== // @name Steam 轻便管理购物车 // @namespace http://tampermonkey.net/ // @version 0.3 // @description 轻便管理购物车 // @author ku mi // @include /https:\/\/store\.steampowered\.com\/(?:wishlist\/(?:profiles|id)|app|bundle|sub)\/*/ // @grant GM_addStyle // @downloadURL none // ==/UserScript== (function () { 'use strict' const sessionID = g_sessionID // 初始化商店页面 const storeFun = () => { const bundleReg = /addBundleToCart\(\s?(\d+)\)/ const cartReg = /addToCart\(\s?(\d+)\)/ let cartButton = query('.btn_green_steamui.btn_medium', true) if (!cartButton.length) { cartButton = query('.btnv6_green_white_innerfade.btn_medium', true) } cartButton.forEach(item => { const subMatch = cartReg.exec(item.href) if (!subMatch) { if(item.href === 'javascript:addAllDlcToCart();') { item.dataset.c_dlcid = query(('[name="subid[]"]'), true).map(it => 'subid[]=' + it.value).join('&') } else { const bundleidMatch = bundleReg.exec(item.href) if(!bundleidMatch) return item.dataset.c_bundleid = bundleidMatch[1] } } else { item.dataset.c_subid = subMatch[1] } item.href = 'javascript:void(0);' item.addEventListener('click', async e => { let target = e.target let res if (target.nodeName === 'SPAN') target = target.parentElement const sub = target.dataset.c_subid const bundleid = target.dataset.c_bundleid const dlcid = target.dataset.c_dlcid if(dlcid) { res = await request({ url: 'https://store.steampowered.com/cart/', method: 'POST', body: `action=add_to_cart&${dlcid}&sessionid=${sessionID}` }) } else { res = await request({ url: 'https://store.steampowered.com/cart/', method: 'POST', body: `action=add_to_cart&${sub ? `subid=${sub}` : `bundleid=${bundleid}`}&sessionid=${sessionID}` }) } getCartItem(res) }) }) } // 初始化愿望单页面 const wishFun = () => { let time = setInterval(() => { const wishContent = query('#wishlist_ctn') const wishList = wishContent.children const changeItem = (wishContent) => { ;[...wishContent.children].forEach(item => { let cart = query('.btn_medium:not(.already_change)', false, item) if (!cart) return const { appId } = item.dataset const { subs } = g_rgAppInfo[appId] const subId = subs.length ? `${subs[0].id}` : '' Object.assign(cart.dataset, {c_appid: appId, c_subid: subId}) cart.href = 'javascript:void(0);' cart.classList.add('already_change') }) } if (wishList.length) { clearInterval(time) wishContent.addEventListener('click', async (e) => { let target = e.target if (target.nodeName === 'IMG' && target.classList.contains('ico_cart')) target = target.parentElement if (target.nodeName === 'SPAN') target = target.parentElement if (target.classList.contains('already_change')) { const sub = target.dataset.c_subid if(!sub) return const res = await request({ url: 'https://store.steampowered.com/cart/', method: 'POST', body: `action=add_to_cart&subid=${sub}&sessionid=${sessionID}` }) getCartItem(res) } }) function debounce(cb, wishContent) { let time = true cb(wishContent) return () => { clearTimeout(time) time = setTimeout(() => { time = null cb(wishContent) }, 1000) } } document.onscroll = debounce(changeItem, wishContent) } }, 2000) } const cartItemReg = /(?:[\s\S]+?)?(