您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Because we despise scammers
// ==UserScript== // @name Steam Archive Menu // @description Because we despise scammers // @version 2022.10 // @author SkauOfArcadia // @homepage https://skau.neocities.org/ // @contactURL https://t.me/SkauOfArcadia // @match *://steamcommunity.com/* // @match *://store.steampowered.com/* // @run-at document-idle // @grant none // @license AGPL-3.0-or-later // @namespace https://gf.qytechs.cn/users/751327 // ==/UserScript== /** * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ (function() { "use strict"; switch(location.pathname.split('/')[1]) { case "id": let vanity = location.pathname.split('/')[2]; if (location.pathname.lastIndexOf('/') === 3 || location.pathname.split('/')[3].length === 0) { let y = JSON.parse('{' + document.getElementById('responsive_page_template_content').getElementsByTagName('script')[0].innerHTML.split('{')[1].split('}')[0] + '}').steamid; if (isNumeric(y)) { y = BigInt(y); console.log('Obtained SteamID64: ' + y); addArchiveMenu('/profiles/' + y); if (!localStorage.getItem('arch_id_' + vanity.toLowerCase()) || BigInt(localStorage.getItem('arch_id_' + vanity.toLowerCase())) !== y) { localStorage.setItem('arch_id_' + vanity.toLowerCase(), y); console.log('Saved ID ' + y + ' for ' + vanity); } } } else if (!!localStorage.getItem('arch_id_' + vanity.toLowerCase())) { addArchiveMenu('/id/' + vanity, '/profiles/' + localStorage.getItem('arch_id_' + vanity.toLowerCase())) } else { addArchiveMenu(location.pathname); } break; case "app": case "bundle": if(location.hostname == "store.steampowered.com"){ let y = location.pathname; let path = '/' + y.split('/')[1] + '/'; y = y.split(path).pop().split('/')[0]; if (isNumeric(y)) { addArchiveMenu(path + y); } } else { addArchiveMenu(location.pathname); } break; default: addArchiveMenu(location.pathname); break; } function addArchiveMenu(path, replacement) { var isHover = false let archUrl = location.protocol + "//" + location.hostname + path if(!!replacement && !!path) { archUrl = location.protocol + "//" + location.hostname + location.pathname.replace(path, replacement); } if (location.search.indexOf('?l=') !== -1 || location.search.indexOf('&l=') !== -1 || location.search.indexOf('?searchtext=') !== -1 || location.search.indexOf('&searchtext=') !== -1) { let params = new URLSearchParams(location.search) params.delete('l'); params.delete('searchtext'); if (String(params).length > 0) { archUrl += '?' + params; } } else { archUrl += location.search } //Create menu elements var menuitem = document.getElementsByClassName("menuitem"); var archmenu = document.createElement("a"); var archtxt = document.createTextNode("ARCHIVE..."); archmenu.setAttribute("class", "menuitem archive"); archmenu.setAttribute("data-tooltip-type", "selector"); archmenu.setAttribute("data-tooltip-content", ".submenu_archive"); archmenu.appendChild(archtxt); var archnav = document.createElement("div") archnav.setAttribute("style", "position: absolute; z-index: 1500; opacity: 0; left: 300px; top: 64px; pointer-events: none;"); archnav.setAttribute("class", "supernav_content archive"); var archsub = document.createElement("div") archsub.setAttribute("class", "submenu_archive"); archsub.setAttribute("style", ""); archsub.setAttribute("data-submenuid", "archive"); var archit1 = document.createElement("a"); archit1.setAttribute("class", "submenuitem"); archit1.setAttribute("href", "https://web.archive.org/save/" + archUrl); archit1.setAttribute("target", "_blank"); archit1.setAttribute("rel", "noopener noreferrer"); var archit1txt = document.createTextNode("Archive this page"); archit1.appendChild(archit1txt); var archit2 = document.createElement("a"); archit2.setAttribute("class", "submenuitem"); archit2.setAttribute("href", "https://web.archive.org/web/*/" + archUrl); archit2.setAttribute("target", "_blank"); archit2.setAttribute("rel", "noopener noreferrer"); var archit2txt = document.createTextNode("View History"); archit2.appendChild(archit2txt); archsub.appendChild(archit1); archsub.appendChild(archit2); archnav.appendChild(archsub); insertAfter(archnav, menuitem[menuitem.length - 1]); insertAfter(archmenu, menuitem[menuitem.length - 1]); var parentClass = document.getElementsByClassName("menuitem archive")[0]; var childClass = document.getElementsByClassName("supernav_content archive")[0]; parentClass.addEventListener("mouseover", mouseOver); parentClass.addEventListener("mouseout", mouseOut); childClass.addEventListener("mouseover", mouseOver); childClass.addEventListener("mouseout", mouseOut); function mouseOver() { var parentPos = getOffset(parentClass).left - getOffset(parentClass.parentNode).left console.log(parentPos) childClass.style.left = Math.round(parentPos) + "px"; childClass.style.opacity = "1"; childClass.style.pointerEvents = "auto"; isHover = true } function mouseOut() { isHover=false setTimeout(() => { if(!isHover){childClass.style.opacity = "0"; childClass.style.pointerEvents = "none";} }, 100); } } function isNumeric(str) { if (typeof str != "string") return false return !isNaN(str) && !isNaN(parseFloat(str)) } function insertAfter(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function getOffset( el ) { var _x = 0; var _y = 0; while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) { _x += el.offsetLeft - el.scrollLeft; _y += el.offsetTop - el.scrollTop; el = el.offsetParent; } return { top: _y, left: _x }; } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址