Cant open games in new tab

Wait, you can’t do that anymore?
image
That sucks, because you can’t right click and open in a new tab either.
I’m using Firefox on Windows.

Using the information in your post I’ve created a Tampermonkey script that should automatically apply the fix on every page. Just add the script to the Tampermonkey extension and it should just do its thing :slight_smile:

EDIT: Update my script so it also works on the discover page, and is a little less spammy downloading place ids :upside_down_face:

// ==UserScript==
// @name         Revive Roblox Game Links
// @namespace    https://roblox.com/__revive_roblox_game_links
// @version      0.2
// @description  Reinstates game links on Roblox game cards
// @author       Brinker7 on Roblox
// @match        https://www.roblox.com/*
// @icon         https://www.roblox.com/favicon.ico
// @grant        none
// ==/UserScript==

const knownPlaceIds = new Map();
const universeIdQueue = [];

(function () {
    'use strict';

    const getRootPlaceId = (universeId) => {
        return new Promise((resolve, reject) => {
            const universeIdString = universeId.toString();

            if (knownPlaceIds.has(universeIdString)) {
                return resolve(knownPlaceIds.get(universeIdString));
            }

            universeIdQueue.push({
                universeId: universeIdString,
                cb: (placeId) => {
                    resolve(placeId);
                },
                err: reject
            });
        });
    };

    const downloadUniverseIds = () => {
        if (universeIdQueue.length <= 0) {
            return;
        }

        const toDownload = new Map();
        for (let i = 0; i < 30; i++) {
            const task = universeIdQueue.pop();
            if (task) {
                toDownload.set(task.universeId, task);
            }
        }

        const universeIds = [...toDownload.keys()].join(",");
        const onError = (err) => {
            toDownload.forEach((task, _) => task.err(err))
        }

        fetch(`https://games.roblox.com/v1/games?universeIds=${universeIds}`)
            .then(response => response.json())
            .then(responseBody => {
                for (const universe of responseBody.data) {
                    const rootPlaceId = universe.rootPlaceId;
                    const universeIdString = universe.id.toString();

                    knownPlaceIds.set(universeIdString, rootPlaceId);
                    toDownload.get(universeIdString.toString()).cb(rootPlaceId);
                }
            })
            .catch(onError);
    };

    const processGameCardLink = async (element) => {
        const universeId = element.id;
        const rootPlaceId = await getRootPlaceId(universeId);

        element.href = `/games/${rootPlaceId}`;
    };

    const processCardsIn = async (root) => {
        for (const gameCard of root.querySelectorAll('.game-card-link')) {
            await processGameCardLink(gameCard);
        }
    };

    const filter = (someList, conditional) => {
        const outputList = [];
        for (const node of someList) {
            if (conditional(node)) {
                outputList.push(node);
            }
        }

        return outputList;
    }

    const gameCardClasses = [
        'game-cards',
        'games-list-container',
        'game-card'
    ]

    const mutationObserver = new MutationObserver((mutationList, _) => {
        for (const mutation of filter(mutationList, mutation => mutation.type === 'childList')) {
            for (const node of filter(mutation.addedNodes, node => !!node.classList)) {
                for (const targetClass of gameCardClasses) {
                    if (node.classList.contains(targetClass)) {
                        processCardsIn(node).then(() => { }).catch(console.error);
                    }
                }
            }
        }
    });

    processCardsIn(document).then(() => { }).catch(console.error);

    mutationObserver.observe(document.body, { childList: true, subtree: true });
    const downloadTimer = setInterval(downloadUniverseIds, 50);

    setTimeout(() => {
        clearInterval(downloadTimer);
        mutationObserver.disconnect()
    }, 10000); // Assume page is done loading after 10 seconds, quit to reduce resource usage
})();
12 Likes

Would recommend using this script for now, until either ROBLOX fixes it or… they leave it like this forever. But the script works well, thank you!

This works perfectly, thank you!

(Would recommend using until Roblox sorts this out.)

This may be a website bug or an odd update towards the website. Perhaps it might be an issue when using Chrome, as this is still happening on the latest version of Chrome.

This is extremely helpful! Something to note is that Roblox deletes game-card-link elements from the DOM when the scrollbar is offscreen while keeping the game-card elements.

I have ported some of your code, while also using some of my own code to create a chrome extension which fixes this. Please feel free to edit it to make my unholy mess of unknowledgeable javascript more efficient.

Edit: Working patches have been discussed in my post above, duplicate links removed to reduce spam (see Original Post).

Original post

This is extremely helpful!

Something to note is that Roblox deletes game-card-link elements from the DOM when the scrollbar is offscreen while keeping the game-card elements.

I ported this (somewhat) to be a chrome extension. I say somewhat because it uses some of the code I had initially used for a previous chrome extension I was working on to solve this problem. It only updates a specific games-list-container/etc when the user’s mouse enters said container (and continues to update it while the users mouse is in said container).

You can download the chrome extension here.
It has been published for review on the chrome web store, but in the meantime you can manually download and add the extension by following the directions on github.

2 Likes

I just noticed this after reading your post and it’s absolutely nightmarish. Fortunately you can still open other things in new tabs, just not experiences. Highlighting the name of experiences will open it as well.

I’m glad I’m not the only one experiencing this problem.
I almost always open stuff in new tabs, especially games and stuff. I don’t like this at all, and I hope they can fix it.

1 Like

Can confirm, this started happening a few days ago.

I used to be able to right-click on a game on the Home page and open it in a new tab that way, but now I’m unable to do so. I’ve accidentally clicked on “Save Page As…” several times before because of this.

image

4 Likes

Same situation occurs for me too. No matter what browser I use (firefox, google etc) and whether or not I have an adblock on, I can’t open a new tab. It seriously messes with how I use the games page because now I have to open a new tab to try and search the game up in order to preserve my place in the original tab.

1 Like

I can confirm this is happening to me too and is frustrating as a player since usually what I do is play many games and I do this:
I go on Continue page and then right click and open new tab on the games I play. But annoying and like how Aeventy said no clicking on the name doesn’t add the option.

I can confirm that you cannot middle/right click on a Game to open a new tab on Firefox 88.0.1 (64-bit) installed on Windows 8.1 x64 (Build 9600)

1 Like

Works amazingly.

Thank you so much! Hopefully it’ll be on the Chrome Web Store/Microsoft Edge Extensions/Opera Addons soon :smiley:

1 Like

I just noticed this issue, the script works nicely!

I’ve updated my script so it works a bit better, details are in the post.

2 Likes

Why. Everything I open is in a new tab. Why did they remove this :weary:

Roblox please fix this if its a bug, so many people would rather have new tabs instead of just one.

The chrome extension that fixes this is now available on the chrome webstore: RoLinker - Chrome Web Store

See original post: https://devforum.roblox.com/t/-/1260784/5

2 Likes

Works great but the only issue is that if you are doing a deep dive through the discover page then the script is rendered null after 10 seconds.

Can you port this to Firefox? I don’t want to use Chrome for obvious reasons.

EDIT: Just realized there’s a Tampermonkey script.

1 Like

If you press the scroll button on your mouse, it will automatically come to a new tab