Greasy Fork is available in English.

Обсуждения » Хотелки

[Youtube] parse channel name into <title> tag

hello

Up until today I ran the following script but it seems Youtube must've changed something bc the script goes into an endless loop now.
Could someone revise the code and help me out?






// ==UserScript==
// @name YouTube Channel in Title
// @include https://*youtube.com/*
// @include https://www.youtube.com/c/*/live
// @include https://www.youtube.com/c/*/live*
// @exclude https://*youtube.com/channel/*
// @exclude https://www.youtube.com/user/*
// @exclude https://www.youtube.com/results?*
// @exclude https://www.youtube.com/playlist*
// @exclude https://www.youtube.com/feed/*
// @exclude https://www.youtube.com/post
// @exclude https://www.youtube.com/c/*
// ==/UserScript==
 
(function() {
 'use strict';
 
 var loadScript = function (content) {
 var tag = document.createElement('script');
 tag.type = 'text/javascript';
 tag.innerHTML = content;
 document.head.appendChild(tag);
 };
 
 loadScript(`
 var lastName = '';
 document.body.addEventListener('transitionend', function(event) {
 if (document.title != lastName) {
 const videoTitle = document.title.replace(' - YouTube', '');
 const owner = document.querySelector('ytd-channel-name').innerText;
 const date2 = document.querySelector('#date > yt-formatted-string.ytd-video-primary-info-renderer').innerText;
 lastName = "- " + videoTitle + " -- " + owner + "- -- " + date2;
 document.title = lastName;
 }
 });
 `);
})();

Here's a different approach:

// ==UserScript==
// @name  YouTube Channel in Title
// @match https://*.youtube.com/*
// @grant none
// ==/UserScript==

'use strict';

let title = '';
const mo = new MutationObserver(() => {
  mo.disconnect();
  pinTitle();
});
pinTitle();

function pinTitle() {
  title = document.title.replace(' - YouTube', '');
  if (location.pathname.startsWith('/watch')) {
    const owner = document.querySelector('ytd-channel-name').innerText;
    const date2 = document.querySelector('#date > yt-formatted-string.ytd-video-primary-info-renderer').innerText;
    title = `- ${title} -- ${owner}- -- ${date2}`;
  }
  document.title = title;
  mo.observe(document.querySelector('title'), {
    characterData: true,
    childList: true,
  });
}

hi. thank you
unfortunately nothing is happening.
I'm on firefox Version 88.0.1, Build ID 20210504152106

It works for me in Firefox + Greasemonkey/Violentmonkey/Tampermonkey.

Just created a fresh profile. Out of 50 opened tabs it maybe worked three times :S
unfortunately it didn't work once during the video

here's a video https://vimeo.com/545810573
password is: aaaaaaaaaaaa

I was testing in one tab... If no one else posts their solution, I'll make another try later.

alright thanks man

Why have you posted a video from Vimeo?
This script is only supposed to work on YT, maybe that's why you're saying it doesn't work

this was just to show how it works.

wOxxOmМод
§
Создано: 06.05.2021
Отредактировано: 06.05.2021

This seems to work correctly:

// ==UserScript==
// @name  YouTube Channel in Title
// @match https://*.youtube.com/*
// @grant none
// ==/UserScript==

'use strict';

const mo = new MutationObserver(pinTitle);
const $ = (sel, node = document) => node.querySelector(sel);

pinTitle();
document.addEventListener('yt-navigate-finish', pinTitle);

function pinTitle() {
  let title = document.title.replace(' - YouTube', '');
  if (location.pathname.startsWith('/watch')) {
    const name = $('.title')?.innerText || title;
    const owner = $('ytd-channel-name')?.innerText;
    const date2 = $('#date > yt-formatted-string.ytd-video-primary-info-renderer')?.innerText;
    title = `- ${name || ''} -- ${owner || ''}- -- ${date2 || ''}`;
  }
  if (document.title !== title) {
    mo.disconnect();
    document.title = title;
    mo.observe($('title'), {characterData: true, childList: true});
  }
}

legend. thank you

is there any way to remove that space before the hyphen? that's what I need to search channels

§
Создано: 06.05.2021
Отредактировано: 06.05.2021

nvm. solved it. thank you very much

const owner = $('a.yt-simple-endpoint.style-scope.yt-formatted-string')?.innerText;

also it seems like your script doesn't make the title vanish. because that's the problem I had with the other one.
after about ten minutes the title would refresh and I had to trigger the script by either pressing the bell, right-clicking the video or hovering around the video timeline. (that's why the weird mouse movements in the video above.)

where can I send dono?

hey. just wanted to drop by and give you another thanks. the script works wonderfully.
now not even the title changes when the bell has notifications.
It used to prefix the title with the amount of notifications pending in the inbox like: (6) -title-

thanks man

Ответить

Войдите, чтобы ответить.