Disables the automatic downscaling of Twitch streams while tabbed away
当前为
// ==UserScript==
// @name Twitch - Disable automatic video downscale
// @namespace CommanderRoot
// @copyright CommanderRoot
// @license Unlicense
// @version 1.2.3
// @description Disables the automatic downscaling of Twitch streams while tabbed away
// @author https://twitter.com/CommanderRoot
// @match https://www.twitch.tv/*
// @match https://m.twitch.tv/*
// @match https://player.twitch.tv/*
// @grant none
// @run-at document-start
// ==/UserScript==
"use strict";
// Try to trick the site into thinking it's never hidden
Object.defineProperty(document, 'visibilityState', { value: 'visible', writable: false });
Object.defineProperty(document, 'webkitVisibilityState', { value: 'visible', writable: false });
document.hasFocus = function () { return true; };
document.dispatchEvent(new Event('visibilitychange'));
let lastVideoPlaying = null;
// visibilitychange events are captured and stopped
document.addEventListener('visibilitychange', function (e) {
e.stopImmediatePropagation();
// Try to play the video on Chrome
if (typeof chrome !== 'undefined') {
if (document.hidden) {
const videos = document.getElementsByTagName('video');
if (videos.length > 0) {
lastVideoPlaying = !videos[0].paused && !videos[0].ended;
} else {
lastVideoPlaying = false;
}
} else {
playVideo();
}
}
}, true);
function setQualitySettings() {
// Set the player quality to "Source"
try {
window.localStorage.setItem('s-qs-ts', Math.floor(Date.now()));
window.localStorage.setItem('video-quality', '{"default":"chunked"}');
} catch (e) {
console.log(e);
}
}
function playVideo() {
const videos = document.getElementsByTagName('video');
if (videos.length > 0) {
if (lastVideoPlaying === true && !videos[0].ended) {
videos[0].play();
}
}
}
setQualitySettings();
// Add event handler for when we switch between pages
// This is useful when we switch for example from a Clip
// without "Source" to a livestream
window.addEventListener('popstate', () => {
setQualitySettings();
});