【记录】优化油猴插件【BD网盘播放器】

news2024/9/24 17:17:40

收获最重要

  • 前言
  • 优化
  • 代码
  • 收获
    • 1.禁止浏览器弹窗
    • 2.定时器
    • 3.设置属性-隐藏元素
    • 4.鼠标悬停和移开事件
    • 5.添加元素
    • 6.div里均匀分布
    • 7.获取元素属性值
    • 8.监听播放器状态
    • 9.jQuery 选择器

前言

有钱的可以支持一下原作者,没钱就要多学习

优化

1.1 视频刚开始未播放时,可能会有弹窗,不需要管,开始播放的时候自动关闭;
1.2 视频播放时,自动关闭弹窗,并继续播放视频
1.3 视频暂停时,每10s检测一次弹窗,自动关闭弹窗
2.1 添加快捷速度调整按钮
2.2 添加2.5和3倍速
3.1 去掉下方广告
在这里插入图片描述

代码

将代码复制到原脚本的开头
‘use strict’;
后面

    window.alert=function(){}
    var timerMenu = 0;

    var timerSpeed = setInterval(() => {
        //dplayer-setting设置按钮,本来准备拦截点击动作,然后直接显示速度选择,后来发现可以append
        var Qsettings=document.getElementsByClassName("dplayer-setting");
        var QsettingBoxs=document.getElementsByClassName("dplayer-setting-box");
        console.log("Qsettings",Qsettings);
        for (var Qsetting of Qsettings ){
            Qsetting.setAttribute("id", "Qsetting");
            document.getElementById('Qsetting').addEventListener('mouseenter',function() {//增加触摸事件mouseover-包括子元素,会导致无法点击子元素
                QsettingBoxs[0].setAttribute("class","dplayer-setting-box dplayer-setting-box-open")
            });
            document.getElementById('Qsetting').addEventListener('mouseleave',function() {//增加触摸事件mouseout-包括子元素,会导致无法点击子元素
                QsettingBoxs[0].setAttribute("class","dplayer-setting-box")
            });
            clearInterval(timerSpeed);//进入循环,说明加载成功

            //关闭广告
            var ad = document.getElementById('web-single-bottom');
            console.log(ad);
            if(ad){
                //ad.setAttribute("display", "none");//不可以
                //Element.style.display = 'none';
                ad.setAttribute('style','display:none');

            }

            var html ='<div class="dplayer-setting-speed-item" style="display: flex;align-items: center;"><span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=0.5>0.5</span><span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=1>1</span><span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=2>2</span></div>'

            $(".dplayer-setting-origin-panel").append(html);
            $(".dplayer-setting-speed-panel").append('<div class="dplayer-setting-speed-item" var=2.5><span class="dplayer-label">2.5</span></div>');
            $(".dplayer-setting-speed-panel").append('<div class="dplayer-setting-speed-item" var=3><span class="dplayer-label">3</span></div>');

            $(".dplayer-setting-speed-item").on("click",function(){
                var sp =1;
                var videos=document.querySelectorAll("video");
                sp=$(this).attr("var");
                console.log(sp)
                //Math.floor(sp)
                //console.log(sp)
                //Object.prototype.toString.call(sp)//undefined
                videos[0].playbackRate=sp;//有报错但是能起作用: property on 'HTMLMediaElement': The provided double value is non-finite.
            });
        }
    }, 1000*3);//10s检测一次

    //addEventListener总报错,可能是页面还没加载
    //    document.getElementById('speed25').addEventListener('click',function() {
    //         var videos=document.querySelectorAll("video");
    //         console.log(videos)
    //         for (var video of videos ){
    //             video.playbackRate=2.5;
    //         }
    //     });

    var timerVideo = setInterval(() => {
        var videos=document.querySelectorAll("video");
        console.log("videos",videos)
        for (var video of videos ){
            clearInterval(timerVideo);//进入循环,说明加载成功
            //video.play();//play() failed because the user didn't interact with the document first.
            //特性,不让无操作交互时,自动播放发出声音,可以静音播放,但是静音对用户也不太友好,需要。。可以再开开?太麻烦,自己点吧
            //最好在视频开始时点击播放一下,可以再暂停,这样可以自动关弹窗,刚进入页面不播放,不会检测弹窗
            video.addEventListener('play', function () { //播放开始执行的函数
                console.log("开始播放");
                var menus=document.getElementsByClassName("dplayer-menu dplayer-menu-show");
                if(menus.length){//检测弹窗
                    console.log("menus",menus)
                    for (var menu of menus ){ menu.setAttribute("class", "dplayer-menu");}
                    console.log("自动关闭");
                }
            });

            video.setAttribute("id","video");
            $('#video').bind('contextmenu',function() { return false; });//拦截右键菜单
            video.addEventListener('playing', function () { //播放中
                console.log("播放中");
                if(timerMenu)
                {
                    clearInterval(timerMenu);
                }
            });
            video.addEventListener('contextmenu', function () { //检测到弹窗 就关闭 // 只能检测手动右键
                console.log("拦截右键");
            });

            //能检测到暂停,不能检测到弹窗dplayer-menu dplayer-menu-show
            video.addEventListener('pause', function () { //检测暂停
                console.log("暂停播放,检测弹窗");//启动计时器,暂停时间短说明是弹窗
                // var timer = setInterval(() => {
                var menus=document.getElementsByClassName("dplayer-menu dplayer-menu-show");
                if(menus.length){//检测弹窗
                    console.log("menus",menus)
                    video.play();
                    for (var menu of menus ){ menu.setAttribute("class", "dplayer-menu");}
                    //menu.setAttribute("display", "none");//可以设置属性,但是不隐藏
                    //menu.attr("hidden", true);//可以设置属性,但是不隐藏
                    console.log("自动关闭");
                }
                //  }, 1000*10);//10s检测一次

                timerMenu = setInterval(() => {
                    var menus=document.getElementsByClassName("dplayer-menu dplayer-menu-show");
                    if(menus.length){//检测弹窗
                        console.log("menus",menus)
                        //video.play();
                        for (var menu of menus ){ menu.setAttribute("class", "dplayer-menu");}
                        //menu.setAttribute("display", "none");//可以设置属性,但是不隐藏
                        //menu.attr("hidden", true);//可以设置属性,但是不隐藏
                        console.log("自动关闭");
                    }
                }, 1000*10);//10s检测一次
            });
        }
    }, 1000*3);//10s检测一次

