Faster Media

Set Youtube & Overcast PlaybackRate to 1.75 by default

// ==UserScript==
// @name         Faster Media
// @namespace    http://tampermonkey.net/
// @version      0.3.0
// @description  Set Youtube & Overcast PlaybackRate to 1.75 by default
// @author       Decradish
// @match        *www.youtube.com/watch?v=*
// @match        *overcast.fm/+*
// @grant        none
// ==/UserScript==

(function() {
	'use strict';

	// 核心方法
	var coreFn = () => {
		var iPlaybackRate = 1.75, //rate
		tmVideo = document.getElementsByTagName("video")[0],
		tmMedia = false,
		OcRange = document.getElementById('speedcontrol') //Overcast

		if(!!tmVideo){
			tmMedia = tmVideo;

			var youTubePlayBtn = document.getElementsByClassName('ytp-play-button')

			if(youTubePlayBtn.length > 0){
				document.getElementsByClassName('ytp-play-button')[0].focus()
			}
		}

		if(!!OcRange){
			OcRange.stepUp(5)
			document.getElementById('speedlabel0').style.color = '#000'
			document.getElementById('speedlabel1500').style.color = '#fff'
		}

		if(!tmMedia){
			obsFn()
			return false;
		}

		tmMedia.playbackRate = iPlaybackRate;

		tmMedia.onplay = function(){
			tmMedia.playbackRate = iPlaybackRate;
		};

		tmMedia.oncanplay = function(){
			tmMedia.playbackRate = iPlaybackRate;
		};
	}

	// 观察器方法
	const obsFn = () => {
		// 观察器的执行函数
		var obsCb = (mutationsList, mutationObserver) => {
			// 遍历出所有的MutationRecord对象
			mutationsList.forEach(function (mutation) {
				// 找一下目标元素
				const hasTargetElem = [...mutation.addedNodes].some((item => 
					item.tagName === 'VIDEO'
				));

				if(hasTargetElem){
					// 已产生目标元素,停止观察
					observer.disconnect()

					// 执行核心方法
					coreFn();
				}
			});
		}

		// 设置一个观察器
		var observer = new MutationObserver(obsCb);

		// 观察目标元素是否出现
		observer.observe(document.body, {
			childList: true,
			subtree: true
		});
	}

	// 触发核心逻辑
	coreFn();
})();