// ==UserScript== // @license MIT // @name halihali便携按钮 // @namespace 哈哩哈哩快速操作按钮 // @description 快速上一集下一集,快速跳到指定位,窗口化全屏功能,切源功能。 // @version 0.3 // @author You // @match http://*/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant unsafeWindow // @grant GM_setValue // @grant GM_addValueChangeListener // @downloadURL none // ==/UserScript== (function () { 'use strict'; // Your code here... window.addEventListener("load", () => { //内播放器 if(document.getElementById("video") && document.querySelector('video')){ console.log("内部播放器"); GM_addValueChangeListener("VdoControl", (name, oldValue, newValue, remote)=>{ if(oldValue == "-1"){ console.log("event vdo control time "); document.querySelector('video').currentTime = newValue; } }); return; } //内播放器1 if(document.getElementById("player1") && document.querySelector('video')){ console.log("内部播放器1"); GM_addValueChangeListener("VdoControl", (name, oldValue, newValue, remote)=>{ if(oldValue == "-1"){ console.log("event vdo control time"); document.querySelector('video').currentTime = newValue; } }); return; } //中间层 let play = document.getElementById("divplay"); if (play) { play.style.height = "100%"; let iframe = play.querySelector("#playiframe");//内部播放器 if (iframe) { console.log("内部播放器中间件"); iframe.style.height = "100%"; let playRoad = document.getElementById("playroad"); playRoad.style.position = "absolute"; playRoad.style.left = "0px"; playRoad.style.top = "0px"; playRoad.style.width = "100%"; playRoad.style.opacity = "0"; playRoad.onmouseover = function () { this.style.opacity = "1"; }; playRoad.onmouseout = function () { this.style.opacity = "0"; }; GM_addValueChangeListener("MsgEvent", (name, oldValue, newValue, remote)=>{ //console.log(document.getElementById("playroad")); let resLists = document.getElementById("playroad"); let tagFlag = false; resLists.childNodes.forEach(item => { if(item.tagName == 'A'){ if(item.style.color == "rgb(47, 179, 255)"){ tagFlag = true; }else if(item.style.color == "rgb(170, 170, 170)" && tagFlag){ tagFlag = false; item.click(); }else if(item.style.color == "rgb(255, 0, 0)" && tagFlag){ tagFlag = false; item.click(); } } }); }); } return; } //最外层 if (document.getElementById("playiframe")) {//外部容器 console.log("浏览器外壳层"); let style = document.createElement("style"); style.type = "text/css"; let str = ` .MyFullscreen { position:fixed; top:0px; left:0px; z-index:9999; width:100%; height:100%; } .PlayerSettings{ position:fixed; left:0; z-index:999999; top:50vh; transform: translate(0,-50%); background:rgba(0,0,0,0.8); width:60px; min-width:50px; min-height:260px; float:left; padding:20px; border-radius:10px; margin:2px; transition: all 0.2s; } .PlayerSettings>*{ min-width:60px; min-height:40px; float:left; } .PlayerSettings>*+*{ margin-left:0px; } .EditView{ text-align:center; width:60px; } .Hide{ opacity:0; } `; style.innerHTML = str.split("\n").map(o => o.trim()).filter(o => o).join(""); console.log(style.innerHTML); document.head.appendChild(style); let layout = document.createElement("div"); layout.className = "PlayerSettings"; layout.classList.add("PlayerSettings", "Hide"); document.body.appendChild(layout); layout.onmouseover = function () { layout.classList.remove("Hide"); }; layout.onmouseout = function () { layout.classList.add("Hide"); }; let episodes = (add) => { sessionStorage.setItem("ifNextFullscreen", "true"); let url = location.href; let index = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); index = Number.parseInt(index) + add; url = url.substring(0, url.lastIndexOf("/") + 1) + index + url.substring(url.lastIndexOf(".")); location.href = url; } let fullscreens = () =>{ sessionStorage.setItem("ifNextFullscreen", "false"); let player = document.getElementById("player"); player.classList.toggle("MyFullscreen", !player.classList.contains("MyFullscreen")); } let nextResVideo = () =>{ GM_setValue("MsgEvent", URL.createObjectURL(new Blob())); } let progressVideo = (timme) =>{ GM_setValue("VdoControl", -1); GM_setValue("VdoControl", timme); } let items = [ { label: "全屏", click: () => { fullscreens(); } }, { label: "上一集", click: () => { episodes(-1); } }, { label: "下一集", click: () => { episodes(1); } }, { label:"换源", click:() => { nextResVideo(); } }, { label:"progress" }, { label:"跳片头", click:()=>{ let et = document.querySelector("#et_time").value; let saveTime = (sessionStorage.getItem("headTime") == null) ? 100 : sessionStorage.getItem("headTime"); if(et != saveTime){ sessionStorage.setItem("headTime", et) } progressVideo(et); } }, ] items.forEach(item => { if(item.label == "progress"){ // let elEt = document.createElement("input"); elEt.className = "EditView"; elEt.id = "et_time"; elEt.value = (sessionStorage.getItem("headTime") == null) ? 100 : sessionStorage.getItem("headTime"); layout.appendChild(elEt); }else{ let el = document.createElement("button"); el.innerText = item.label; el.addEventListener("click", item.click); layout.appendChild(el); } }) if(sessionStorage.getItem("ifNextFullscreen") == "true"){ fullscreens(); } } }) })();