Greasy Fork

Greasy Fork is available in English.

Audio Tab Title

Change the window title on YouTube based on the channel name and video title, and append the website name on Spotify and SoundCloud pages.

目前为 2025-02-10 提交的版本。查看 最新版本

// ==UserScript==
// @name         Audio Tab Title
// @description  Change the window title on YouTube based on the channel name and video title, and append the website name on Spotify and SoundCloud pages.
// @version      0.5.1
// @namespace    itsafeature.org
// @author       Geoffrey De Belie (Smile4ever)
// @license      Unlicense
// @match        https://www.youtube.com/watch?v=*
// @match        https://music.youtube.com/*
// @match        https://open.spotify.com/*
// @match        https://soundcloud.com/*
// @match        https://music.amazon.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Format GrupoBryndisOficial to Grupo Bryndis
    function formatChannelName(name) {
        if (!name.includes(" ")) {
            name = name.replace(/([a-z])([A-Z])/g, '$1 $2'); // Add spaces if none exist
        }
        return name.replace("Oficial", "").trim(); // Remove "Oficial" and trim spaces
    }

    // Function to update the title on YouTube
    function updateYouTubeTitle() {
        const channelElement = document.querySelector('a.yt-simple-endpoint.style-scope.yt-formatted-string');
        const videoTitleElement = document.querySelector('#above-the-fold #title');

        if (channelElement && videoTitleElement) {
            const channelNameClean = formatChannelName(channelElement.innerText.split(' - ')[0].split('|')[0]);
            const videoTitle = videoTitleElement.innerText;

            const spaceIndex = videoTitle.indexOf(' ');
            const dashIndex = videoTitle.indexOf('-');

            // If there's no space, continue. If the first dash appears before the first space, get out
            if (spaceIndex != -1 && dashIndex != -1 && dashIndex < spaceIndex) return;

            // Set the window title for YouTube if needed
            if(dashIndex === -1){
                document.title = `${channelNameClean} - ${videoTitle} - YouTube`;
            }
        }
    }

    // Function to update the title on YouTube Music
    function updateYouTubeMusicTitle() {
        const elements = document.querySelectorAll('.ytmusic-player-bar yt-formatted-string');
        if (elements.length < 2) return;

        const artistElement = elements[1];
        const audioTitleElement = elements[0];

        if (artistElement && audioTitleElement) {
            const artistName = artistElement.childNodes[0].innerText;
            const audioTitle = audioTitleElement.innerText;

            // Set the window title for YouTube Music
            document.title = `${artistName} - ${audioTitle} - YouTube Music`;
        }
    }

    // Function to update the title on Spotify
    function updateSpotifyTitle() {
        const titleElement = document.querySelector('title'); // Get the <title> element
        if (titleElement.innerText.includes(" - Spotify") == false) {
            titleElement.innerText = `${titleElement.innerText} - Spotify`; // Set the title's innerText for Spotify
        }
    }

     function updateSoundCloudTitle() {
        const titleElement = document.querySelector('title'); // Get the <title> element
        if (titleElement.innerText.includes(" - SoundCloud") == false) {
            titleElement.innerText = `${titleElement.innerText} - SoundCloud`; // Set the title's innerText for Spotify
        }
    }

    function updateAmazonMusicTitle(){
        const shadowHost = document.querySelector('music-horizontal-item');
        const shadowRoot = shadowHost.shadowRoot;
        const musicLinks = shadowRoot.querySelectorAll('music-link');

        if (musicLinks.length >= 2) {
            const songTitle = musicLinks[0].getAttribute('title');
            const artistTitle = musicLinks[1].getAttribute('title');

            document.title = `${artistTitle} - ${songTitle} - Amazon Music`;
        }
    }

    // Function to check for the current platform
    function updateTitle() {
        if (window.location.hostname == 'music.youtube.com'){
            updateYouTubeMusicTitle();
        } else if (window.location.hostname.includes('youtube.com')) {
            updateYouTubeTitle();
        } else if (window.location.hostname.includes('spotify.com')) {
            updateSpotifyTitle();
        } else if (window.location.hostname.includes('soundcloud.com')) {
            updateSoundCloudTitle();
        } else if (window.location.hostname.includes('music.amazon.com')) {
            updateAmazonMusicTitle();
        }
    }

    // Optionally, observe changes in the page if the title might update after load
    const observer = new MutationObserver(updateTitle);
    observer.observe(document.body, { childList: true, subtree: true });

    // Wait for the page content to load before running the updateTitle function
    window.addEventListener('load', updateTitle);

    // Set an interval to check the title every second on Spotify pages only
    setInterval(() => {
        updateTitle(); // Update the title every X seconds (if needed)
    }, 2000);
})();