收获

1.禁止浏览器弹窗

window.alert=function(){}

2.定时器

var timer = setInterval(() => {
 
	}, 1000*10);//10s检测一次
	
clearInterval(timer);//清除定时器,timer为整数

3.设置属性-隐藏元素

                //ad.setAttribute("display", "none");//不可以
                //Element.style.display = 'none';
                ad.setAttribute('style','display:none');

4.鼠标悬停和移开事件

            document.getElementById('Qsetting').addEventListener('mouseenter',function() {//增加触摸事件mouseover-包括子元素,会导致无法点击子元素
                QsettingBoxs[0].setAttribute("class","dplayer-setting-box dplayer-setting-box-open")
            });
            document.getElementById('Qsetting').addEventListener('mouseleave',function() {//增加触摸事件mouseout-包括子元素,会导致无法点击子元素
                QsettingBoxs[0].setAttribute("class","dplayer-setting-box")
            });

5.添加元素

            $(".dplayer-setting-origin-panel").append(html);
            $(".dplayer-setting-speed-panel").append('<div class="dplayer-setting-speed-item" var=2.5><span class="dplayer-label">2.5</span></div>');
            $(".dplayer-setting-speed-panel").append('<div class="dplayer-setting-speed-item" var=3><span class="dplayer-label">3</span></div>');

6.div里均匀分布

   <div class="dplayer-setting-speed-item" style="display: flex;align-items: center;">
   		<span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=0.5>0.5</span>
   		<span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=1>1</span>
   		<span class="dplayer-setting-speed-item" style="flex: 1;text-align: center;padding: 10px;" var=2>2</span>
   </div>

7.获取元素属性值

    $(".className").on("click",function(){
                sp=$(this).attr("属性名");
                console.log(sp)
            });

8.监听播放器状态

