您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
增加手续费计算及更改页面显示数量
// ==UserScript== // @name 挂刀网脚本 // @namespace http://tampermonkey.net/ // @version 2024-04-01 // @description 增加手续费计算及更改页面显示数量 // @author Cliencer Goge // @match https://hangknife.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=hangknife.com // @run-at document-start // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @license MIT // ==/UserScript== (function(originalOpen) { XMLHttpRequest.prototype.open = function(method, url, async, user, password) { this._url = url; // 保存URL到XHR实例上 return originalOpen.apply(this, arguments); }; })(XMLHttpRequest.prototype.open); (function(originalSend) { let originalResponseText = "" let modifiedResponseText = "" XMLHttpRequest.prototype.send = function(body) { if (this._url.includes("hangknife.com/api/steam/queryItemList")) { let saves = readstorage() // 修改请求体 if (typeof body === "string") { let data = JSON.parse(body); if(saves.pageitems>100){saves.pageitems=100;} if(saves.pageitems<5){saves.pageitems=5;} data.limit=saves.pageitems //每次请求物品数量 body = JSON.stringify(data); } } this.addEventListener("load", function() { // 当请求完成时,可以在这里读取响应 if(this._url.includes("hangknife.com/api/steam/queryItemList")){ let saves = readstorage() originalResponseText = this.responseText // 劫持 responseText 的 getter 因为默认的情况下该属性是只读的 Object.defineProperty(this, "responseText", { get: function() { try { let data = JSON.parse(originalResponseText) for(let i in data.data){ let minPlatformPrice = 999999999 for(let key in saves.handling_fee){ let price = data.data[i][key+"Price"] if(price){ price *= 1 + saves.handling_fee[key]/100 //price = price.toFixed(2) data.data[i][key+"Price"] = price if(price<minPlatformPrice){minPlatformPrice=price} } } data.data[i].minPlatformPrice=minPlatformPrice data.data[i].minPrice=minPlatformPrice data.data[i].safeBuyerPriceDisCount=minPlatformPrice/data.data[i].steamSafeBuyerPrice data.data[i].buyerPriceDisCount=minPlatformPrice/data.data[i].steamBuyerPrice data.data[i].lowestDisCount=minPlatformPrice/data.data[i].steamSellerPrice } modifiedResponseText = JSON.stringify(data) return modifiedResponseText;// 返回修改后的JSON字符串 } catch (e) { console.log(e) // 如果响应不是JSON,或者解析失败,返回原始响应 return originalResponseText; } } }); } }); return originalSend.call(this, body); }; })(XMLHttpRequest.prototype.send); (function() { 'use strict'; // document.querySelector('#app').__vue__ // const userInfodata={data:{country:'芜湖~',emailInfo:{adress:'[email protected]',validated:true},name:'666',steamId:'666',wallet:{balance:666,currency:666,hasWallet:true}}} var saves=readstorage() var Vue // 使用MutationObserver等待特定元素加载 var observer = new MutationObserver((mutations, obs) => { const vueRoot = document.querySelector('#app'); // 替换YOUR_VUE_ROOT_ELEMENT_SELECTOR为目标Vue元素的选择器 if (vueRoot) { obs.disconnect(); // 确保Vue实例已经加载 waitForVueToLoad(vueRoot); } }); observer.observe(document, {childList: true, subtree: true}); function main(){ /*假登录 没什么叼用 localStorage.setItem('refresh_token', 'urlRefreshToken')//假Token Vue.$store.commit('setUserInfo',userInfodata.data) Vue.$store.commit('setLogin',true) const router = Vue.$router; if (router) { // 移除现有的路由守卫 // 注意:Vue Router API 并不直接支持移除已注册的守卫 // 这里只是一个概念性的示例 router.beforeHooks = []; // 这行代码在实际中并不会工作 // 添加新的路由守卫 router.beforeEach((to, from, next) => { // 新的守卫逻辑 console.log("Navigating to:", to.path); next(); // 允许所有路由 }); } */ console.log(Vue) var observer = new MutationObserver((mutations, obs) => { let tablehead = document.querySelector('thead.has-gutter') let tableheadplug = tablehead.getElementsByClassName('tableheadplug') let tableend = document.querySelector('div.el-pagination') if (tablehead && tableend && tableheadplug.length==0) { console.log('插入表头表尾') addplug(tablehead,tableend) obs.disconnect(); } }); observer.observe(document, {childList: true, subtree: true}); function addplug(tablethead,tableend){ var tableheadplug = document.createElement('tr'); tableheadplug.class="tableheadplug" let iputth = document.createElement('th'); iputth.className = "is-leaf el-table__cell" iputth.colspan="1" iputth.rowspan="1" iputth.innerHTML = `<div class="cell">手续费设置(%)点击查找重新计算</div>`; tableheadplug.appendChild(iputth); for(let platform in saves.handling_fee) { iputth = document.createElement('th'); iputth.className = "is-leaf el-table__cell" iputth.colspan="1" iputth.rowspan="1" iputth.innerHTML = ` <div class = "el-input el-input--small cell"> <input type="text" id="${platform}" inputmode="numeric" pattern="\d*(\.\d+)?$" placeholder="费率%" class="el-input__inner" value="${saves.handling_fee[platform]}"> </div>`; //iputth.addEventListener('blur', saveonBlur(tableheadplug)); tableheadplug.appendChild(iputth); } tablethead.insertBefore(tableheadplug,tablethead.firstElementChild) var tableendplug = document.createElement('span'); tableendplug.className='el-pagination__jump' tableendplug.innerHTML = ` 每页显示 <div class="el-input el-pagination__editor is-in-pagination"><input id='pageitems' type="number" autocomplete="off" min="1" max="100" class="el-input__inner" value="${saves.pageitems}"> </div> 个 ` tableend.insertBefore(tableendplug,tableend.firstElementChild) setTimeout(function() { for(let platform in saves.handling_fee) { tableheadplug.querySelector(`#${platform}`).addEventListener('blur', saveonBlur); } tableendplug.querySelector(`#pageitems`).addEventListener('blur', saveonBlur); }, 0); //等待DOM加载,设置为0即可 function saveonBlur() { if(tableheadplug){ for(let platform in saves.handling_fee) { let platformfee = tableheadplug.querySelector(`#${platform}`) saves.handling_fee[platform] = parseFloat(platformfee.value) || 0 } } if(tableendplug){ saves.pageitems = parseInt(tableendplug.querySelector(`#pageitems`).value) || 10 if(saves.pageitems>100){saves.pageitems=100;tableendplug.querySelector(`#pageitems`).value=100} if(saves.pageitems<5){saves.pageitems=5;tableendplug.querySelector(`#pageitems`).value=5} } //console.log(saves) savestorage(saves) } } } function waitForVueToLoad(element) { if (element.__vue__) { // 访问Vue实例的data Vue = element.__vue__ console.log('Vue实例已加载') // 你可以在这里进行你想要的操作 main() } else { setTimeout(() => waitForVueToLoad(element), 100); // 等待100ms后重试 } } })(); function readstorage(){ var saves = GM_getValue('saves') if(saves) return saves saves = { handling_fee:{ buff:0, c5:0, skinport:0, igxe:0, uupin:0, v5Item:0, halo:3.3, bitSkins:2.7, waxpeer:9.8, dmarket:2.7, csMoney:4.2, }, pageitems:10 } return saves } function savestorage(saves){ GM_setValue('saves',saves) }