// ==UserScript==
// @name 奈菲影视小猪手
// @namespace
// @version 2.0.3
// @description 全自动播放下集。页面右上角添加按钮以保存用户设置,可设置播放速度,可设置跳过片尾时间,时间置空则不自动播放,其他设置内容可能以后加。可在视频框内鼠标右击视频或按ctrl键,直接跳下集,鼠标滚轮前进后退8秒一格。去除影响画面的右上角logo。默认5秒后视频自动全屏,时间可调(火狐需新标签打开about:config页面,搜索full-screen-api.allow-trusted-requests-only 把其属性点击设置为false,才可自动全屏)
// @author ok!
// @match https://www.nfmovies.com/*
// @grant unsafeWindow
// @run-at document-idle
// @namespace
// ==/UserScript==
var sec_sub;
function play_menu() {
//播放设置菜单
var li_new = document.createElement("li");
li_new.innerHTML='<a title="设置"><i class="fa fa-gear"></i></a><div class="dropdown-box fadeInDown"><div class="item clearfix"><p class="text-muted">播放设置</p><div class="history-list clearfix"></div><span>当前速度:</span><span id="speed_display"></span><p>选择播放速度: <button id="speed_button" style="background-color: #5bb7fe;border-radius:5px;color:white;"> 默认 1x </button></p><input type="range" min="1" max="100" value="25" class="slider" id="speed_slider"><p style="display: inline;white-space:nowrap;"><span>跳过片尾秒数:</span><input type="text" id="sec_sub" style="width:71px;height:22px;vertical-align: middle;margin: 5px 10px 5px 0;padding: 10px;background-color: #fff;border: 2px solid #ddd;" placeholder="空则不播"></p></div></div>';
li_new.classList.add('dropdown-hover');
document.querySelector('html body.active header#header-top.myui-header__top.clearfix.color.top-fixed.headroom--top.headroom--not-bottom div.container div.row ul.myui-header__user').appendChild(li_new);
//删除选定历史播放记录
var p_add = document.querySelectorAll('div.container div.row ul.myui-header__user li.dropdown-hover div.dropdown-box.fadeInDown div.item.clearfix div.history-list.clearfix p');
for(var i = 0;i<p_add.length;i++){
var a_elem = document.createElement("a");
a_elem.innerHTML= '<span style="background-color: #5bb7fe;border-radius:5px;font-size:70%;"> -删 除-   </span>';
p_add[i].appendChild(a_elem);
p_add[i].lastChild.addEventListener('click',change_cookie)};
function change_cookie(e){
var str_del = e.target.parentElement.parentElement.firstElementChild.title;
console.log(str_del);
var reg_exp =new RegExp(`{\"name\":\"${str_del}[^}]*},?`);
var xyza= encodeURIComponent(decodeURIComponent(document.cookie.replace(/(?:(?:^|.*;\s*)history\s*\=\s*([^;]*).*$)|^.*$/, "$1")).replace(reg_exp,''));
var exp = new Date();
exp.setTime(exp.getTime() + 365 * 24 * 60 * 60 * 1000);
document.cookie=`history=${xyza}; path=/; expires=${exp.toUTCString()}`;
e.target.parentElement.parentElement.remove();
}
//播放设置
var speed_display=document.getElementById("speed_display"),speed_slider=document.getElementById("speed_slider"),speed_button=document.getElementById("speed_button"),y=document.getElementById("sec_sub");
var video_speed;
video_speed = MyTheme.Cookie.Get('speed');sec_sub = MyTheme.Cookie.Get('sec_sub');
video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";
setTimeout(function (){if(video_speed)
document.querySelector('iframe').contentDocument.body.querySelector('div#video div.dplayer-video-wrap video.dplayer-video.dplayer-video-current').playbackRate = video_speed;},4000);
sec_sub?y.value=sec_sub:y.value="";
speed_slider.oninput=function(){MyTheme.Cookie.Set('speed',this.value/25);video_speed = MyTheme.Cookie.Get('speed');video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";
document.querySelector('iframe').contentDocument.body.querySelector('div#video div.dplayer-video-wrap video.dplayer-video.dplayer-video-current').playbackRate = video_speed;
}
speed_button.onclick=function(){MyTheme.Cookie.Set('speed',1);video_speed = MyTheme.Cookie.Get('speed');video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";
document.querySelector('iframe').contentDocument.body.querySelector('div#video div.dplayer-video-wrap video.dplayer-video.dplayer-video-current').playbackRate = video_speed;}
y.onchange=function(){MyTheme.Cookie.Set('sec_sub',this.value);sec_sub = MyTheme.Cookie.Get('sec_sub');sec_sub?y.value=sec_sub:y.value="";
}
}
window.onload = play_menu;
//错就错
document.querySelector('iframe').onload=function (){
sec_sub = MyTheme.Cookie.Get('sec_sub');
var video_speed = MyTheme.Cookie.Get('speed');
setTimeout(function (){if(video_speed)
document.querySelector('iframe').contentDocument.body.querySelector('div#video div.dplayer-video-wrap video.dplayer-video.dplayer-video-current').playbackRate = video_speed;},3000);
//视频自动全屏前,等待时间5(5000毫秒)秒,不能高于5秒
var sec_fullscreen = 5000;
setTimeout(function () {
const elem =document.querySelector('iframe').contentDocument.body.querySelector('div#video');
if (elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
else if (elem.requestFullscreen) {
elem.requestFullscreen();
}
else if (elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} },sec_fullscreen);
// 在视频框内按键ctrl或鼠标右键,直接跳到下一集
setTimeout(function () {
document.querySelector('iframe').contentDocument.body.addEventListener("keydown", function(e) {
if (e.keyCode == 17) {
e.preventDefault();
next_exec();
}
}, false);
document.querySelector('iframe').contentDocument.body.querySelector('div#video').addEventListener("contextmenu", function(e) {
e.preventDefault();
next_exec();
}, false);
// 滚轮前进后退一格8秒
var caught_you=document.querySelector('iframe').contentDocument.body.querySelector('div#video div.dplayer-video-wrap video.dplayer-video.dplayer-video-current');
caught_you.onwheel=function (event) {
event.preventDefault();
event.deltaY = Math.min(Math.max(.125,event. deltaY), 4);
if (event.deltaY < 0) {
//前滚
caught_you.currentTime += event.deltaY/50 ;
}
else {
//后滚
caught_you.currentTime += event.deltaY/50 ;
}
}
},5000);
// 12秒后去右上角logo
setTimeout(function () {
const logo_remov = document.querySelector('iframe').contentDocument.body.querySelector("#video > div.dplayer-video-wrap > div.dplayer-logo > img");
if(logo_remov != null)logo_remov.src="";
}, 12000);
/*
setTimeout(function () {
var play = document.querySelector('iframe').contentWindow.play;
play.logo = "";
document.querySelector('iframe').contentWindow.vfed.player.dplayer(play.auto, play.live, play.trys, play.seek, play.take, play.urls, play.jump, play.logo, play.pics);
}, 8000);
*/
//每隔25秒获取播放剩余时间,如在25秒内则执行主程序
if(sec_sub !== ""){
const sec_sub2=sec_sub+25;
setInterval(function(){if(get_dura() < sec_sub2 && get_dura() !== 0){next_part()};}, 25000);
}
//next_part();
function next_part() {
const sel_part1 = document.querySelector('div.tab-content.mb10 div[class*="active"] ul li[class$="active"] + li a');
if (sel_part1 != null) {
const sec = (get_dura()-sec_sub)*1000;
// console.log(typeof sec);
// console.log(sec);
if (sec !== 0) {
setTimeout(function (){
if(next === now){
const sel_part3 = document.querySelector('div.tab-content.mb10 div[class*="active"] ul li[class$="active"] + li +li a');
if (sel_part3 != null)
{sel_part3.click();}
}
else{now = next;
const iframe_fresh = document.querySelector('iframe');
iframe_fresh.src = iframe_fresh.src;
// vfed.player.eplayer(play.auto, play.live, play.trys, play.seek, play.take, next, play.jump, play.logo, play.pics);
}
}, sec);
}
}
}
//next part 执行
function next_exec(){
if(next === now){
const sel_part2 = document.querySelector('div.tab-content.mb10 div[class*="active"] ul li[class$="active"] + li +li a');
if (sel_part2 != null)
{sel_part2.click();}
}
else{now = next;
const iframe_fresh2 = document.querySelector('iframe');
iframe_fresh2.src = iframe_fresh2.src;
// vfed.player.eplayer(play.auto, play.live, play.trys, play.seek, play.take, next, play.jump, play.logo, play.pics);
}
}
//获取播放剩余时间
function get_dura() {
const sel_start = document.querySelector('iframe').contentDocument.body.querySelector('div.dplayer-icons.dplayer-icons-left span[class="dplayer-time"] span[class="dplayer-ptime"]');
const sel_fin = document.querySelector('iframe').contentDocument.body.querySelector('div.dplayer-icons.dplayer-icons-left span[class="dplayer-time"] span[class="dplayer-dtime"]');
if (sel_start !== null) {
const str_start_time = sel_start.textContent;
const arr_start_time = str_start_time.split(":");
let secS = 0;
for (let i = arr_start_time.length - 1, t = 1; i >= 0; i--, t *= 60) {
secS += arr_start_time[i] * t;
}
const str_fin_time = sel_fin.textContent;
const arr_fin_time = str_fin_time.split(":");
let secF = 0;
for (let j = arr_fin_time.length - 1, y = 1; j >= 0; j--, y *= 60) {
secF += arr_fin_time[j] * y;
}
return secF-secS;
}
return 0;
}
}