https://www.cnblogs.com/yuanmo/p/12795104.html

            video.addEventListener('playing', function () { //播放中
                console.log("播放中");
            });
            video.addEventListener('pause', function () { //暂停中
                console.log("暂停中");
            });
            video.addEventListener('contextmenu', function () { //检测到弹窗 就关闭 // 只能检测手动右键
                console.log("右键点击");
            });

9.jQuery 选择器

https://www.runoob.com/jquery/jquery-ref-selectors.html
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酷雷曼一站式图片直播,助力品牌高效传播

传统模式下&#xff0c;摄影师拍摄会议、活动现场的照片后&#xff0c;一般需要7-10天时间才能完成成片交付&#xff0c;而实际上&#xff0c;由于新闻宣传的即时性&#xff0c;照片延迟交付&#xff0c;远远不能满足客户的需求。因此&#xff0c;即时图片直播技术应运而生&…

Jenkins自动化部署实例讲解

文章目录 前言实例讲解基本环境全局工具配置创建任务任务配置源码管理构建步骤&#xff08;Build Steps&#xff09;第一步&#xff1a;调用Maven第二步&#xff1a;执行shell启动容器 后记 前言 你平常在做自己的项目时&#xff0c;是否有过部署项目太麻烦的想法&#xff1f;…

哈希应用——位图(bitset)

目录 见见猪跑(初步了解位图) 位图的模拟实现 位图的应用 1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数 2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f; 3、位图应用变形&#xff…

第六章 Gated RNN

目录6.1 RNN的问题6.1.1 RNN的复习6.1.2 梯度消失和梯度爆炸6.1.3 梯度消失和梯度爆炸的原因6.1.4 梯度爆炸的对策6.2 梯度消失和LSTM6.2.1 LSTM的接口6.2.2 LSTM层的结构6.2.3 输出门6.2.4 遗忘门6.2.5 新的记忆单元6.2.6 输入门6.2.7 LSTM的梯度的流动6.3 LSTM的实现6.4 使用…

CIO成就计划第二季第一期 | 活动回顾:基于数字技术重塑流程,驱动业务增长

2023年3月25日&#xff0c;《科创人》联手金蝶共同打造的【CIO成就计划第二季】首期培训在北京金蝶软件园圆满举行。 【CIO成就计划】第二季&#xff0c;坚持服务于企业CIO、数字化变革负责人的价值定位&#xff0c;通过三期线下闭门培训会社群交流&#xff0c;帮助CIO建立应对…

JUC高级十-AbstractQueuedSynchronizer之AQS

1. 前置知识 公平锁和非公平锁可重入锁自旋锁LockSupport数据结构之双向链表设计模式之模板设计模式 AQS重要性 JAVA ------>JVM AQS ------>AQS 2. AQS入门级别理论知识 2.1 是什么? 2.1.1 字面意思 Abstract Queued Synchronizer----抽象的队列同步器 源码位置: …

【Java 并发编程】一文读懂线程、协程、守护线程

一文读懂线程、协程、守护线程1. 线程的调度1.1 协同式线程调度1.2 抢占式线程调度1.3 设置线程的优先级2. 线程的实现模型和协程2.1 内核线程实现2.2 用户线程实现2.3 混合实现2.4 Java 线程的实现2.5 协程2.5.1 出现的原因2.5.2 什么是协程2.5.3 Java19 虚拟线程 - 协程的复苏…

Cat原理简析

Cat原理简析 链路追踪系统设计思路如何高效组织业务日志如何动态串联业务日志通用解决方案链路定义链路染色链路上报链路存储 Cat原理客户端原理API设计序列化和通信客户端埋点核心类分析流程分析启动流程:消息生产Context 线程本地变量Transaction事务的开启其他类型消息组合关…

网页设计方向有哪些SCI期刊推荐? - 易智编译EaseEditing

网页设计和开发方向主要涉及人机交互、用户体验、可访问性等方面&#xff0c;以下是几个相关的SCI期刊推荐&#xff1a; ACM Transactions on Computer-Human Interaction (ACM TOCHI)&#xff1a; 该期刊由ACM&#xff08;Association for Computing Machinery&#xff09;出…

一次etcd变更引发的惨案

