Greasy Fork

Greasy Fork is available in English.

Autoplay Reddit

autoplays videos on reddit

当前为 2016-09-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Autoplay Reddit
// @version      1.0
// @description  autoplays videos on reddit
// @author       abbott
// @match        *://*.reddit.com/*
// @run-at       document-idle
// @namespace    http://greasyfork.icu/en/scripts/22892-autoplay-reddit
// ==/UserScript==

var idx = 0; // video idx
var youtube = '.*(youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).*'; // youtube video id regex
var player;

// youtube api
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
tag.onload = playNext();

function playNext() {
  if (document.getElementsByClassName('expando-button collapsed video').length <= idx) { // loads next page when done
    document.getElementsByClassName('next-button')[0].getElementsByTagName('a')[0].click();
  }
  var match = document.getElementsByClassName('title may-blank outbound ')[idx].href.match(youtube)[2]; // gets youtube video id

  document.getElementsByClassName('expando-button collapsed video')[idx].click(); // display video
  window.location.hash = document.getElementsByClassName('expando-button video expanded')[0].parentNode.parentNode.id; // move window to video location
  document.getElementsByTagName('iframe')[2].src = 'https://www.youtube.com/embed/' + match + '?enablejsapi=1'; // replaces reddit media iframe
  document.getElementsByTagName('iframe')[2].enablejsapi = "1";

  player = new YT.Player(document.getElementsByTagName('iframe')[2].id, { // attach api to video, should start at index 2
    events: {
      'onReady': onPlayerReady, // autoplay
      'onStateChange': onPlayerStateChange // on end play next video
    }
  });

  idx++;
}

function onPlayerReady() {
  player.playVideo(); // autoplay video
}

function onPlayerStateChange(event) {
  if(event.data === 0) { // when the video ends  
    document.getElementsByClassName('expando-button video expanded')[0].click(); // close video
    playNext();
  }
}

document.onkeydown = function(e) { // skips current video if n is pressed
  if (e.keyCode == 78) { // n
    document.getElementsByClassName('expando-button video expanded')[0].click(); // close video
    playNext();
  }
};

playNext();