您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет ссылку на видео файл и если браузер поддерживает воспроизведение mp4, то добавляет видеоплеер.
当前为
// ==UserScript== // @name Bashtube HTML5 Player and Downloader // @description Добавляет ссылку на видео файл и если браузер поддерживает воспроизведение mp4, то добавляет видеоплеер. // @namespace 2k1dmg@userscript // @match http://bashtube.ru/video/* // @version 26 // @author 2k1dmg // @grant none // ==/UserScript== // 2014-06-04 (function(window) { 'use strict'; if (!window || (window && window.self !== window.top)) { return; } var document = window.document; var styleSheetLoader = function(canPlay, flash) { var cssStyle = document.createElement('style'); cssStyle.type = 'text/css'; cssStyle.textContent = '#bt-html5video-panel {\n' + ' width: 640px;\n' + ' height: 25px;\n' + ' padding: 15px 0 10px 0;\n' + '}\n' + '#bt-html5video-panel > a {\n' + ' margin-right: 20px;\n' + ' float: right;\n' + '}\n' + '#bt-html5video-panel > img {\n' + ' margin: 0 0 -3px 20px;\n' + '}\n'; if (canPlay) cssStyle.textContent += (flash ? '#bt-html5video-panel > button {\n' : '#bt-html5video-panel > sub {\n') + ' margin-left: 10px;\n' + '}\n' + '#bt-html5video-panel > span {\n' + ' margin-left: 15px;\n' + '}\n'; document.head.appendChild(cssStyle); }; var eventSetter = { buttonOnClick: { init: function(button, html5ImageColored, html5Image) { var onClick = function(event) { if (!this.uppod && !this.btHTML5videoPlayer) { try { this.uppod = document.getElementById('uppod'); this.btHTML5videoPlayer = document.getElementById('bt-html5video-player'); var btHTML5videoPanel = document.getElementById('bt-html5video-panel'); var images = btHTML5videoPanel.getElementsByTagName('img'); this.image = images[0]; } catch (ex) { return; }; } this.onclick = function() { if (this.uppod.style.display == 'none') { this.uppod.style.removeProperty('display'); this.btHTML5videoPlayer.style.display = 'none'; this.textContent = 'HTML5'; this.image.src = html5Image; } else { this.btHTML5videoPlayer.style.removeProperty('display'); this.uppod.style.display = 'none'; this.textContent = 'FLASH'; this.image.src = html5ImageColored; } }; return this.onclick(); }; button.onclick = onClick; } }, linkOnClick: { init: function(link) { var onClick = function(event) { if (event && event.button === 0) { event.preventDefault(); event.stopPropagation(); } }; link.onclick = onClick; link.title = 'Скачивать правой кнопкой мыши!\nИ выбрать: "Сохранить объект как…" или т.п'; } }, playerOnData: { init: function(btHTML5videoPlayer) { btHTML5videoPlayer.addEventListener('loadedmetadata', function(e) { var width = this.videoWidth, height = this.videoHeight; var dimensions = width + 'x' + height; var btHTML5videoPanel = document.getElementById('bt-html5video-panel'); var spans = btHTML5videoPanel.getElementsByTagName('span'); if (spans[0]) { spans[0].textContent = dimensions; } }, false); } } }; var createLink = function(params) { var file = params.file; var poster = params.poster; var flash = params.flash; var videoInfos = document.getElementsByClassName('video-info'); var videoInfo = videoInfos[0]; var canPlay = (function() { var v = document.createElement('video'); return v.canPlayType('video/mp4') !== ''; }()); var addHTML5video = function() { var btHTML5videoPlayer = document.createElement('video'); var playerParams = [ ['id', 'bt-html5video-player'], ['width', 640], ['height', 360], ['volume', 0.5], ['controls', 'controls'], ['poster', poster] ]; for (var i = 0; i < playerParams.length; i++) { btHTML5videoPlayer[playerParams[i][0]] = playerParams[i][1]; } btHTML5videoPlayer.innerHTML = '<source src="' + file + '" type="video/mp4">'; videoInfo.parentNode.insertBefore(btHTML5videoPlayer, videoInfo); eventSetter.playerOnData.init(btHTML5videoPlayer); var uppod = document.getElementById('uppod'); uppod.style.display = canPlay ? 'none' : ''; btHTML5videoPanel.style.display = canPlay ? '' : 'none'; var buttons = btHTML5videoPanel.getElementsByTagName('button'); if (buttons[0]) { eventSetter.buttonOnClick.init(buttons[0], html5ImageColored, html5Image); } var links = btHTML5videoPanel.getElementsByTagName('a'); if (links[0]) { eventSetter.linkOnClick.init(links[0]); } }; var btHTML5videoPanel = document.createElement('div'); btHTML5videoPanel.id = 'bt-html5video-panel'; var html5ImageColored = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATdJREFUeNpifOqtlsDAwDCfgQwgvfUWIxOQfsBAAWCiQO8BEMECxBdgIvypVQzc/vF4db2tjGX4efkUnM8C9McHYDiAOf++fgbTv+9dZ/gPZaODfwjxDzAXYICvmxYyfNuznpAXLiIbAPKGwa/LJ4FUDgOXcxADs5gMVl2fl01G4bMgOwcG2HTNwBgd/H31FNmABxhe+H3vBjiQsAHh9sUMf18+RRZCMeAgEDv8+/oJJYThcc3NR3w6kNpyk0F83j4GdqgXmMWlGThdAsHsP69wu+ADIpo+AQNQGuxkjDBA8gIw+h+gxwIYvM4LYOCwcAG7AESDDPxxYi/Dj+N7GH5h8R4LNlu+blwIxnjABfQwADlnAZEZC6R5IozDiC4LTNYGoBgBYn8oDQqfDdCY2gBK+sjqAQIMACfPddVHcozkAAAAAElFTkSuQmCC'; var html5Image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/klEQVR42sWTqw6DMBSGeYQ9wh5hj7BHqeCuFjRiBotFLsEiZrAEiQSNWYImmcN2/ZudpjA6mNqfHNPT851ba/m+z8Iw5EEQ/GSIsSDbts9/AXieV0sAY+xAgKqq+JbSNJ0DIAKUZSkvDcPA+75ftSRJCHA3AvI832xBDP+qAILW4hDlQcgE2JqZALUOMGkcRx3APgBRFEnImlFlBMD2FADlfOsX4N0AKpXWFccxL4pCnjdNowBi/UcFcF33Qo5pmowz0Ido6UI55KCMXdfJIACROcsy2comYM8fwNpnAPQj2rgJx2PHH2hnK1zKcZwTZoLVvl/oE3AE4d8s778Aj+4t+EF6GnYAAAAASUVORK5CYII='; if (canPlay) { btHTML5videoPanel.innerHTML = '<img src="' + html5ImageColored + '" width="16" height="16" alt="">' + (flash ? '<button>FLASH</button>' : '<sub>HTML5</sub>') + '<span></span>' + '<a href="' + file + '" title="Скачивать правой кнопкой мыши!' + 'И выбрать: "Сохранить объект как…" или т.п">Скачать</a>'; addHTML5video(); } else { btHTML5videoPanel.innerHTML = '<a href="' + file + '"> Скачать</a>'; } styleSheetLoader(canPlay, flash); videoInfo.parentNode.insertBefore(btHTML5videoPanel, videoInfo); }; var getParams = function() { var getScriptContent = function() { var lastSibling = uppod.nextSibling; var targetContent; for (var i = 0; i < 15; i++) { if (lastSibling.nodeType === 1 && /.*file:\s'(http:[^']*).*/m.test(lastSibling.textContent)) { targetContent = lastSibling; break; } lastSibling = lastSibling.nextSibling; } if (targetContent) { return targetContent.textContent; } else { return null; } }; var getPageBodyParams = function() { var bodyContent = getScriptContent() || document.body.innerHTML; var matchBodyContent = bodyContent.match(/.*file:\s'(http:[^']*).*/m); var matchBodyContentPoster = bodyContent.match(/.*poster:\s'(http:[^']*).*/m); if (matchBodyContent[1]) { file = matchBodyContent[1]; poster = matchBodyContentPoster[1] ? matchBodyContentPoster[1] : ''; return {'file': file, 'poster': poster, 'flash': false}; } }; var getUppodParams = function() { var matchFlashvars = flashvars.match(/.*file=(http:[^&]*).*/m); var matchPoster = flashvars.match(/.*poster=(http:[^&]*).*/m); if (matchFlashvars[1]) { file = matchFlashvars[1]; poster = matchPoster[1] ? matchPoster[1] : ''; return {'file': file, 'poster': poster, 'flash': true}; } }; var uppod = document.getElementById('uppod'); var uppodParams = uppod.getElementsByTagName('param'); var flashvars; var file; var poster; var params; if ('flashvars' in uppodParams && uppodParams['flashvars'].value) { flashvars = uppodParams['flashvars'].value; params = getUppodParams(); } else { params = getPageBodyParams(); } if (params) { return params; } }; var params; if (document.readyState === 'complete') { params = getParams(); createLink(params); } else { window.addEventListener('load', function pageLoaded(e) { window.removeEventListener('load', pageLoaded, false); var params = getParams(); createLink(params); }, false); } })(window);