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 0.4.1
// @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);
}, 200);
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
});
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,
});
}
}