您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
橘子动漫增强脚本,添加各种快捷键,自动连播等
// ==UserScript== // @name 橘子动漫增强 // @namespace http://tampermonkey.net/ // @version 1.1.2 // @description 橘子动漫增强脚本,添加各种快捷键,自动连播等 // @author NPC-977 // @match https://www.mgnacg.com/bangumi/* // @match https://play.mknacg.top:8585/* // @exclude https://www.mgnacg.com/static/player/prestrain.html // @exclude https://www.mgnacg.com/addons/* // @icon https://www.google.com/s2/favicons?sz=64&domain=mgnacg.com // @grant none // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @license GPLv3 // ==/UserScript== (function () { 'use strict'; var op = "," //跳过op/ed键 var slow = "b" //减少播放速度键 var normal = "n" //恢复正常速度键 var fast = "m" //加快播放速度键 var screenshot = "." //截图键 var widescreen = "/" //宽屏模式快捷键 var fullscreenbtn = "Enter" //全屏快捷键 var speed_step = 0.3 //播放速度调整步长(默认每次加/减0.5倍) var time_step = 5 //播放时间调整步长(默认每次加/减5秒) var auto_next = true //是否自动下一集,是:true,否:false var auto_rec = true //是否自动恢复上次观看记录 //以下内容禁止修改 function postMessage(type, command, targetwindow, message) {//利用postMessage进行不同源iframe传输消息 message = message || '' targetwindow.postMessage({ myMessage: { type: type, command: command, message: message } }, '*'); } if (window === window.top) {//为顶层window(视频区域外) var iframe var wide_btn var nextbtn window.addEventListener('load', e => {//加载完成进行初始化 nextbtn = document.querySelector("body > div.player.bj > div > div.player-right.cor5.bj > div.player-vod-box > div.list-body > div > div > div.check.selected > div.player-anthology > div.anthology-header.top20 > div > div > a:nth-child(3)") wide_btn = document.querySelector("body > div.player.bj > div > div.player-left > div.player-switch.fa") iframe = document.querySelector("#videoiframe") var fjb = document.querySelector("body > div.page.player > div.main > div > div.module.module-player > div.player-rm.rm-list") var hengfu = document.querySelector("body > div.page.player > div.main > div > div.module.module-player > div.module-main > div.player-box > div > div.tips-box > div > ul") window.targetwindow = iframe.contentWindow fjb.remove() hengfu.remove() }); window.addEventListener('message', e => {//接受来自视频区域的消息 if (e.data.myMessage && e.data.myMessage.command){ switch (e.data.myMessage.command){ case 'next':auto_next ? nextbtn.click():null;break case 'ScreenShot':ScreenShot(e.data.myMessage.message);break case 'Widescreen':wide_btn.click();break case 'videoCurrentTime':window.videoCurrentTime = e.data.myMessage.message;break } } }); window.addEventListener("keydown", e => {//监听按键按下 switch(e.key){ case op:e.preventDefault();postMessage('time', 'op',window.targetwindow);break case 'ArrowLeft':e.preventDefault();postMessage('time', '-',window.targetwindow);break case 'ArrowRight':e.preventDefault();postMessage('time', '+',window.targetwindow);break case 'ArrowUp':e.preventDefault();postMessage('volume', '+',window.targetwindow);break case 'ArrowDown':e.preventDefault();postMessage('volume', '-',window.targetwindow);break case slow:e.preventDefault();postMessage('rate', 'slow',window.targetwindow);break case normal:e.preventDefault();postMessage('rate', 'normal',window.targetwindow);break case fast:e.preventDefault();postMessage('rate', 'fast',window.targetwindow);break case ' ':e.preventDefault();postMessage('pop', 'pop',window.targetwindow);break case screenshot:e.preventDefault();postMessage('Screenshot', 'Screenshot',window.targetwindow);break case widescreen:e.preventDefault();wide_btn.click();break case fullscreenbtn:e.preventDefault();postMessage('fullscreen','fullscreen',window.targetwindow) } }); function ScreenShot(data) {//截图功能的视频区域外部功能 var downloadLink = document.createElement('a');//下载链接 downloadLink.href = data;//来自视频区域的图片数据 var ScreenShotName = document.title.replace(/在线观看-橘子动漫/,'')+window.videoCurrentTime//截图名称 downloadLink.download = ScreenShotName; downloadLink.click(); } } else {//为内层window(视频区域) var video var timer var url = window.location.href var canvas window.onbeforeunload = recordCurrentTime//在页面结束时记录播放进度 window.addEventListener('load', function () {//视频区域加载完成 video = window.document.querySelector("video") video.addEventListener('loadeddata', function () {//视频加载完成 addCanvas() video.volume = 1 video.play() auto_rec?recoveryPlayRecord():null video.addEventListener('ended', function () { postMessage('next', 'next',window.top) }); }); CreatMessageElement()//自定义消息样式 }); window.addEventListener('message', e => {//接受来自视频区域外的消息 if (e.data.myMessage && e.data.myMessage.command) { switch (e.data.myMessage.type){ case 'time':modifyCurrentTime(e.data.myMessage.command);break case 'rate':modifyRate(e.data.myMessage.command);break case 'volume':modifyVolume(e.data.myMessage.command);break case 'pop':PlayOrPause();break case 'fullscreen':fullscreen();break case 'Screenshot':ScreenShot();break case 'getVideoCurrentTime':postMessage('videoCurrentTime', 'videoCurrentTime',window.top, secTotime(video.currentTime));break } } }); window.addEventListener("keydown", e => {//视频区域内监听按键 switch(e.key){ case widescreen:e.preventDefault();postMessage('Widescreen','Widescreen',window.top);break case op:e.preventDefault();modifyCurrentTime("op");break case slow:e.preventDefault();modifyRate('slow');break case normal:e.preventDefault();modifyRate('normal');break case fast:e.preventDefault();modifyRate('fast');break case screenshot:e.preventDefault();ScreenShot();break case fullscreenbtn: fullscreen();break } }); function recoveryPlayRecord() {//恢复进度 var recordTime = localStorage.getItem(window.location.href) if (recordTime && recordTime > 30 && video.duration - recordTime > 30) { video.currentTime = recordTime message('已为您恢复上次进度:' + secTotime(recordTime)) } } function recordCurrentTime() {//记录播放进度 localStorage.setItem(window.location.href, video.currentTime) console.log(localStorage.getItem(window.location.href)) } function PlayOrPause() {//暂停/播放 video.paused ? video.play() : video.pause() message(video.paused ? '暂停' : '播放') } function fullscreen() { document.webkitFullscreenElement ? video.webkitExitFullscreen() : video.webkitRequestFullscreen() //document.querySelector("body > div.artplayer-app > div > div.art-bottom > div.art-controls > div.art-controls-right > div.art-control.art-control-fullscreen.hint--rounded.hint--top").click() } function modifyCurrentTime(op) { // 修改进度 switch(op){ case '+':video.currentTime += time_step;break case '-':video.currentTime -= time_step;break case 'op':video.currentTime += 90;break } message('当前进度:' + secTotime(video.currentTime) + '/' + secTotime(video.duration)) } function modifyRate(op) { // 修改倍速 switch(op){ case 'fast':video.playbackRate += speed_step;break case 'slow':video.playbackRate -= speed_step;break case 'normal':video.playbackRate = 1.0;break } message('当前倍速:' + video.playbackRate) } function modifyVolume(op) {// 修改音量 op === '+'?video.volume += 0.1:video.volume -= 0.1 message('当前音量:' + video.volume * 100) } function CreatMessageElement() {//自定义消息区域绘制 const messageElement = document.createElement('div') messageElement.textContent = 'Hello! This is a custom message.' messageElement.style.position = 'absolute' messageElement.style.top = '10px' messageElement.style.left = '10px' messageElement.style.backgroundColor = 'rgba(0, 0, 0, 0.8)' messageElement.style.color = '#fff' messageElement.style.padding = '5px' messageElement.style.fontSize = '16px' messageElement.style.zIndex = '9999' messageElement.style.display = 'none' messageElement.id = 'customMessage' document.body.appendChild(messageElement) } function message(text) {//自定义消息区域显示消息方法 var messageElement = document.querySelector("#customMessage") messageElement.textContent = text messageElement.style.display = 'block' if (timer) { clearTimeout(timer); } timer = setTimeout(function () { messageElement.style.display = 'none' }, 3000) } function secTotime(s) {//秒转时间 var t = ''; if (s > -1) { var hour = Math.floor(s / 3600) var min = Math.floor(s / 60) % 60 var sec = s % 60 if (hour === 0) { t = '' } else if (hour < 10) { t = '0' + hour + ":" } else { t = hour + ":" } if (min < 10) { t += "0" } t += min + ":" if (sec < 10) { t += "0" } t += sec.toFixed(0) } return t } function recoveryRecord(recordTime) {//恢复进度 video.duration - recordTime > 30 && recordTime > 30 ? video.currentTime = recordTime : null message('已为您恢复上次进度:' + secTotime(recordTime)) } function addCanvas() {//增加截图绘制区域 canvas = document.createElement('canvas') canvas.style.width = video.videoWidth canvas.style.height = video.videoHeight canvas.id = 'canvas' document.body.appendChild(canvas) } function ScreenShot() {//截图的视频区域部分功能 postMessage('videoCurrentTime', 'videoCurrentTime',window.top, secTotime(video.currentTime))//给视频区域外当前视频时间,作为截图名 canvas.setAttribute('width',video.videoWidth) canvas.setAttribute('height',video.videoHeight) canvas.style.display = 'none' var base64 var ctx = canvas.getContext('2d') ctx.drawImage(video,0,0,video.videoWidth,video.videoHeight) base64 = canvas.toDataURL('images/png') postMessage('ScreenShot','ScreenShot',window.top,base64) } } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址