Steam Link App Opener

Opens Steam Links in the Steam Application

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name		Steam Link App Opener
// @namespace	https://github.com/jaxellis
// @version		2.1.0
// @description	Opens Steam Links in the Steam Application
// @author		Jaxellis
// @icon		https://store.steampowered.com/favicon.ico
// @homepage	https://github.com/jaxellis/Steam-Link-App-Opener
// @supportURL	https://github.com/jaxellis/Steam-Link-App-Opener/issues/
// @match		http://*/*
// @match		https://*/*
// @exclude		http://store.steampowered.com/*
// @exclude		https://store.steampowered.com/*
// @exclude		http://steamcommunity.com/*
// @exclude		https://steamcommunity.com/*
// @grant		none
// @run-at      document-start
// @license		GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0.txt
// ==/UserScript==

/* Global Variables and Constants */
const CUSTOMKEY = 'Control'; // Valid Keys: https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values
const PREFIX = 'steam://openurl/'; // Default: steam://openurl/
const STEAM_URLS = ['store.steampowered.com', 'steamcommunity.com']; // List of Steam domains to open in app
let customKeyPressed = false; // Variable to tell if our custom key is being pressed

// This event listener is delegated to the document to find all steam links
document.addEventListener('click', (event) => {

	// Allow native browser behavior for clicks with modifiers (e.g., Ctrl+Click to open in new tab)
	if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return;

	// Find the closest link that matches any of the specified steam URLs
	const link = event.target.closest('a[href]');
	if (!link || !STEAM_URLS.includes(new URL(link.href).hostname)) return;

	// Prevent the default link behavior
	event.preventDefault();

	// If a custom key is pressed, open the default link
	const url = customKeyPressed ? link.href : `${PREFIX}${encodeURI(link.href)}`;
	window.open(url, '_blank');

	// Reset custom key state
	customKeyPressed = false;
});

/* Update Custom Key Variable */
if (CUSTOMKEY) {
	// Add event listener to the document for keydown events
	document.addEventListener('keydown', (event) => {
		// Check if the pressed key is the custom key
		if (event.key === CUSTOMKEY && !customKeyPressed) {
			customKeyPressed = true; // Set the custom key as pressed
		}
	});

	// Add event listener to the document for keyup event
	document.addEventListener('keyup', (event) => {
		// Check if the key pressed is the custom key
		if (event.key === CUSTOMKEY) {
			customKeyPressed = false; // Set the custom key as not pressed
		}
	});
}