Greasy Fork is available in English.
Change the window title on YouTube based on the channel name and video title, and append the website name on Spotify and SoundCloud pages.
当前为
// ==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.0
// @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';
// 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 = channelElement.innerText.split(' - ')[0].split('|')[0].replace(" Official", "");
console.log("channelNameClean: " + channelNameClean);
const videoTitle = videoTitleElement.innerText;
console.log("videoTitle: " + videoTitle);
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);
})();