Greasy Fork is available in English.
Netflix长按右箭头倍速播放
// ==UserScript==// @license AGPL License// @name Netflix长按倍速脚本// @name:en Netflix long press to speed up// @namespace Violentmonkey Scripts// @match https://www.netflix.com/*// @run-at document-start// @grant none// @version 1.0// @author n1nja88888// @description Netflix长按右箭头倍速播放// @description:en Netflix long press Arrow Right to speed up// ==/UserScript=='use strict'const speed = 2const forward = 5console.log('n1nja88888 creates this world!')!function () {//改变keydown事件监听器函数 忽略指定keyfunction keydownOmit(listener, omits) {return (...args) => {if (!omits.has(args[0].key))listener(...args)}}// netflix 是keydown下的div#appaMountpoint控制Element.prototype._addEventListener = Element.prototype.addEventListenerElement.prototype.addEventListener = function (type, listener, useCapture = false) {if (type === 'keydown')listener = keydownOmit(listener, new Set(['ArrowLeft', 'ArrowRight']))this._addEventListener(type, listener, useCapture)}}()main()function main() {// 倍速定时器let timer = null//初始速度,松开按键后是恢复到初始速度let initSpeed = -1// 获取nefliex内嵌的playerlet videoPlayer = nulllet player = null// 判断是否加速let isSpeeding = false// 复写keydown的事件监听器document.addEventListener('keydown', (e) => {if (isCombKey(e) || isActive('input', 'textarea') || !netflix)returnvideoPlayer = netflix.appContext.state.playerApp.getAPI().videoPlayerconst sessions = videoPlayer.getAllPlayerSessionIds()player = videoPlayer.getVideoPlayerBySessionId(sessions[sessions.length - 1])if (!player)returnswitch (e.key) {case 'ArrowLeft':player.seek(player.getCurrentTime() - forward * 1e3)breakcase 'ArrowRight':if (!timer) {timer = setTimeout(() => {isSpeeding = trueplayer.play()initSpeed = player.getPlaybackRate()player.setPlaybackRate(speed)}, 0.15e3)}break}})document.addEventListener('keyup', (e) => {if (e.key === 'ArrowRight') {clearTimeout(timer)timer = nullif (isSpeeding) {isSpeeding = falseplayer.setPlaybackRate(initSpeed)}elseplayer.seek(player.getCurrentTime() + forward * 1e3)}})}// 判断是否是组合键function isCombKey(e) {return e.ctrlKey || e.shiftkey || e.altKey || e.metaKey}// 判断当前页面活动元素function isActive(...eleSet) {for (const ele of eleSet) {if (ele instanceof HTMLElement) {if (document.activeElement === ele)return true}else {switch (ele.charAt(0)) {case '.':if (document.activeElement.classList.contains(ele.substring(1)))return truebreakcase '#':if (document.activeElement.id.toLowerCase() === ele.substring(1).toLowerCase())return truebreakdefault:if (document.activeElement.tagName.toLowerCase() === ele.toLowerCase())return true}}}return false}