您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
將聊天室與直播位置切換
- // ==UserScript==
- // @name Youtube Interface Modification
- // @namespace https://github.com/RutsuLun
- // @version 1.7
- // @description 將聊天室與直播位置切換
- // @author Rutsu Lun
- // @match https://www.youtube.com/*
- // @icon https://www.google.com/s2/favicons?domain=youtube.com
- // @license Only Share
- // @grant GM.registerMenuCommand
- // ==/UserScript==
- (function () {
- GM.registerMenuCommand('呼叫', Lun_createBtnList);
- GM.registerMenuCommand('介面', Lun_loayoutSwitch);
- GM.registerMenuCommand('emoji調整', Lun_removeEmojiTag);
- GM.registerMenuCommand('移除愛心', hideShitHard);
- // GM.registerMenuCommand('表符', Lun_emojiMenuChenge);
- })();
- const btnListSetting = [
- { id: 'Lun_loayoutSwitch', name: '介面', method: Lun_loayoutSwitch, },
- { id: 'Lun_emojiMenuChenge', name: '表符', method: Lun_removeEmojiTag, },
- { id: 'Lun_emojiMenuChenge', name: '移除愛心', method: hideShitHard, },
- ]
- const btnListCss = 'position: absolute;top: 0;left: 0;'
- function Lun_loayoutSwitch() {
- document.getElementById('columns').style.cssText == '' ? document.getElementById('columns').style.cssText = 'flex-direction: row-reverse;' : document.getElementById('columns').style.cssText = '';
- document.querySelector('ytd-player').style.cssText += 'border-radius: 0;'
- }
- function Lun_removeEmojiTag() {
- const iframe = document.getElementById('chatframe');
- if (iframe.contentDocument) {
- var iframeDocument = iframe.contentDocument;
- var category = iframeDocument.getElementById('category-buttons');
- var search = iframeDocument.getElementById('search-panel');
- var emoji = iframeDocument.querySelector('yt-emoji-picker-renderer');
- category.style.cssText += 'display:none;'
- search.style.cssText += 'display:none;'
- emoji.style.cssText += 'margin: -5px -24px !important'
- }
- }
- function Lun_emojiMenuChenge() {
- const iframe = document.getElementById('chatframe');
- if (iframe.contentDocument) {
- var iframeDocument = iframe.contentDocument;
- var targetElement = iframeDocument.querySelector('yt-emoji-picker-renderer[floating-emoji-picker]');
- targetElement.style.cssText = 'min-height: 400px';
- }
- }
- function hideShitHard() {
- const iframe = document.getElementById('chatframe');
- if (iframe.contentDocument) {
- var iframeDocument = iframe.contentDocument;
- var targetElement = iframeDocument.querySelector('#reaction-control-panel');
- targetElement.style.cssText = 'display:none;'
- }
- }
- function Lun_createBtnList() {
- const chat = document.getElementById('secondary');
- if (chat && document.querySelector('Lun_btnList') == null) {
- const btnList = document.createElement('span');
- btnList.id = 'Lun_btnList';
- btnList.style = btnListCss;
- chat.append(btnList);
- btnListSetting.forEach(b => {
- let btn = document.createElement('button');
- btn.id = b.id;
- btn.innerText = b.name;
- btnList.append(btn);
- btn.addEventListener('click', b.method);
- });
- }
- }
- const main = function () {
- // Lun_emojiMenuChenge();
- console.log('載入完畢');
- Lun_createBtnList();
- }
- const injectScript = function (frameWindow) {
- main()
- }
- const retrieveChatFrameWindow = function () {
- if (window.location.pathname === "/live_chat" || window.location.pathname === "/live_chat_replay") return window;
- for (let i = 0; i < window.frames.length; i++) {
- try {
- if (window.frames[i].location) {
- let pathname = window.frames[i].location.pathname;
- if (pathname === "/live_chat" || pathname === "/live_chat_replay") return frames[i];
- }
- } catch (ex) { }
- }
- }
- const tryBrowserIndependentExecution = function () {
- let destinationFrameWindow = retrieveChatFrameWindow();
- if (!destinationFrameWindow || !destinationFrameWindow.document || destinationFrameWindow.document.readyState != "complete") {
- setTimeout(tryBrowserIndependentExecution, 1000);
- return;
- }
- if (destinationFrameWindow.channelResolverInitialized) return;
- injectScript(destinationFrameWindow);
- destinationFrameWindow.channelResolverInitialized = true;
- }
- const getPopup = () => {
- let pop = document.querySelector('ytd-popup-container')
- if (pop == null) {
- setTimeout(getPopup, 1000);
- console.log(pop)
- } else {
- pop.remove();
- }
- }
- if (ytInitialPlayerResponse.videoDetails.isLiveContent) {
- console.log('直播')
- tryBrowserIndependentExecution();
- } else {
- console.log('正常影片')
- }