写了个跳OP脚本
-
直接复制进油猴就能用,按住Ctrl+→向后跳转88秒
// ==UserScript== // @name video forward 88s // @namespace http://tampermonkey.net/ // @version 0.1 // @description Press Ctrl+Right to go ahead 88 s. // @author Bruce Kang // @match *://* // @include * // @grant none // ==/UserScript== Object.defineProperty(HTMLMediaElement.prototype, 'playing', { get: function(){ return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2); } }) var video=document.getElementsByTagName("video"); (function() { function keyDown(e){ if (e.keyCode == 39 && e.ctrlKey){ for(var i=0;i<video.length;i++){ if(video[i].playing){ var vCurrentTime = video[i].currentTime; video[i].currentTime = vCurrentTime +88; } } } } document.onkeydown = keyDown; 'use strict'; })();
问题:
- 为什么是88s而不是90s?
给判断OP出现和手放到键盘上操作预留2s时间 - 支持flash视频吗?
不知道,没试过,也没打算支持。目前html5视频是没有问题的 - 按→的时候网站视频自身也会触发向后跳转
各家网站跳转时间不一样,没法很方便的在脚本中减去这段时间。以后有时间的话可能会改进
解析:
js里没有直接定义播放状态,StackOverflow上的老哥说可以把同时满足当前时间>0,未暂停等条件的状态定义为playing
。Object.defineProperty(HTMLMediaElement.prototype, 'playing', { get: function(){ return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2); } })
之后,定义一个视频数组
var video=document.getElementsByTagName("video");
,定义一个函数function keyDown(e){}
,当按键时触发。
keyDown(e)
判断当e为→(ASCII=39)和Ctrl的时候,if (e.keyCode == 39 && e.ctrlKey)
开始执行以下功能:
对于视频数组进行遍历,找到其中正在播放的视频,将其当前时间+88sfor(var i=0;i<video.length;i++){ if(video[i].playing){ var vCurrentTime = video[i].currentTime; video[i].currentTime = vCurrentTime +88; } }
- 为什么是88s而不是90s?