您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
On-hover Steam thumbnail & description for 1337x torrent titles (cleans up names for better matches)
当前为
// ==UserScript== // @name 1337x - Steam Hover Preview // @namespace https://gf.qytechs.cn/users/DeonHolo // @version 1.3 // @description On-hover Steam thumbnail & description for 1337x torrent titles (cleans up names for better matches) // @icon https://imgur.com/a/MzXMw3P // @author DeonHolo // @license MIT // @match *://1337x.to/* // @match *://1337x.st/* // @match *://1337x.ws/* // @match *://1337x.eu/* // @match *://1337x.se/* // @match *://1337x.is/* // @match *://1337x.gd/* // @grant GM_xmlhttpRequest // @connect store.steampowered.com // @run-at document-idle // ==/UserScript== ;(function(){ 'use strict'; // create tooltip const tip = document.createElement('div'); Object.assign(tip.style, { position : 'fixed', padding : '8px', background : 'rgba(255,255,255,0.95)', border : '1px solid #444', borderRadius : '4px', boxShadow : '0 2px 6px rgba(0,0,0,0.2)', zIndex : 2147483647, maxWidth : '300px', fontSize : '12px', lineHeight : '1.3', display : 'none', pointerEvents : 'none' }); document.body.appendChild(tip); let hoverCounter = 0; const cache = new Map(); function gmFetch(url){ return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method : 'GET', url, responseType : 'json', onload : r => resolve(r.response), onerror : e => reject(e) }); }); } async function fetchSteam(name){ if (cache.has(name)) return cache.get(name); let search; try { search = await gmFetch( `https://store.steampowered.com/api/storesearch/?cc=us&l=en&term=${encodeURIComponent(name)}` ); } catch { return null; } const id = search.items?.[0]?.id; if (!id) return null; let details; try { details = await gmFetch( `https://store.steampowered.com/api/appdetails?appids=${id}&cc=us&l=en` ); } catch { return null; } const data = details[id]?.data; cache.set(name, data); return data; } function cleanName(raw){ let name = raw.trim(); // split at dash, slash, bracket, 'Update' or 'Edition' name = name.split(/(?:[-\/\(\[]|Update|Edition)/i)[0].trim(); // strip off version suffix name = name.replace(/ v[\d.].*$/i, '').trim(); return name; } function positionTip(e){ let x = e.clientX + 12; let y = e.clientY + 12; const w = tip.offsetWidth, h = tip.offsetHeight; if (x + w > window.innerWidth) x = window.innerWidth - w - 8; if (y + h > window.innerHeight) y = window.innerHeight - h - 8; tip.style.left = x + 'px'; tip.style.top = y + 'px'; } async function showTip(e){ const thisHover = ++hoverCounter; const raw = e.target.textContent; const name = cleanName(raw); tip.innerHTML = `<p>Loading <strong>${name}</strong>…</p>`; tip.style.display = 'block'; positionTip(e); // smaller debounce for snappier feel await new Promise(r => setTimeout(r, 100)); if (thisHover !== hoverCounter) return; const data = await fetchSteam(name); if (thisHover !== hoverCounter) return; if (!data) { tip.innerHTML = `<p>No Steam info for<br><strong>${name}</strong>.</p>`; return; } tip.innerHTML = ` <img src="${data.header_image}" style="width:100%;margin-bottom:6px"> <p>${data.short_description}</p> `; } function hideTip(){ hoverCounter++; tip.style.display = 'none'; } const SEL = 'td.coll-1 a[href^="/torrent/"]'; document.addEventListener('mouseover', e => { if (e.target.matches(SEL)) showTip(e); }); document.addEventListener('mousemove', e => { if (e.target.matches(SEL) && tip.style.display === 'block') positionTip(e); }); document.addEventListener('mouseout', e => { if (e.target.matches(SEL)) hideTip(e); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址