- // ==UserScript==
- // @license MIT
- // @name halihali便携按钮
- // @namespace 哈哩哈哩快速操作按钮
- // @description 快速上一集下一集,快速跳到指定位,窗口化全屏功能,切源功能。
- // @version 2.1
- // @author You
- // @match http://*/*
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @grant unsafeWindow
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // @grant GM_addValueChangeListener
-
-
-
- // ==/UserScript==
-
- (function () {
- 'use strict';
-
- //层key关键id
- // key: C1
- // key: C2
- // key: C3
-
- /*
- 全自动流程 1.进入C2表示切换集数,自动全屏,自动跳片头,自动跳片尾
-
- 1.层1-层2切换源 C1-C2.VideoResNext
- 2.层1-层3跳片头 C1-C3.VdoProgressSet
- 3.层3-层1自动下一集 C3-C1.NextVideo
- 4.
-
- */
- let url = location.hostname;
-
- console.log("0.标签↓. " + url);
-
-
- if(url.indexOf("hali") != -1){
- //----------------------------------AD---------------------------------
- setTimeout(()=>{
- //AD清除广告
- if(document.querySelector("#HMRichBox")){
- document.querySelector("#HMRichBox").remove();
- }
- if(document.querySelector("#HMcoupletDivright")){
- document.querySelector("#HMcoupletDivright").remove();
- }
- if(document.querySelector("#HMcoupletDivleft")){
- document.querySelector("#HMcoupletDivleft").remove();
- }
- },"500");
-
-
- //------------------------------------C1-----------------------------------------------------------------------------
- if(document.querySelector("#player")){
- //主站外部框架
- console.log("1.哈哩哈哩播放器页面进入");
-
- let style = document.createElement("style");
- style.type = "text/css";
- let str = ``;
- //样式收缩
- if(true){
- 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:72px;
- min-width:58px;
- min-height:240px;
- float:left;
- padding:14px;
- border-radius:10px;
- margin:2px;
- transition: all 0.2s;
- }
- .PlayerSettings>*{
- min-width:70px;
- min-height:30px;
- 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) => {
- localStorage.ifNextFullscreen = 1;
-
- 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 = () =>{
- localStorage.removeItem("ifNextFullscreen");
-
- let player = document.getElementById("player");
- player.classList.toggle("MyFullscreen", !player.classList.contains("MyFullscreen"));
- }
- //切换视频源
- let nextResVideo = () =>{
- GM_setValue("C1-C2.VideoResNext", URL.createObjectURL(new Blob()));//C1-C2.VideoResNext
- }
- //跳进度
- let progressVideo = (timme) =>{
- GM_setValue("C1-C3.VdoProgressSet", -1);//C1-C3.VdoProgressSet
- GM_setValue("C1-C3.VdoProgressSet", timme);//C1-C3.VdoProgressSet
- }
-
-
- //按钮界面收缩
- if(true){
- 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 = (GM_getValue('headTime')) ? GM_getValue('headTime') : 90;
- if(et != saveTime){
- GM_setValue('headTime', et);
- }
-
- let etL = document.querySelector("#et_time2").value;
- let save2Time = (GM_getValue('tailTime')) ? GM_getValue('tailTime') : 360;
- if(etL != save2Time){
- GM_setValue('tailTime', etL);
- }
-
- progressVideo(et);
- }
- },
- {
- label:"checkInput",
- click:()=>{
- //全自动按键触发
- let all = document.querySelector("#ck_allAuto");
- if(all.checked){
- GM_setValue('allAuto3', 1);
- }else{
- GM_deleteValue('allAuto3');
- }
- }
- }
- ]
-
- items.forEach(item => {
- //进度栏
- if(item.label == "progress"){
- let dv = document.createElement("div");
- dv.appendChild(document.createTextNode('头 '));
- let el1Et = document.createElement("input");
- el1Et.style.width = "49px";
- el1Et.className = "EditView";
- el1Et.id = "et_time";
- el1Et.value = (GM_getValue('headTime')) ? GM_getValue('headTime'):90;
- dv.appendChild(el1Et);
- dv.appendChild(document.createTextNode('尾 '));
- let el2Et = document.createElement("input");
- el2Et.style.width = "49px";
- el2Et.className = "EditView";
- el2Et.id = "et_time2";
- el2Et.value = (GM_getValue('tailTime')) ? GM_getValue('tailTime'):360;
- dv.appendChild(el2Et);
- layout.appendChild(dv);
- }
- //自动触发
- else if(item.label == "checkInput"){
- let dv = document.createElement("div");
- let elCk = document.createElement("input");
- elCk.id = "ck_allAuto";//全自动
- elCk.type = "checkbox";
- elCk.checked = (GM_getValue('allAuto3'));
- elCk.addEventListener("click", item.click);
- dv.appendChild(elCk);
- dv.appendChild(document.createTextNode(' 全自动'));
- layout.appendChild(dv);
- }
- //按钮
- else{
- let el = document.createElement("button");
- el.innerText = item.label;
- el.addEventListener("click", item.click);
- layout.appendChild(el);
- }
- })
- }
-
- //下一集触发自动全屏
- if(localStorage.ifNextFullscreen == 1){
- fullscreens();
- }
-
- //自动切换下一集
- GM_addValueChangeListener("C3-C1.NextVideo", (name, oldValue, newValue, remote)=>{
- episodes(1);
- });
-
-
-
-
- return;
- }
- //End---------------------------------C1-----------------------------------------------------------------------------
-
- }
- else{;
- if(document.querySelector("#divplay")){
- //----------------------------------------------C2---------------------------------------------------------------
- document.querySelector("#playiframe").style.height = "100%";
- //二级播放器容器中间件
- console.log("2.播放器中间件");
-
- //视频源列表
- let playroad = document.querySelector("#playroad");
- if(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";
- };
- }else{
- return;
- }
-
- //切换视频源
- GM_addValueChangeListener("C1-C2.VideoResNext", (name, oldValue, newValue, remote)=>{
- console.log("换源按钮触发");
- let resLists = document.getElementById("playroad");
- //优先备用线2(判断是否优先使用)
- let beiTag = false;
- let useBei = true;//暂时先true
- if(useBei){
- resLists.childNodes.forEach(item => {
- if(item.innerText == "备用线2" && item.style.color != "rgb(47, 179, 255)"){//未选中
- item.click();
- beiTag = true;
- }
- });
- if(beiTag){
- return;
- }
- }
- //下一个源
- resLists.childNodes.forEach(item => {
- if(item.tagName == 'A'){
- if(item.style.color == "rgb(47, 179, 255)"){//选中 蓝色
- beiTag = true;
- }else if(item.style.color == "rgb(170, 170, 170)" && beiTag){//灰色
- beiTag = false;
- item.click();
- }else if(item.style.color == "rgb(255, 0, 0)" && beiTag){//红色
- beiTag = false;
- item.click();
- }
- }
- });
- });
-
- //自动播放
- setTimeout(()=>{
- if(GM_getValue('allAuto3')){
- GM_setValue("C1-C3.VdoProgressSet", -1);
- GM_setValue("C1-C3.VdoProgressSet", (GM_getValue('headTime')) ? GM_getValue('headTime') : 90);
- }else{
- GM_setValue("C2-C3.AutoPlay", URL.createObjectURL(new Blob()));
- }
-
- },"1000");
-
- return;
- //End-------------------------------------------C2---------------------------------------------------------------
- }
-
- //--------------------------------------------------------------C3---------------------------------------------------
- //a1:线1,2 video:线3,4 player1:备线1,2,线10
- if(document.querySelector('#a1') || document.querySelector("#player1") || document.querySelector("#video")){
- //播放器内层
- console.log("3.播放器层");
-
- //视频播放器监听
- setTimeout(()=>{
- //console.log("vdp set time");
- document.querySelector('video').addEventListener("ended", ()=>{
- GM_setValue("C3-C1.NextVideo", URL.createObjectURL(new Blob()));
- });
- document.querySelector('video').ontimeupdate = ()=>{
- if(GM_getValue('allAuto3')){//是否开启全自动
- let tailT = (GM_getValue('tailTime')) ? GM_getValue('tailTime') : 360;
- if(document.querySelector('video').currentTime > tailT){
- GM_setValue("C3-C1.NextVideo", URL.createObjectURL(new Blob()));
- }
- }
- };
-
- },(document.querySelector('video')?"0":"8000"));//如果搜索不到,延迟搜索
-
-
- //自动播放功能
- let autoPlay = () =>{
- let vdo = document.querySelector('video');
- if(vdo.paused){//如果已经暂停,那么就可能静音播放
- vdo.muted = true;
- vdo.play();
- }
-
- //静音后处理
- if(vdo.muted){
- //添加解除静音按钮
- let bd = document.querySelector('body');
- let btnSound = document.querySelector('#soundBtn');
- if(!btnSound){
- let el = document.createElement("button");
- el.id = "soundBtn";
- el.style.position = "absolute";
- el.style.width = "100%";
- el.style.height = "100%";
- el.style.bottom = "0px";
- el.style.top = "0px";
- el.style.left = "0px";
- el.style.right = "0px";
- el.style.color = "rgb(255,255,255)";
- el.style.background = "rgba(0,0,0,0.5)";
- el.innerText = "音量点击";
- el.addEventListener("click", ()=>{
- document.querySelector('#soundBtn').remove();
- document.querySelector('video').muted = false;
- });
- bd.appendChild(el);
- }
- }
- }
-
- //视频快进
- GM_addValueChangeListener("C1-C3.VdoProgressSet", (name, oldValue, newValue, remote)=>{
- //快进
- let vdo = document.querySelector('video');
- if(oldValue == "-1" && vdo){
- vdo.currentTime += +newValue;
- autoPlay();
- }
- });
-
- //自动播放
- GM_addValueChangeListener("C2-C3.AutoPlay", (name, oldValue, newValue, remote)=>{
- if(document.querySelector('video')){
- autoPlay();
- }
- });
-
- return;
- }
- //--------------------------------------------------------------C3---------------------------------------------------
-
- console.log("4.其他:" + url);
- }
- })();