Skip to content

Instantly share code, notes, and snippets.

@prr21
Last active August 23, 2026 23:39
Show Gist options
  • Select an option

  • Save prr21/bcab57d74e4aa8245568dc0e17b841a0 to your computer and use it in GitHub Desktop.

Select an option

Save prr21/bcab57d74e4aa8245568dc0e17b841a0 to your computer and use it in GitHub Desktop.
Youtube hidden spoilers.user
// ==UserScript==
// @name Youtube hidden spoilers
// @namespace http://tampermonkey.net/
// @version 2.0
// @description try to take over the world!
// @author You
// @match *://*.youtube.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant none
// ==/UserScript==
(function() {
hideTitleOnChange()
applyStyles()
})();
function hideTitleOnChange() {
const maskedTitle = '*****';
document.title = maskedTitle;
// 1. Перехват document.title
const originalTitleDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'title');
Object.defineProperty(document, 'title', {
get() {
return maskedTitle;
},
set(newTitle) {
// Блокируем изменение
},
configurable: true
});
// 2. MutationObserver на случай прямого изменения <title>
const titleEl = document.querySelector('title');
if (titleEl) {
const observer = new MutationObserver(() => {
if (titleEl.textContent !== maskedTitle) {
titleEl.textContent = maskedTitle;
}
});
observer.observe(titleEl, {
childList: true,
subtree: true,
characterData: true
});
}
}
function applyStyles(){
if (window.trustedTypes && window.trustedTypes.createPolicy && !window.trustedTypes.defaultPolicy) {
window.trustedTypes.createPolicy('default', {
createHTML: string => string
// Optional, only needed for script (url) tags
//,createScriptURL: string => string
//,createScript: string => string,
});
}
const style = document.createElement('style')
style.innerHTML = `
ytd-rich-grid-media[mini-mode] #video-title.ytd-rich-grid-media {
font-size: 0
}
ytd-video-preview,
img.yt-core-image--fill-parent-height,
img.yt-img-shadow {filter: blur(60px)}
yt-thumbnail-view-model,
.ytp-ce-element.ytp-ce-element-show,
.ytd-video-renderer,
.ytd-thumbnail,
#video-title {filter: blur(10px)}
ytd-thumbnail-overlay-time-status-renderer,
.title.ytd-video-primary-info-renderer {opacity: 0 !important}
.ytp-larger-tap-buttons .ytp-time-display,
#video-title.ytd-compact-video-renderer,
.ytp-time-duration,
h1.ytd-watch-metadata,
yt-thumbnail-overlay-badge-view-model,
.ytp-time-display,
.ytPlayerOverlayVideoDetailsRendererHost,
.ytp-progress-bar {display: none !important}
#video-title.ytd-video-renderer,
.html5-video-player a {font-size: 0 !important}
`
document.body.appendChild(style)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment