Replaces Kick embed with a full channel page and enables theatre mode on Kick.com only when loaded as an embed replacement
当前为
// ==UserScript==
// @name Replace Kick Embed with Channel Page and Enable Theatre Mode
// @namespace https://player.kick.com/
// @version 1.2
// @description Replaces Kick embed with a full channel page and enables theatre mode on Kick.com only when loaded as an embed replacement
// @author nobody
// @match *://player.kick.com/*
// @match *://kick.com/*
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-start
// @license GPL-3.0-or-later
// ==/UserScript==
if (window.location.host.includes("player.kick.com")) {
// Code for the embed page: Replace the Kick player with a full channel page
const observer = new MutationObserver(() => {
const playerContainer = document.querySelector(".video-container");
if (playerContainer) {
// Extract channel information from the URL
const channelUrl = window.location.href;
console.log("Channel URL:", channelUrl);
const channelId = channelUrl.split("/")[3]; // Assumes URL is like: https://player.kick.com/channel/{channelId}
console.log("Channel ID:", channelId);
// Create an iframe for the full Kick channel page
const iframe = document.createElement("iframe");
iframe.src = `https://kick.com/${channelId}`;
iframe.style.width = "100%";
iframe.style.height = "100vh"; // Full viewport height
iframe.style.border = "none";
// Replace the embed with the full channel page
playerContainer.innerHTML = "";
playerContainer.appendChild(iframe);
// Stop observing and mark that we replaced the embed
observer.disconnect();
GM_setValue("embedReplaced", true);
}
});
observer.observe(document.body, {
subtree: true,
childList: true,
});
} else if (window.location.host.includes("kick.com")) {
// Code for kick.com: Only run if the embed was replaced and the referrer indicates it came from player.kick.com
const embedReplacedValue = GM_getValue("embedReplaced", false);
if (embedReplacedValue && document.referrer.includes("player.kick.com")) {
console.log("Embed replacement detected via referrer. Enabling theatre mode...");
const observer2 = new MutationObserver(() => {
setTimeout(() => {
const clickEvent = new MouseEvent('click', {
bubbles: true,
cancelable: true
});
document.querySelector('#channel-chatroom > div:first-child > div > button')?.dispatchEvent(clickEvent);
// Uncomment the line below if you want the expand chat button to be deleted
document.querySelector("html body > div > div:nth-of-type(2) > div:nth-of-type(4) > main > div:first-of-type > div:first-of-type > button")?.remove();
}, 300);
setTimeout(() => {
// const keydownEvent = new KeyboardEvent('keydown', {
// key: 't',
// code: 'KeyT',
// keyCode: 84, // deprecated, but sometimes needed for compatibility
// which: 84, // deprecated, but sometimes needed for compatibility
// bubbles: true,
// cancelable: true
// });
const clickEvent = new MouseEvent('click', {
bubbles: true,
cancelable: true
});
document.querySelector("#injected-embedded-channel-player-video > div > div > div:nth-of-type(2) > button:nth-of-type(3)")?.dispatchEvent(clickEvent);
//document.querySelector('#video-player')?.dispatchEvent(keydownEvent);
}, 500);
observer2.disconnect();
// Clear the flag so subsequent direct visits to kick.com don't trigger theatre mode
GM_setValue("embedReplaced", false);
});
observer2.observe(document.body, {
subtree: true,
childList: true,
});
}
}