Greasy Fork is available in English.
This script load bttv without having to download the extension; Also have a better dark theme, try it!
当前为
// ==UserScript==
// @name Twitch BetterTTV without extension and better dark theme
// @namespace http://tampermonkey.net/
// @version 1.0.2
// @description This script load bttv without having to download the extension; Also have a better dark theme, try it!
// @author Daybr3akz
// @license MIT
// @copyright 2017, daybreakz (https://openuserjs.org/users/daybreakz)
// @match https://www.twitch.tv/*
// @grant none
// ==/UserScript==
(function betterttv() {
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = '';
script.onload = () => console.log('BetterTTV loaded');
const head = document.getElementsByTagName('head')[0];
if (!head) return;
head.appendChild(script);
})();
const DEFAULT_DARK_THEME = ''
(function darkThemeManager() {
function loadStyle(src, callback) {
// nothing malicious, this is a Stylish userscript loading some css;
// we are going to hook that css, allowing to disable it in light mode
// we need the style element that is added to the DOM by this script;
const oldCreateElement = document.createElement;
document.createElement = function(tagName) {
const node = oldCreateElement.apply(this, arguments);
if (tagName === 'style') {
node.setAttribute('media', 'none'); // disableCSS on load
callback(node);
document.createElement = oldCreateElement;
}
return node;
};
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
const head = document.getElementsByTagName('head')[0];
if (!head) return;
head.appendChild(script);
}
let styleNode;
function onThemeChange(isDark) {
if (!styleNode) return;
styleNode.setAttribute('media', isDark ? '' : 'none');
}
let bodyObserver;
function setupObserver() {
let bodyHasDark = 'unknown';
bodyObserver = new MutationObserver(() => {
const current = $('body').hasClass('theme--dark');
if (bodyHasDark !== current) {
bodyHasDark = current;
onThemeChange(current);
}
});
bodyObserver.observe(document.body, {
attributes: true,
childList: false,
characterData: false
});
}
loadStyle(DEFAULT_DARK_THEME, loadedStyleNode => {
styleNode = loadedStyleNode;
onThemeChange($('body').hasClass('theme--dark'));
});
setupObserver();
})();