您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows m.YouTube.com background play, especially useful for iPhone users
当前为
- // ==UserScript==
- // @name m.YouTube.com allow background play
- // @namespace m-youtube-com-allow-background-play
- // @version 1.0
- // @description Allows m.YouTube.com background play, especially useful for iPhone users
- // @author hlorand.hu
- // @match https://m.youtube.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
- // @grant none
- // @license https://creativecommons.org/licenses/by-nc-sa/4.0/
- // ==/UserScript==
- // Original code: https://addons.mozilla.org/en-US/android/addon/video-background-play-fix/
- (function() {
- //'use strict';
- const IS_YOUTUBE = window.location.hostname.search(/(?:^|.+\.)youtube\.com/) > -1 ||
- window.location.hostname.search(/(?:^|.+\.)youtube-nocookie\.com/) > -1;
- const IS_MOBILE_YOUTUBE = window.location.hostname == 'm.youtube.com';
- const IS_DESKTOP_YOUTUBE = IS_YOUTUBE && !IS_MOBILE_YOUTUBE;
- const IS_VIMEO = window.location.hostname.search(/(?:^|.+\.)vimeo\.com/) > -1;
- const IS_ANDROID = window.navigator.userAgent.indexOf('Android') > -1;
- // Page Visibility API
- if (IS_ANDROID || !IS_DESKTOP_YOUTUBE) {
- Object.defineProperties(document.wrappedJSObject,
- { 'hidden': {value: false}, 'visibilityState': {value: 'visible'} });
- }
- window.addEventListener(
- 'visibilitychange', evt => evt.stopImmediatePropagation(), true);
- // Fullscreen API
- if (IS_VIMEO) {
- window.addEventListener(
- 'fullscreenchange', evt => evt.stopImmediatePropagation(), true);
- }
- // User activity tracking
- if (IS_YOUTUBE) {
- loop(pressKey, 60 * 1000, 10 * 1000); // every minute +/- 5 seconds
- }
- function pressKey() {
- const keyCodes = [18];
- let key = keyCodes[getRandomInt(0, keyCodes.length)];
- sendKeyEvent("keydown", key);
- sendKeyEvent("keyup", key);
- }
- function sendKeyEvent (aEvent, aKey) {
- document.dispatchEvent(new KeyboardEvent(aEvent, {
- bubbles: true,
- cancelable: true,
- keyCode: aKey,
- which: aKey,
- }));
- }
- function loop(aCallback, aDelay, aJitter) {
- let jitter = getRandomInt(-aJitter/2, aJitter/2);
- let delay = Math.max(aDelay + jitter, 0);
- window.setTimeout(() => {
- aCallback();
- loop(aCallback, aDelay, aJitter);
- }, delay);
- }
- function getRandomInt(aMin, aMax) {
- let min = Math.ceil(aMin);
- let max = Math.floor(aMax);
- return Math.floor(Math.random() * (max - min)) + min;
- }
- })();