將 YT 某些元素進行隱藏
当前为
// ==UserScript==
// @name YT Hide Recom Tool
// @version 0.0.13
// @author HentaiSaru
// @description 將 YT 某些元素進行隱藏
// @icon https://cdn-icons-png.flaticon.com/512/1383/1383260.png
// @run-at document-end
// @match *://www.youtube.com/*
// @license MIT
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @namespace https://greasyfork.org/users/989635
// ==/UserScript==
/*
Original Author Page : [https://github.com/hoothin/]
Original Author Link : [https://greasyfork.org/zh-TW/scripts/438403-youtube-hide-related-suggestion-which-occlude-the-video]
*/
(function() {
var currentUrl = window.location.href;
let pattern = /^https:\/\/www\.youtube\.com\/.+$/;
// 在首頁不會載入以下方法
if (pattern.test(currentUrl)) {
// 為推薦卡添加 css 樣式
let css = `
.ytp-ce-element{opacity: 0.1!important;}
.ytp-ce-element:hover{opacity: 1!important;}
`;
if (typeof GM_addStyle !== "undefined") {
GM_addStyle(css);
} else {
let ElementNode = document.createElement("style");
ElementNode.appendChild(document.createTextNode(css));
(document.querySelector("head") || document.documentElement).appendChild(ElementNode);
}
/* -------------------------------------------- */
const Menu = GM_registerMenuCommand(
"📜 [功能說明]",
function() {
alert(
"功能失效時 [請重新整理] !!\n\n(Shift) : 完全隱藏影片尾部推薦\n(Alt + 1) : 隱藏右側影片推薦\n(Alt + 2) : 隱藏留言區\n(Alt + 3) : 隱藏功能選項\n(Alt + 4) : 隱藏播放清單資訊\n(Ctrl + Z) : 使用極簡化"
);
}
);/* -------------------------------------------- */
// 隱藏判斷
function HideJudgment(element, gm="") {
if (element.style.display === "none") {
element.style.display = "block";
if (gm !== "") {GM_setValue(gm, false);}
} else {
element.style.display = "none";
if (gm !== "") {GM_setValue(gm, true);}
}
}
function SetTrigger(element) {
element.style.display = "none";
return new Promise(resolve => {
setTimeout(function() {
if (element.style.display === "none") {
resolve(true);
} else {
resolve(false);
}
}, 300);
});
}
async function runAsync() {
// 監聽快捷鍵
document.addEventListener("keydown", function(event) {
if (event.shiftKey) {
event.preventDefault();
let elements = document.querySelectorAll(".ytp-ce-element, .ytp-ce-covering");
elements.forEach(function(element) {
HideJudgment(element);
});
} else if (event.ctrlKey && event.key === "z") {
event.preventDefault();
let UserMenu = document.getElementById("end");
let Message = document.getElementById("below");
let RecommViewing = document.getElementById("secondary");
if (GM_getValue("極簡化", [])) {
UserMenu.style.display = "block";
Message.style.display = "block";
RecommViewing.style.display = "block";
GM_setValue("極簡化", false);
} else {
UserMenu.style.display = "none";
Message.style.display = "none";
RecommViewing.style.display = "none";
GM_setValue("極簡化", true);
}
} else if (event.altKey && event.key === "1") {
event.preventDefault();
let element = document.getElementById("secondary");
HideJudgment(element, "Trigger_1");
} else if (event.altKey && event.key === "2") {
event.preventDefault();
let element = document.getElementById("comments");
HideJudgment(element, "Trigger_2");
} else if (event.altKey && event.key === "3") {
event.preventDefault();
let element = document.getElementById("menu-container");
HideJudgment(element, "Trigger_3");
} else if (event.altKey && event.key === "4") {
event.preventDefault();
let element = document.querySelector("#page-manager > ytd-browse > ytd-playlist-header-renderer > div");
HideJudgment(element, "Trigger_4");
}
});
// 判斷在播放頁面運行
let VVP_Pattern = /^https:\/\/www\.youtube\.com\/watch\?v=.+$/;
// 判斷在播放清單運行
let Playlist_Pattern = /^https:\/\/www\.youtube\.com\/playlist\?list=.+$/;
if (VVP_Pattern.test(currentUrl)) {
if (GM_getValue("極簡化", [])) {
let interval;
interval = setInterval(function() {
let UserMenu = document.getElementById("end");
let Message = document.getElementById("below");
let RecommViewing = document.getElementById("secondary");
if (UserMenu && Message && RecommViewing) {
Promise.all([SetTrigger(UserMenu), SetTrigger(Message), SetTrigger(RecommViewing)]).then(results => {
if (results[0] && results[1] && results[2]) {
clearInterval(interval);
return;
}
});
}
}, 1000);
}
if (GM_getValue("Trigger_1", [])){
let interval;
interval = setInterval(function() {
let element = document.getElementById("secondary");
if (element) {
SetTrigger(element).then(result => {
clearInterval(interval);
});
}
}, 1000);
}
if (GM_getValue("Trigger_2", [])){
let interval;
interval = setInterval(function() {
let element = document.getElementById("comments");
if (element) {
SetTrigger(element).then(result => {
clearInterval(interval);
});
}
}, 1000);
}
if (GM_getValue("Trigger_3", [])){
let interval;
interval = setInterval(function() {
let element = document.getElementById("menu-container");
if (element) {
SetTrigger(element).then(result => {
clearInterval(interval);
});
}
}, 1000);
}
} else if (Playlist_Pattern.test(currentUrl)) {
if (GM_getValue("Trigger_4", [])){
let interval;
interval = setInterval(function() {
let element = document.querySelector("#page-manager > ytd-browse > ytd-playlist-header-renderer > div");
if (element) {
SetTrigger(element).then(result => {
clearInterval(interval);
});
}
}, 1000);
}
}
}
// 異步運行
runAsync();
}
})();