问题描述 在做etcd的数据变更时候&#xff0c;etcd在组成集群的时候出现leader不断切换问题&#xff0c;导致集群不稳定&#xff0c;都面将不健康的etcd节点踢出&#xff0c;只剩etcd单节点&#xff0c;后面将踢出的etcd节点重新加入现有etcd&#xff0c;导致etcd集群奔溃&…

【java踩坑搞起】MybatisPlus封装的mapper不支持 join,那咋办

众所周知&#xff0c;Mybatis Plus 封装的 mapper 不支持 join&#xff0c;如果需要支持就必须自己去实现。但是对于大部分的业务场景来说&#xff0c;都需要多表 join&#xff0c;要不然就没必要采用关系型数据库了。 直到前几天&#xff0c;偶然碰到了这么一款叫做mybatis-p…

权限提升:网站后台.(提权思路.)

权限提升&#xff1a;网站后台 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshell …

Form Designer V2发布

基于Ant Design 和 jQuery UI 的表单设计器 github 地址 特性 React Vue 3.x Typescript 统一的组件定义&#xff0c;对Vue 和React 的实现提供一个统一的组件定义描述 概念 Component 组件Layout 布局&#xff0c;一种特殊的ComponentComponent Editor 组件属性编辑器Comp…

【开发日志】2023.04 ZENO----Composite----CompImport、ReadImageFlie

CompImport TEST&#xff1a; 用ParticlesWrangle创造属性A(紫色&#xff09;&#xff0c;B&#xff08;青色&#xff09; &#xff0c;用CompImport结点将属性转化为图片输入到Composite3进行合成 Input&#xff1a; Output: /* 导入地形网格的属性&#xff0c;可能会有多个属…

Docker安装 docker-registry 镜像仓库

一、运行如下命令安装docker-registry镜像仓库&#xff1a; docker run -d \ -p 5000:5000 \ -v /usr/local/registry:/var/lib/registry \ --restartalways \ --name registry \ registry:2 二、测试镜像生成并推送到镜像仓库 1、新建一个目录 mkdir target 2、上传一…

Taro+Vue3 小程序引入echarts表

背景&#xff1a;根据需求在一个报告界面需要展示不同的echarts表来使数据更友好的显示。 效果如下&#xff1a; 一.taro支持echarts 官方说明&#xff1a;Taro 文档支持引用小程序端第三方组件库 物料文档&#xff1a;Taro 物料市场 | 让每一个轮子产生价值 二.引入echart…

Qt5.12實戰之Linux靜態庫編譯與調用完整過程

1.安裝gedit sudo apt-get install gedit -y 2.使用gedit編輯靜態庫源文件test.cpp gedit test.cpp 輸入下面內容 &#xff1a; #include <stdio.h> int func() {return 888; } 如下圖操作&#xff1a; 保存test.cpp並編譯 爲目標文件 gcc -c test.cpp如下圖示&am…

【剑指 Offer】(1)

文章目录前言一、 数组中重复的数字:fire: 解决方法:dog: 代码二、二维数组中的查找:fire:思路:dog:代码三、替换空格:fire:思路:dog: 代码四、从尾到头打印链表:fire:思路:dog:代码:dog: 代码五、重建二叉树:fire:思路:dog: 代码总结前言 剑指offer系列是一本非常著名的面试题…

【BUG SHOW】一个由高并发引起的缺陷分析

软件质量保障: 所寫即所思&#xff5c;一个阿里质量人对测试的所感所悟。 缺陷介绍 平台有这样的两个功能&#xff1a; ​功能01: 用户发起支付&#xff0c;成功则将表pay单据状态推进SUCCESS&#xff0c;然后发出支付结果消息&#xff1b;反之如果支付失败&#xff0c;则状态…

vue 报错 error:03000086:digital envelope routines::initialization error解决方案

目录 1. 引言: 2. 更换版本出现问题: 3. 出现原因: 4. 解决办法: -> 4. 1 删了 再换回16.15版本 -> 4.2 指令修改(好使) ---> 4.2.1效果如图 -> 4.3 其他指令就别试了 压根不好使 1. 引言: npm出现问题 , 卸载后 装了个新node 18.15版本 2. 更换版本…