您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically redirect old URLs of Gamesquad Forum to new ones, inspired by @JRV
- // ==UserScript==
- // @name Gamesquad URL Converter
- // @namespace http://tampermonkey.net/
- // @version 0.1.3.2
- // @license GPLv3
- // @description Automatically redirect old URLs of Gamesquad Forum to new ones, inspired by @JRV
- // @author micalex
- // @match *://*.gamesquad.com/*
- // @grant none
- // ==/UserScript==
- (function() {
- const url = window.location.href;
- const regexMap = {
- google: /http:\/\/forums.gamesquad.com\/showthread.php\?([0-9]+)-/,
- archive: /http:\/\/forums.gamesquad.com\/archive\/index.php\/t-([0-9]+)/,
- gamesquad: /http:\/\/forums.gamesquad.com\/showthread.php\?t=([0-9]+)/,
- oldNewGamesquad: /http:\/\/www.gamesquad.com\/xenforo\/index.php\?[^.]+\.([0-9]+)/,
- oldPostUrl: /http:\/\/forums.gamesquad.com\/showpost.php\?p=([0-9]+)/,
- forumdisplay: /http:\/\/forums.gamesquad.com\/forumdisplay.php\?(\d+)-(.+)/,
- member: /http:\/\/forums.gamesquad.com\/member.php\?(\d+)-(.+)/
- };
- const baseNewUrlMap = {
- google: 'https://www.gamesquad.com/forums/index.php?threads/',
- archive: 'https://www.gamesquad.com/forums/index.php?threads/',
- gamesquad: 'https://www.gamesquad.com/forums/index.php?threads/',
- oldNewGamesquad: 'https://www.gamesquad.com/forums/index.php?threads/',
- oldPostUrl: 'https://www.gamesquad.com/forums/index.php?posts/',
- forumdisplay: 'https://gamesquad.com/forums/index.php?forums/',
- member: 'https://www.gamesquad.com/forums/index.php?members/'
- };
- const xhr = new XMLHttpRequest();
- xhr.open('HEAD', url, true);
- xhr.onload = function() {
- if (xhr.status === 404) {
- const match = Object.entries(regexMap).find(([key, regex]) => url.match(regex));
- if (match) {
- let newUrl = '';
- const rule = match[0];
- if (rule === 'forumdisplay') {
- const matches = url.match(regexMap.forumdisplay);
- const forumId = matches[1];
- let forumName = matches[2];
- forumName = forumName.toLowerCase().startsWith('asl-') ? forumName.slice(4).toLowerCase() : forumName.toLowerCase();
- newUrl = baseNewUrlMap.forumdisplay + forumName + '.' + forumId + '/';
- } else if (rule === 'member') {
- const matches = url.match(regexMap.member);
- const memberId = matches[1];
- const memberName = matches[2].toLowerCase();
- newUrl = baseNewUrlMap.member + memberName + '.' + memberId + '/';
- } else {
- const threadId = url.match(regexMap[rule])[1];
- const baseNewUrl = baseNewUrlMap[rule];
- newUrl = baseNewUrl + threadId;
- const query = url.indexOf('?') > -1 ? url.substring(url.indexOf('?') + 1) : '';
- const queryParts = query ? query.split('&') : [];
- const newQuery = queryParts.slice(1).join('&');
- newUrl = newUrl + (newQuery ? '&' + newQuery : '');
- }
- document.body.innerHTML = '';
- document.title = 'Detected old URL, redirecting';
- const container = document.createElement('div');
- container.className = 'container';
- document.body.appendChild(container);
- const text = document.createElement('div');
- text.className = 'text';
- text.textContent = 'Detected old URL, redirecting';
- let dots = 0;
- const interval = setInterval(() => {
- dots = (dots + 1) % 4;
- text.textContent = `Detected old URL, redirecting${'.'.repeat(dots)}`;
- }, 500);
- container.appendChild(text);
- setTimeout(() => {
- clearInterval(interval);
- window.location.href = newUrl;
- }, 2000);
- } else if (!document.title.includes('Oops!')) {
- document.body.innerHTML = '';
- document.title = 'Unable to match string as old gamesquad URL.';
- const container = document.createElement('div');
- container.className = 'container';
- document.body.appendChild(container);
- const errorMessage = document.createElement('div');
- errorMessage.className = 'text';
- errorMessage.textContent = 'Unable to match string as old gamesquad URL.';
- container.appendChild(errorMessage);
- const backButton = document.createElement('button');
- backButton.className = 'back-button';
- const action = window.history.length > 1 ? { text: 'Back', handler: () => window.history.go(-1) } : { text: 'Close', handler: () => window.close() };
- backButton.textContent = action.text;
- backButton.onclick = action.handler;
- container.appendChild(backButton);
- const style = document.createElement('style');
- style.textContent = `
- .container {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- height: 100vh;
- }
- .text {
- font-size: 24px;
- font-weight: bold;
- color: #000;
- text-align: center;
- margin-bottom: 20px;
- }
- .back-button {
- padding: 10px 20px;
- border: none;
- border-radius: 5px;
- background-color: #4CAF50;
- color: #fff;
- cursor: pointer;
- margin: 0 auto;
- display: block;
- }
- `;
- document.head.appendChild(style);
- }
- } else {
- return;
- }
- };
- xhr.send();
- })();