Removes the newly implemented roblox URL tracking parameters.
// ==UserScript==
// @name Remove Roblox URL Tracking
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Removes the newly implemented roblox URL tracking parameters.
// @author ImFirstPlace
// @match *://www.roblox.com/*
// @match *://web.roblox.com/*
// @icon https://www.google.com/s2/favicons?domain=roblox.com
// @grant none
// @run-at document-start
// @noframes
// @license GPL-3.0 License
// ==/UserScript==
// For some reason userscripts run multiple times on roblox so noframes is added
(function() {
'use strict';
const knownTrackingParams = [
"gameSetTypeId",
"homePageSessionInfo",
"SearchId",
"gameSearchSessionInfo"
]
function sanitizeURL(Url) {
var urlSplit = Url.split("?")
if (urlSplit.length >= 2) {
const urlParams = new URLSearchParams(Url)
// Game referring
if (Url.includes("refer?") && urlParams.has("PlaceId")) {
return `https://www.roblox.com/games/${urlParams.get("PlaceId")}`
}
// Library referring
if (urlSplit[0].includes("/library/refer")) {
const slashSplit = urlSplit[0].split("/")
return `https://www.roblox.com/library/${slashSplit[5]}`
}
// General parameters
for (const param of knownTrackingParams) {
if (urlSplit[1].includes(param)) { // urlParams.has seems to not work with the homePageSessionInfo param
return urlSplit[0]
}
}
}
return false // Don't bother setting the url exact same thing!
}
function handleClick(e) {
var a = e.target;
while (a && !a.href) {
a = a.parentElement;
}
if (!a) {
return;
}
var realUrl = sanitizeURL(a.href)
if (realUrl) {
a.href = realUrl
}
}
document.addEventListener('click', handleClick, true);
document.addEventListener('mousedown', handleClick, true);
document.addEventListener('touchstart', handleClick, true);
})();