Faster Media

Set Youtube & Overcast PlaybackRate to 1.6 by default

目前为 2018-01-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Faster Media
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2.10
  5. // @description Set Youtube & Overcast PlaybackRate to 1.6 by default
  6. // @author Decradish
  7. // @match *www.youtube.com/watch?v=*
  8. // @match *overcast.fm/+*
  9. // @match *v.youku.com/v_show/id_*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. function delegate(parent, eventType, selector, fn)
  17. {
  18. //参数处理
  19. if(typeof parent === 'string')
  20. {
  21. var parent = document.getElementById(parent);
  22. !parent && console.log('parent not found');
  23. }
  24. if(typeof selector !== 'string')
  25. {
  26. console.log('selector is not string');
  27. }
  28. if(typeof fn !== 'function')
  29. {
  30. console.log('fn is not function');
  31. }
  32. function handle(e){
  33. //获取event对象
  34. //标准DOM方法事件处理函数第一个参数是event对象
  35. //IE可以使用全局变量window.event
  36. var evt = window.event ? window.event : e;
  37. //获取触发事件的原始事件源
  38. //标准DOM方法是用target获取当前事件源
  39. //IE使用evt.srcElement获取事件源
  40. var target = evt.target || evt.srcElement;
  41. //获取当前正在处理的事件源
  42. //标准DOM方法是用currentTarget获取当前事件源
  43. //IE中的this指向当前处理的事件源
  44. var currentTarget= e ? e.currentTarget : this;
  45. if(target.id === selector || target.className.indexOf(selector) != -1){
  46. fn.call(target);
  47. }
  48. }
  49. parent[eventType]=handle;
  50. }
  51.  
  52. var iPlaybackRate = 1.6, //rate
  53. tmVideo = document.getElementsByTagName("video")[0],
  54. tmAudio = document.getElementsByTagName("audio")[0],
  55. tmMedia = false,
  56. youkuDom = document.getElementById('module_basic_player'); //优酷
  57.  
  58. if(youkuDom){
  59. var youkuInterval = setInterval(function(){
  60. var ykPlayer = document.getElementById('#ykPlayer');
  61. if(ykPlayer.length > 0){
  62. for(var i=0;i<videos.length;i++){
  63. clearInterval(youkuInterval);
  64. videos[i].playbackRate = iPlaybackRate;
  65. videos[i].oncanplay = function(){
  66. this.playbackRate = iPlaybackRate;
  67. }
  68. }
  69. }
  70. }, 10);
  71. return false;
  72. }
  73.  
  74. if(!!tmVideo){
  75. tmMedia = tmVideo;
  76.  
  77. var youTubePlayBtn = document.getElementsByClassName('ytp-play-button')
  78.  
  79. if(youTubePlayBtn.length > 0){
  80. document.getElementsByClassName('ytp-play-button')[0].focus()
  81. }
  82. }
  83.  
  84. if(!!tmAudio){
  85. tmMedia = tmAudio;
  86.  
  87. document.onkeydown = function(e) {
  88. var keyCode = e.keyCode || e.which || e.charCode;
  89.  
  90. if(keyCode == 32) {
  91. tmMedia.paused ? tmMedia.play() : tmMedia.pause();
  92. e.preventDefault();
  93. return false;
  94. }
  95. }
  96. }
  97.  
  98. if(!tmMedia){
  99. return false;
  100. }
  101.  
  102. tmMedia.playbackRate = iPlaybackRate;
  103.  
  104. tmMedia.onplay = function(){
  105. tmMedia.playbackRate = iPlaybackRate;
  106. };
  107.  
  108. tmMedia.oncanplay = function(){
  109. tmMedia.playbackRate = iPlaybackRate;
  110. };
  111. })();