HTML5 Player on animespirit.ru with myvi.ru. Показывает видео встроенное с myvi.ru без Flash плеера.
// ==UserScript==
// @name HTML5 Player on animespirit.ru with myvi.ru
// @version 0.3.1
// @author Anonimous
// @namespace https://greasyfork.org/en/users/16081-lolipop/HTML5animespirit
// @description HTML5 Player on animespirit.ru with myvi.ru. Показывает видео встроенное с myvi.ru без Flash плеера.
// @include /^https?\:\/\/(www\.)?animespirit\.ru($|\/.*$)/
// @license GPL version 3 or any later version; www.gnu.org/licenses/gpl-3.0.en.html
// @grant none
// @run-at document-end
// ==/UserScript==
/*
* documentation:
* https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
* https://msdn.microsoft.com/ru-ru/library/dn265034%28v=vs.85%29.aspx
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
* https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/let
* https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replace
*/
;(function() {
const flashPreLink = 'http://myvi.ru/player/flash';
const html5PreLink = 'http://myvi.ru/player/embed/html';
const target = document.body;
const config = {
childList : true,
attributes : true,
characterData : true,
subtree : true
};
const videoType = 'application/mpeg';
const videoTagName = 'object';
const videoLinkAttrName = 'data';
let observer = new MutationObserver(function(mutations) {
for (let mutation of mutations) {
if (mutation.type === 'childList' || mutation.type === 'attributes') {
replaceByHTML5(mutation.target);
}
}
});
function replaceByHTML5(node) {
if (isObject(node)) {
replaceVideo(node);
}
let objs = node.getElementsByTagName(videoTagName);
replaceVideos(objs);
}
function replaceVideos(objs) {
for (let obj of objs) {
replaceVideo(obj);
}
}
function replaceVideo(obj) {
if(isVideoObject(obj)) {
replacePlayer(obj);
}
}
function replacePlayer(obj) {
obj.type = videoType;
obj.data = (obj.data).replace(flashPreLink, html5PreLink);
}
function isVideoObject(obj) {
let isVideoObj = obj.hasAttribute(videoLinkAttrName)
&& isVideoLink(obj.data);
return isVideoObj;
}
function isObject(node) {
let isObj = node.tagName.toLowerCase() === videoTagName;
return isObj;
}
function isVideoLink(data) {
let linkRegExp = /^https?\:\/\/(www\.)?myvi\.ru\/player\/flash.*/i;
let isLink = linkRegExp.test(data);
return isLink;
}
function run() {
observer.observe(target, config);
replaceVideos(document.getElementsByTagName(videoTagName));
}
/*
* running
*/
run();
})();