您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically refreshes the page when Steam fails to load your inventory history.
当前为
- // ==UserScript==
- // @name Steam Retry
- // @author https://github.com/Matt-RJ
- // @namespace https://github.com/Matt-RJ/tampermonkey-scripts/blob/master/steam-retry
- // @version 1.0.0
- // @description Automatically refreshes the page when Steam fails to load your inventory history.
- // @match *://steamcommunity.com/id/*/tradehistory*
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
- (function () {
- 'use strict';
- // Max number of retries before the script stops. Set to 0 to retry indefinitely.
- const MAX_RETRIES = 5;
- // How long in ms to wait before refreshing the page when loading fails.
- const RETRY_DELAY = 500; // ! Beware of potential flashing lights and rate limits if lowering this
- class SteamRetry {
- constructor({ maxRetries, retryDelay }) {
- if (!Number.isInteger(maxRetries)) {
- throw new Error('SteamRetry | maxRetries must be an integer.');
- }
- if (!Number.isInteger(retryDelay)) {
- throw new Error('SteamRetry | retryDelay must be an integer.');
- }
- this.ERROR_EL_CLASS_NAME = '.profile_fatalerror_message';
- this.LOAD_ERROR_MESSAGE = 'There was a problem loading your inventory history.';
- this.RETRY_KEY = 'steam-retry-retries-count';
- this.maxRetries = maxRetries;
- this.retryDelay = retryDelay;
- this.retries = 0;
- }
- shouldRetry() {
- if (this.maxRetries <= 0) {
- return true;
- }
- return this.retries < this.maxRetries;
- }
- async start() {
- // Once you run out of retries, the page stops refreshing automatically.
- // This resets the retry count when you refresh the page afterwards manually, or navigate away to a new page.
- window.addEventListener('beforeunload', async (e) => {
- e.preventDefault(); // Stop the event until the async function is done.
- // reset the retry count only if the maximum number of retries has been reached
- if (!this.shouldRetry()) {
- await GM_setValue(this.RETRY_KEY, 0);
- }
- return e;
- });
- window.addEventListener('load', async () => {
- this.retries = await GM_getValue(this.RETRY_KEY, 0);
- console.log('SteamRetry | Starting...');
- console.log(`SteamRetry | Retry ${this.retries}/${this.maxRetries <= 0 ? 'ထ' : this.maxRetries}`);
- const errorEl = document.querySelector(this.ERROR_EL_CLASS_NAME);
- if (errorEl && errorEl.innerText === this.LOAD_ERROR_MESSAGE) {
- console.log('SteamRetry | Failed to load.');
- if (!this.shouldRetry()) {
- console.log('SteamRetry | Max retries reached.');
- return;
- }
- await this.refresh();
- } else {
- console.log('SteamRetry | Could not find error message; stopping.');
- await this.reset();
- }
- });
- }
- async refresh() {
- console.log('SteamRetry | Refreshing...');
- await Promise.all([
- new Promise((resolve) => setTimeout(resolve, this.retryDelay)),
- GM_setValue(this.RETRY_KEY, this.retries + 1)
- ]);
- document.location.reload();
- }
- async reset() {
- console.log('SteamRetry | Resetting retries to default...');
- await GM_setValue(this.RETRY_KEY, 0);
- }
- }
- const steamRetry = new SteamRetry({
- maxRetries: MAX_RETRIES,
- retryDelay: RETRY_DELAY,
- });
- steamRetry.start();
- })();