Steam 家庭共享检测(图标提示)

检测Steam游戏是否支持家庭共享,并在游戏标题上方显示图标,鼠标悬浮显示提示,点击图标跳转并高亮“家庭共享”位置

// ==UserScript==
// @name         Steam 家庭共享检测(图标提示)
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  检测Steam游戏是否支持家庭共享,并在游戏标题上方显示图标,鼠标悬浮显示提示,点击图标跳转并高亮“家庭共享”位置
// @author       你
// @license      MIT
// @match        https://store.steampowered.com/app/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 创建图标元素
    const iconElement = document.createElement('span');
    iconElement.style.fontSize = '32px'; // 设置图标大小
    iconElement.style.marginBottom = '10px'; // 设置与标题的间距
    iconElement.style.cursor = 'pointer';  // 设置图标为可点击
    iconElement.style.transition = 'transform 0.2s ease-in-out'; // 添加平滑过渡效果
    iconElement.style.position = 'absolute'; // 设置为绝对定位
    iconElement.style.top = '0'; // 图标位置在标题上方
    iconElement.style.left = '0'; // 调整水平位置,使其与标题左对齐
    iconElement.style.zIndex = '10'; // 确保图标在标题上方

    // 监听 DOM 变动,直到找到游戏标题元素
    const observer = new MutationObserver(function(mutations) {
        const gameTitleElement = document.querySelector('.apphub_AppName');

        // 如果找到了游戏标题元素,则执行插入操作
        if (gameTitleElement) {
            // 查找是否有包含“家庭共享”的链接
            const familySharingLink = Array.from(document.querySelectorAll('a')).find(link =>
                link.textContent.includes('家庭共享') || link.textContent.includes('Family Sharing')
            );

            // 如果找到了“家庭共享”链接
            if (familySharingLink) {
                // 模拟点击该链接并检测跳转 URL
                const originalHref = familySharingLink.href;
                const isValidLink = originalHref && originalHref.startsWith("https://store.steampowered.com/");

                // 根据跳转 URL 判断是否支持家庭共享
                if (isValidLink) {
                    iconElement.textContent = '✔';  // 显示绿色√
                    iconElement.style.color = 'green';  // 设置为绿色
                    iconElement.title = '支持家庭共享';  // 鼠标悬浮提示
                } else {
                    iconElement.textContent = '❌';  // 显示红色×
                    iconElement.style.color = 'red';  // 设置为红色
                    iconElement.title = '不支持家庭共享';  // 鼠标悬浮提示
                }

                // 添加点击事件,点击图标时滚动到“家庭共享”链接并高亮显示
                iconElement.onclick = function() {
                    // 查找“家庭共享”文本位置并平滑滚动到该位置
                    const familySharingText = Array.from(document.querySelectorAll('a')).find(link =>
                        link.textContent.includes('家庭共享') || link.textContent.includes('Family Sharing')
                    );

                    if (familySharingText) {
                        // 平滑滚动到“家庭共享”位置
                        familySharingText.scrollIntoView({ behavior: 'smooth', block: 'center' });

                        // 高亮“家庭共享”文本
                        const range = document.createRange();
                        const selection = window.getSelection();
                        range.selectNodeContents(familySharingText);
                        selection.removeAllRanges();
                        selection.addRange(range);

                        // 高亮背景色
                        familySharingText.style.backgroundColor = 'yellow';  // 高亮背景色为黄色

                        // 一定时间后恢复原背景色
                        setTimeout(() => {
                            familySharingText.style.backgroundColor = '';  // 恢复背景色
                        }, 2000);
                    }
                };
            } else {
                // 如果没有找到“家庭共享”链接,认为不支持家庭共享
                iconElement.textContent = '❌';  // 显示红色×
                iconElement.style.color = 'red';  // 设置为红色
                iconElement.title = '不支持家庭共享';  // 鼠标悬浮提示
            }

            // 将图标插入到标题区域的上方
            const headerElement = document.querySelector('.apphub_HeaderStandardTop');
            if (headerElement) {
                headerElement.style.position = 'relative'; // 确保标题区域是相对定位
                headerElement.appendChild(iconElement);  // 将图标添加到标题区域上方
            }

            // 停止观察,避免不必要的重复操作
            observer.disconnect();
        }
    });

    // 配置观察器以监听 DOM 变动
    observer.observe(document.body, { childList: true, subtree: true });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址