您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
use video as page background
当前为
// ==UserScript== // @name video_background // @namespace video_background // @supportURL https://github.com/zhuzemin // @description use video as page background // @include https://* // @include http://* // @exclude https://www.google.*/* // @exclude https://www.baidu.com/* // @exclude https://anime1.me/* // @exclude https://*.jpg // @exclude https://*.gif // @exclude https://*.png // @exclude http://*.jpg // @exclude http://*.gif // @exclude http://*.png // @version 1.3 // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @run-at document-start // @author zhuzemin // @license Mozilla Public License 2.0; http://www.mozilla.org/MPL/2.0/ // @license CC Attribution-ShareAlike 4.0 International; http://creativecommons.org/licenses/by-sa/4.0/ // @connect-src 127.0.0.1 // ==/UserScript== var config = { 'debug':false } var debug = config.debug ? console.log.bind(console) : function () { }; var host='http://127.0.0.1/'; var videoList; var dirList; var urlRoot; var usedList=[]; var dirCount=0; // prepare UserPrefs setUserPref( 'urlRoot', host+'******', 'Set root url', `Url from HFS.(.mp4 or dir)`, ',' ); class ObjectRequest{ constructor(url) { this.method = 'GET'; this.url = url; this.data=null, this.headers = { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8' //'Accept': 'application/atom+xml,application/xml,text/xml', //'Referer': window.location.href, }; this.charset = 'text/plain;charset=utf8'; this.other=null; } } var init = function () { if (window.self === window.top){ urlRoot=GM_getValue('urlRoot')||null; videoList=GM_getValue('videoList'); if(videoList!=undefined){ videoList=JSON.parse(videoList); } else { videoList=[]; } dirList=GM_getValue('dirList'); if(dirList!=undefined){ dirList=JSON.parse(dirList); } else { dirList=[]; } debug(dirList); var lastTime=GM_getValue('lastTime')||0; var present=parseInt(new Date(). getTime()/1000); debug(present-parseInt(lastTime)); /*if(present-parseInt(lastTime)>86400){ videoList=[]; dirList=[]; GM_setValue('lastTime',present); GM_setValue('videoList',JSON.stringify(videoList)); GM_setValue('dirList',JSON.stringify(dirList)); }*/ if(urlRoot!=null){ var btn=document.createElement('button'); btn.innerHTML='Text BG-color'; btn.style=` position: fixed; left: 0px; top: 0px; z-index: 1000; `; var status=false; btn.addEventListener('click',function () { var aList=document.querySelectorAll('a'); if(!status){ for (var a of aList){ a.style.backgroundColor='#ffffff'; } status=true; } else{ for (var a of aList){ a.style.backgroundColor=''; } status=false; } }); document.body.insertBefore(btn,document.body.firstChild); var btn_clearFileList=document.createElement('button'); btn_clearFileList.innerHTML='Clear file list'; btn_clearFileList.style=` position: fixed; left: 170px; top: 0px; z-index: 1000; `; btn_clearFileList.addEventListener('click',function () { dirList=[]; videoList=[]; GM_setValue('videoList',JSON.stringify(videoList)); GM_setValue('dirList',JSON.stringify(dirList)); }); document.body.insertBefore(btn_clearFileList,document.body.firstChild); urlRoot=urlRoot.replace(/http:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\//,host); if(/\.mp4$/.test(urlRoot)){ insertVideo(urlRoot); } else { var obj=new ObjectRequest(urlRoot); request(obj,HandleHFS); debug(urlRoot); } } } } function HandleHFS(responseObj){ if(responseObj.status==200){ if(dirCount!=0){ dirCount--; } debug('dirCount: '+dirCount); var dom = new DOMParser().parseFromString(responseObj.responseText, "text/html"); var files = dom.querySelector('#files'); var trList=files.querySelectorAll("tr"); for(var tr of trList){ var a=tr.querySelector('a'); debug('a.href: '+a.href); var url=a.href.replace(/https?:\/\/.*\/([^\/]*((\.mp4)|\/)$)/, function(match, $1, $2, offset, original){ return responseObj.finalUrl+$1;}) debug('url: '+url); if(/\.mp4$/.test(a.textContent)&&!videoList.includes(url)){ videoList.push(url); GM_setValue('videoList',JSON.stringify(videoList)); } else if(a.textContent!='Name'){ var img=a.querySelector('img'); debug(img.src); if(img.src.includes('/~img_folder')){ if(dirList.length!=0){ debug(dirList) for(var existUrl of dirList){ if(existUrl.includes(url)){ break; } else if(existUrl==dirList[dirList.length-1]){ debug('existUrl: '+existUrl+' & '+'url: '+url); dirCount++; var obj=new ObjectRequest(url); dirList.push(url); GM_setValue('dirList',JSON.stringify(dirList)); request(obj,HandleHFS); } } } else { dirCount++; dirList.push(url); GM_setValue('dirList',JSON.stringify(dirList)); var obj=new ObjectRequest(url); request(obj,HandleHFS); } } } if (tr==trList[trList.length-1]&&dirCount==0) { videoShuffle(); } } dirCount--; } } window.addEventListener('DOMContentLoaded', init); function request(object,func) { var retries = 3; GM_xmlhttpRequest({ method: object.method, url: object.url, data: object.data, headers: object.headers, overrideMimeType: object.charset, timeout:120000, //synchronous: true onload: function (responseDetails) { //debug(responseDetails); if (responseDetails.status != 200&&responseDetails.status != 302) { // retry if (retries--) { // *** Recurse if we still have retries setTimeout(request,2000); return; } } //Dowork func(responseDetails,object.other); }, ontimeout: function (responseDetails) { debug(responseDetails); //Dowork func(responseDetails,object.other); }, ononerror: function (responseDetails) { debug(responseDetails); //Dowork func(responseDetails,object.other); } }) } function setUserPref(varName, defaultVal, menuText, promtText, sep){ GM_registerMenuCommand(menuText, function() { var val = prompt(promtText, GM_getValue(varName, defaultVal)); if (val === null) { return; } // end execution if clicked CANCEL // prepare string of variables separated by the separator if (sep && val){ var pat1 = new RegExp('\\s*' + sep + '+\\s*', 'g'); // trim space/s around separator & trim repeated separator var pat2 = new RegExp('(?:^' + sep + '+|' + sep + '+$)', 'g'); // trim starting & trailing separator //val = val.replace(pat1, sep).replace(pat2, ''); } //val = val.replace(/\s{2,}/g, ' ').trim(); // remove multiple spaces and trim GM_setValue(varName, val); // Apply changes (immediately if there are no existing highlights, or upon reload to clear the old ones) //if(!document.body.querySelector(".THmo")) THmo_doHighlight(document.body); //else location.reload(); }); } function videoShuffle() { debug('videoList: '+videoList); for(var used of usedList){ var index = videoList.indexOf(used); if (index > -1) { videoList.splice(index, 1); } } var randomNum = Math.floor(Math.random() * (videoList.length - 0)); var url=videoList[randomNum]; insertVideo(url); } function insertVideo(url) { debug('insertVideo'); var video = document.createElement("video"); video.style = 'width:100%'; video.src = url; video.autoplay = true; video.muted=true; var div = document.createElement("div"); div.style = "width:100%; position: fixed; top: 0; left: 0; z-index: -100;"; div.insertBefore(video, null); debug(url); document.body.insertBefore(div, null); window.addEventListener("focus", function () { video.play(); }); window.addEventListener("blur", function () { video.pause(); }); video.addEventListener('ended',function () { videoShuffle(); }); } function getLocation(href) { var l = document.createElement("a"); l.href = href; return l; }