// ==UserScript==
// @name 解锁b站vip视频并附带弹幕
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACS0lEQVRYR8WXz2oTURTGv3MnpqhNKy1UWmxRTGdaiLSQRKkKIoK4FVrRPoHu7BMYn0B3+gQquuiuiC6kaFVsAhGEZkKqG/+Vrtp0YWsyR27KlEwz0xnnT3LgwjB37vl+97tzz9whdDiow/pwBCjofN0AJohwKQgkMxYF8Dmt0bxdnhaAQoWTXMczENJBhFvGMgqk4GY6SZXmPgvAmy/cnYijGqrwvmTVHSQup2jLvG0ByJf5EYDbUQIAeJxR6U4LQHGV1VodesTijfQxBdrkaSrL6z0Hlst8i4An7QBgYDar0lMrgM45ItxrCwDjflajnC+AtR8Gvn8zGpz9xwVOjor/Zma/ANt/GIsLNWxt8p7o4IiAmlLQP+C9pvkG+FoyUPxYs52xhFDPKIh3uRviG2ClWIdsTpHoJYymFNdliQzABBsaEZg4p+DwUftliRxAggwOC0xdidma1RaAI92Ea9OHOgcwPqlANruI1AElhsa2dBKXQJEBnDglGlvxWN/BNcE3gKyCS69b64AUlMISwEv4BpDJ3778i/Xfu5XQtFtaLq+9RiCA6gZj/dcuQN8Audod6kvodYZuz9k7UOK7JPDAbXAY/WxgLjtGDy2f408VPi8MLIUh4JbDELhwNknvLQDyQNoTh87AkFuCIP0E/NzcgWYeTC0bdrkNp6Lm9bc4YM4qr/NzEGaCzNJxLONFRqMbzf22JSu/wlcphhwzpsIAIcIHriGXGadX+/MdWDPflTjRxcH+kLYJhYtj5Piz4/0gF4YVNjk6DvAPDb0aMEr8/nEAAAAASUVORK5CYII=
// @version 1.11.4
// @description test
// @author p7
// @match https://www.bilibili.com/*
// @match https://vip.parwix.com:4433/*
// @match https://z1.m1907.cn/*
// @match https://api.yueliangjx.com/*
// @match https://showxi.xyz/*
// @match https://okjx.cc/*
// @run-at document-end
// @grant GM_openInTab
// @grant GM.openInTab
// @grant GM_getValue
// @grant GM.getValue
// @grant GM_setValue
// @grant GM.setValue
// @grant GM_addStyle
// @require https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
// @namespace http://greasyfork.icu/users/789132
// ==/UserScript==
(function () {
var player
var playerRect
var minpool=[]
//var minpoolout=[]
var domPool = [];
var domtopdownPool = [];
var listobj
var distance = 25
var fontSize = 25;
function xmlToJson(xml) {
// Create the return object
var obj = {};
if (xml.nodeType == 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 3) { // text
obj = xml.nodeValue;
}
// do children
if (xml.hasChildNodes()) {
for(var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName;
if (typeof(obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof(obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
};
function getBV(vipiframe) {
let bv = $("a.av-link[target='_blank']")[0]
if (bv) {
console.log(bv.innerText)
$.getJSON("https://api.bilibili.com/x/player/pagelist?bvid=" + bv.innerText,function(result) {
var xmlhtml = `https://api.bilibili.com/x/v1/dm/list.so?oid=${result.data[0].cid}` //`https://api.bilibili.com/x/v1/dm/list.so?oid=283060255`
//ajax解析xml文件
$.ajax({
url: xmlhtml,
dataType: "xml",
success: function (xml) {
vipiframe.postMessage({obj:xmlToJson(xml),str:'xmllist'},'*');
}
})})
} else {
setTimeout(function () {
getBV(vipiframe)}, 500)
}
}
function receiveInfoFromAnotherDomain(){
//首先让window添加一个事件监听函数,表明它可以监听窗口对象的message事件
//它受到事件时,会先判断是否来自指定的Domain(不是所有Domain丢过来的事件它都处理的)
window.addEventListener("message",function(ev){
switch (window.location.host) {
case 'www.bilibili.com':
if(ev.origin!='https://www.bilibili.com'&&ev.origin!='https://message.bilibili.com'){
console.log(ev.origin,' message to',window.location.href,ev.data);
//window.postMessage({str:'test1'},ev.origin);
if(window.frames[0]&&ev.data.str!='来自iframe:'){
//window.frames[0].postMessage({str:'test2'},'*');
if(ev.data.str=='hasplayer'){
getBV(window.frames[0])
}
}
if(window.frames[0].frames[0]&&ev.data.str!='来自iframe:'){
//window.frames[0].frames[0].postMessage({str:'test3'},'*');
if(ev.data.str=='hasplayer'){
getBV(window.frames[0].frames[0])
}
}
}
break
default:
//if(ev.origin=='https://www.bilibili.com'){
//console.log(ev.origin,' message to',window.location.href,ev.data);
window.top.postMessage({web:window.location.href,obj:ev.data,str:'来自iframe:',from:ev.origin},'*');
if(ev.data.str=='xmllist'){
listobj=ev.data.obj
}
}})
//将json字符串转为json对象,然后从中分离出原始信息
//var personInfoJSON = JSON.parse(ev.data);
}
function detecH5Player(findplayertime) {
player = document.querySelector('video')
if (player) {
//console.log(window.location.href+'发现h5')
receiveInfoFromAnotherDomain()
window.top.postMessage({str:'hasplayer',web:window.location.href},'*');
playerRect = player.getBoundingClientRect()
initcss()
player.addEventListener('pause', function () {//暂停开始执行的函数
//console.log('pause')
//console.log($('video')[0].paused)
$('.left').each(function(index,element){
element.style.willChange='auto'
let domRect = element.getBoundingClientRect()
let domLeft = domRect.left-playerRect.left
$(element).css('transform',`translateX(${domLeft}px)`);
$(element).css('transition',`transform 0s linear`);
})
});
player.addEventListener('playing', function () {//暂停开始执行的函数
playtime=(new Date()).getTime()
$('.left').each(function(index,element){
let domRect = element.getBoundingClientRect()
let domLeft = domRect.left-playerRect.left
let oldS = element.clientWidth + player.clientWidth
let newS = element.clientWidth + domLeft
let oldT = 0.0074*(element.clientWidth+player.clientWidth)
let newT = newS/oldS*oldT
//console.log(element.clientWidth+','+player.clientWidth+','+oldS+','+newS+','+oldT+','+newT)
$(element).css('transition',`transform ${newT}s linear`);
$(element).addClass('left');
element.style.willChange='transform'
element.style.transform = `translateX(${-element.clientWidth}px)`;
})
})
player.addEventListener('timeupdate', function () {
if(minpool.length==0&&listobj){
//window.top.postMessage({obj:'player.duration:'+player.duration,str:'来自iframe:',from:window.location.href},'*');
minpool = new Array(parseInt(player.duration / 60));
let minlen = minpool.length
for(var a=0;a<=minlen;a++) {
minpool[a]=[]
}
//minpoolout = new Array(minlen);
//for(var b=0;b<=minlen;b++) {
// minpoolout[b]=[]
//}
let len=listobj.i.d.length
//window.top.postMessage({obj:'listobj.i.d.length:'+listobj.i.d.length,str:'来自iframe:',from:window.location.href},'*');
for(var j=0;j<len;j++) {
let strp = listobj.i.d[j]['@attributes'].p
let arrp = strp.split(',');
let arrpJson = {"time":arrp[0], "type":arrp[1],"size":arrp[2],"rgb":arrp[3],"pool":arrp[5],"text":listobj.i.d[j]['#text']};
minpool[parseInt(arrp[0] / 60)].push(arrpJson)
window.top.postMessage({obj:'minpool push:'+minpool[parseInt(arrp[0] / 60)][minpool[parseInt(arrp[0] / 60)].length-1],str:'来自iframe:',from:window.location.href},'*');
}}
//window.top.postMessage({obj:'currentTime:'+player.currentTime+' '+minpool.length+' '+domPool.length,str:'来自iframe:',from:window.location.href},'*');
$('.topdown').each(function(index,element){
if(element.innerText != ''){
let nowtime = (new Date()).getTime()
let lasttime = parseInt(nowtime)- parseInt($(element).prop("name"))
//console.log('lasttime:'+lasttime+' '+typeof lasttime);
if(lasttime >= 4500){
//console.log('lasttime2:'+lasttime+' '+typeof lasttime);
element.innerText = ''
element.name = ''
}
}
})
if(minpool.length!=0 && domPool.length!=0){
let channel;
let nowlen = parseInt(player.currentTime / 60)
//console.log('currentTime:'+player.currentTime);
//window.top.postMessage({obj:'currentTime:'+player.currentTime+' '+minpool[nowlen].length,str:'来自iframe:',from:window.location.href},'*');
if (!$(player).paused) {
for (var j = minpool[nowlen].length -1; j>-1; j--) {
//console.log('pool:'+minpool[nowlen][j].pool)
//window.top.postMessage({obj:minpool[nowlen][j],str:'来自iframe:',from:window.location.href},'*');
if(minpool[nowlen][j].time >= player.currentTime && minpool[nowlen][j].time <= player.currentTime+0.5&&minpool[nowlen][j].type=='1'){
channel = getChannel()
//console.log('channel:'+channel)
if(channel!=-1){
let arrpJson = minpool[nowlen][j]
//console.log(minpool[nowlen][j].time+','+player.currentTime+' biu~ [' + minpool[nowlen][j].text + ']');
let dom = domPool[channel].shift()//把数组的第一个元素从其中删除
domPool[channel].push(dom);//向数组的末尾添加一个或多个元素
shootDanmu(dom, arrpJson, channel);
//minpoolout[nowlen].push(minpool[nowlen][j])
//minpool[nowlen].splice(j,1);
}
}else if(minpool[nowlen][j].time >= player.currentTime && minpool[nowlen][j].time <= player.currentTime+0.5&&minpool[nowlen][j].type!='1') {
channel = gettopdownChannel(minpool[nowlen][j].type)
console.log('gettopdownChannel:'+channel)
if(channel!=-1){
let arrpJson = minpool[nowlen][j]
//console.log(minpool[nowlen][j].time+','+player.currentTime+' biu~ [' + danmu + ']');
let dom = domtopdownPool[channel]
shoottopdownDanmu(dom, arrpJson, channel);
//minpoolout[nowlen].push(minpool[nowlen][j])
//minpool[nowlen].splice(j,1);
}
}
}
}
}
})
} else {
// 轮询检测
setTimeout(function () {
console.log(window.location.href+'开始检测h5',findplayertime,new Date().getTime()-findplayertime)
if(new Date().getTime()-findplayertime<=5000){
detecH5Player(findplayertime)}
}, 500)
}
}
let hasPosition = [];
var MAX_DM_COUNT = 8
var CHANNEL_COUNT = 0
function initcss() {
let css = `
.right {
position: absolute;
visibility: hidden;
white-space: nowrap;
/*left: 700px;
transform: translateX(700px);*/
}
.left {
position: absolute;
white-space: nowrap;
user-select: none;
/* transition: transform 7s linear; 时间相同 越长的弹幕滑动距离越长 所以越快~ */
}
.topdown {
position: absolute;
white-space: nowrap;
user-select: none;
}
`
GM_addStyle(css)
refreshDom()
}
function refreshDom(){
MAX_DM_COUNT = 10;
CHANNEL_COUNT = Math.floor(player.clientHeight/fontSize);
// 先new一些span 重复利用这些DOM
for (let j = 0; j < CHANNEL_COUNT; j++) {
let doms = [];
for (let i = 0; i < MAX_DM_COUNT; i++) {
// 要全部放进player
let dom = document.createElement('div');
//alert(fontSize)
dom.style.fontSize = fontSize + 'px';
dom.style.color='rgb(255,255,255)';
dom.style.fontFamily='SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif'
dom.style.fontWeight='bold'
dom.style.opacity='1'//不透明度
dom.style.textShadow='rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px';
dom.style.transform=`translateX(${player.clientWidth}px)`
dom.style.willChange='auto'
// 初始化dom的位置 通过设置className
dom.className = 'right';
// DOM的通道是固定的 所以设置好top就不需要再改变了
dom.style.top = j * fontSize + 'px';
player.parentNode.appendChild(dom);
// 放入改通道的DOM池
doms.push(dom);
// 每次到transition结束的时候 就是弹幕划出屏幕了 将DOM位置重置 再放回DOM池
dom.addEventListener('transitionend', () => {
dom.style.transition = null;
dom.style.willChange='auto'
dom.style.transform=`translateX(${player.clientWidth}px)`
dom.innerText =''
dom.className = 'right';
});
}
domPool.push(doms);
let dom2 = document.createElement('div');
dom2.style.fontSize = fontSize + 'px';
dom2.style.color='rgb(255,255,255)';
dom2.style.fontFamily='SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif'
dom2.style.fontWeight='bold'
dom2.style.opacity='1'//不透明度
dom2.style.textShadow='rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px';
dom2.style.willChange='auto'
dom2.style.top = j * fontSize + 'px';
dom2.className = 'topdown';
player.parentNode.appendChild(dom2);
domtopdownPool.push(dom2);
}
}
/**
* 获取一个可以发射弹幕的通道 没有则返回-1
*/
function getChannel() {
for (let i = 0; i < CHANNEL_COUNT; i++) {
//let channelArray =
let lastNumPos = domPool[i].length-1
let lastDom = domPool[i][lastNumPos];
//console.log('lastDom:'+lastDom)
if (lastDom) {
if(lastDom.className=='right'){
//console.log('捷径')
return i
}
let lastDomPos = lastDom.getBoundingClientRect();
//console.log('lastDomPos.right:'+lastDomPos.right+'playerRect.right:'+playerRect.right)
// 轨道中最后一个元素要求已经全部进入展示区域
if (lastDomPos.right > playerRect.right) {
continue
}
let occupyS = lastDomPos.right-playerRect.left
//console.log('playerRect.left:'+occupyS+'player.clientWidth:'+player.clientWidth)
// 追及问题
if (player.clientWidth - occupyS< distance) {
continue
}
for (let j = 0; j < domPool[i].length; j++) {
if(domPool[i][j].className=='right'){
return i
}
}
}
}
return -1;
}
function gettopdownChannel(type) {
for (let i = 0; i < CHANNEL_COUNT; i++) {
if(type==4){
let lastNumPos = domtopdownPool.length-i-1
let downDom = domtopdownPool[lastNumPos];
if(downDom.innerText ==''){
return i
}
}else if(type==5){
let lastNumPos2 = i
let topDom = domtopdownPool[lastNumPos2];
if(topDom.innerText ==''){
return i
}
}
}
return -1;
}
/**
* 根据DOM和弹幕信息 发射弹幕
*/
function shootDanmu(dom, arrpJson, channel) {
dom.innerText = arrpJson.text;
console.log(' biu1~ [' + arrpJson.text + ']');
let num16 = parseInt(arrpJson.rgb).toString(16)
dom.style.color = '#' + (Array(6).join(0) + num16).slice(-6)
dom.style.fontSize = arrpJson.size + 'px'
// 如果为每个弹幕设置 transition 可以保证每个弹幕的速度相同 这里没有保证速度相同
dom.style.transition = `transform ${0.0074*(dom.clientWidth+player.clientWidth)}s linear`;
// 设置弹幕的位置信息 性能优化 left -> transform
dom.style.transform = `translateX(${-dom.clientWidth}px)`;
dom.style.willChange='transform'
dom.className = 'left';
}
function shoottopdownDanmu(dom, arrpJson, channel) {
dom.innerText = arrpJson.text;
dom.name = new Date().getTime()
console.log(' biu2~ [' + arrpJson.text + ']');
let num16 = parseInt(arrpJson.rgb).toString(16)
dom.style.fontSize = arrpJson.size + 'px'
dom.style.color = '#' + (Array(6).join(0) + num16).slice(-6)
// 设置弹幕的位置信息 性能优化 left -> transform
dom.style.transform = `translateX(${(player.clientWidth-dom.clientWidth)/2}px)`;
}
var $ = $ || window.$;
var originalInterfaceList = [
{"name":"Parwix","category":"1","url":"https://vip.parwix.com:4433/player/?url="},
{"name":"月亮","category":"1","url":"https://api.yueliangjx.com/?url="},
{"name":"1907","category":"1","url":"https://z1.m1907.cn/?jx="},
{"name":"showxi[多线]","category":"1","url":"https://showxi.xyz/mov/s/?sv=3&url="},
{"name":"OK[多线]","category":"1","url":"https://okjx.cc/?url="},
];
/**
* 共有方法
*/
function commonFunction(){
this.GMgetValue = function (name, value) { //得到存在本地的数据
if (typeof GM_getValue === "function") {
return GM_getValue(name, value);
} else {
return GM.getValue(name, value);
}
};
this.GMsetValue = function(name, value){ //设置存在本地的数据
if (typeof GM_setValue === "function") {
return GM_setValue(name, value);
} else {
return GM.setValue(name, value);
}
};
this.GMaddStyle = function(css){ //插入css
var myStyle = document.createElement('style');
myStyle.textContent = css;
var doc = document.head || document.documentElement;
doc.appendChild(myStyle);
};
this.GMopenInTab = function(url, open_in_background){ //新标签页打开网址
if (typeof GM_openInTab === "function") {
GM_openInTab(url, open_in_background);
} else {
GM.openInTab(url, open_in_background);
}
};
this.addScript = function(url){ //添加脚本
var s = document.createElement('script');
s.setAttribute('src',url);
document.body.appendChild(s);
};
}
//全局统一变量
const commonFunctionObject = new commonFunction();
/**
* 超级解析助手
* @param {Object} originalInterfaceList
* @param {Object} playerNodes
*/
function superVideoHelper(){
this.originalInterfaceList = originalInterfaceList;
this.node = "#player_module";
this.elementId = Math.ceil(Math.random()*100000000);
this.innerParse = function(url) { //内嵌解析
$("#iframe-player").attr("src", url);
};
this.addHtmlElements = function(){
var vipVideoImageBase64 =`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC9klEQVRoQ+2ZPWgVQRDH/7/CWqOIYOFHFbRSjJhGMGDpByoIago70cqvUtQgdipWFqawMWghGIidhcHKQAJqEURBRfED1CCCjc3IPu4em31775J7d3m8cAtX3O7szP7nPzszx6EeH/T4+VUD6DaDTQbMbE+3D7MY+8Ckkw8BPFuMki7KDtUAuuh9Z3oZMtBljxY2X9eBwq4raWPNQEmOLKxm+TBgZqsknQ1dAVzNco+ZhWsm6ZakHZLC1mQyrZ5OX2RvzMxnSa8lzQJ/YwLzGDCze5JOeoI/gbVtAMxJ6vPW7wKnkr4qbEuaxccDcGWBsfNV0mjMmSGAg5LGA6XbgFehITPbLel5MN84ZAUAUjMPgWO+zZY7YGbvJW0OvRoB8EjSEW9+BhhIvOvCp0wGfPPbgZfpRAzATUnn56GEmJyLd39cBNxeF99FADTa42BskuQef4wDh9oB2CXpRbDpMPA4nTOz05LuBDLrgW+dAACGIkxfkHTDm/8DrMwEkBxgOskkqdwEcMAD4GLf3YF0PACOe+uFGMgA4Bj4EAAbAGbcXLQOmNklSdeCTRuBT2bWL+lNsLYfeFIRgH2SJgJ7GwCXYjMBrJb0K9jUiHEzG5F02VubA9b4skXvQMiAmW2VdFSSn24/As0kk1mJzeyppL3ewaaBnWY2K2mLNz8S5ueCAMLwz3q/DZxreweSe3BC0v1Ai7tkYXrsB96WwMBCAfQBv3MBJCD+SVrhaXaZ54z3PgUMhpYrZKCF7bbNnJk5BhwT6fghyW8thoGxigE4my6tXwemQlt5AGI1oamDSIFLmCuURiW5BOGPL8C7drGV206b2XdJ6yJKxoDhmPKCIeS61ZZClncxFgLAtcyxrnEwRmknDFQFIFYTWnJ/CVmoGgYSj7Z81OR86Lg7sOgPmnY6s0IpN4TyYrDb6zWAmoEOPVCHUIcO7Hh7/YemYxcWU7AMf3BkNGDF/FP9rkwGqjddkoWWv5Ql6V1yNXUdWHKXBwZ7noH/dP+HQNqheToAAAAASUVORK5CYII=`;
var category_1_html = "";
this.originalInterfaceList.forEach((item, index) => {
if (item.category === "1") {
category_1_html += "<li title='"+item.name+"' data-index='"+index+"'>" + item.name + "</li>";
}
});
//获得自定义位置
var left = 0;
var top = 100;
var Position = commonFunctionObject.GMgetValue("Position_" + window.location.host);
if(!!Position){
left = Position.left;
top = Position.top;
}
var cssMould = `#vip_movie_box`+this.elementId+` {cursor:pointer; position:fixed; top:` + top + `px; left:` + left + `px; width:0px; z-index:2147483647; font-size:16px; text-align:left;}
#vip_movie_box`+this.elementId+` .item_text {}
#vip_movie_box`+this.elementId+` .item_text .img_box{width:26px; height:35px;line-height:35px;text-align:center;background-color:#E5212E;}
#vip_movie_box`+this.elementId+` .item_text .img_box >img {width:20px; display:inline-block; vertical-align:middle;}
#vip_movie_box`+this.elementId+` .vip_mod_box_action {display:none; position:absolute; left:26px; top:0; text-align:center; background-color:#272930; border:1px solid gray;}
#vip_movie_box`+this.elementId+` .vip_mod_box_action li{border-radius:2px; font-size:12px; color:#DCDCDC; text-align:center; width:60px; line-height:21px; float:left; border:1px solid gray; padding:0 4px; margin:4px 2px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;}
#vip_movie_box`+this.elementId+` .vip_mod_box_action li:hover{color:#E5212E; border:1px solid #E5212E;}
#vip_movie_box`+this.elementId+` li.selected{color:#E5212E; border:1px solid #E5212E;}
#vip_movie_box`+this.elementId+` .selected_text {margin-top:5px;}
#vip_movie_box`+this.elementId+` .selected_text .img_box{width:26px; height:35px;line-height:35px;text-align:center;background-color:#E5212E;}
#vip_movie_box`+this.elementId+` .selected_text .img_box >img {width:20px; height:20px;display:inline-block; vertical-align:middle;}
#vip_movie_box`+this.elementId+` .vip_mod_box_selected {display:none;position:absolute; left:26px; top:0; text-align:center; background-color:#F5F6CE; border:1px solid gray;}
#vip_movie_box`+this.elementId+` .vip_mod_box_selected ul{overflow-y: auto;}
#vip_movie_box`+this.elementId+` .vip_mod_box_selected li{border-radius:2px; font-size:12px; color:#393AE6; text-align:center; width:95px; line-height:27px; float:left; border:1px dashed gray; padding:0 4px; margin:4px 2px;display:block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}
#vip_movie_box`+this.elementId+` .vip_mod_box_selected li:hover{color:#E5212E; border:1px solid #E5212E;}
#vip_movie_box`+this.elementId+` .default-scrollbar-55678::-webkit-scrollbar{width:5px; height:1px;}
#vip_movie_box`+this.elementId+` .default-scrollbar-55678::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#A8A8A8;}
#vip_movie_box`+this.elementId+` .default-scrollbar-55678::-webkit-scrollbar-track{box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#F1F1F1;}
`
commonFunctionObject.GMaddStyle(cssMould);
var htmlMould = `
<div id='vip_movie_box`+this.elementId+`'>
<div class='item_text'>
<div class="img_box" id="img_box_6667897iio"><img src='`+ vipVideoImageBase64 +`' title='点击跳转到综合解析页面,线路随意选!'/></div>
<div class='vip_mod_box_action' >
<div style='display:flex;'>
<div style='padding:10px 0px; width:380px; max-height:400px; overflow-y:auto;' class="default-scrollbar-55678">
<div>
<div style='font-size:16px; text-align:center; color:#E5212E; padding:5px 0px;'><b>线路</b></div>
<ul>
` + category_1_html + `
<div style='clear:both;'></div>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
`;
$("body").append(htmlMould);
};
this.mouseEvent = function(){
$(".item_text").on("mouseover", () => {
$(".vip_mod_box_action").show();
});
$(".item_text").on("mouseout", () => {
$(".vip_mod_box_action").hide();
});
$(".vip_mod_box_action li").each((liIndex, item) => {
item.addEventListener("click", () => {
var videoPlayer = $("<div id='iframe-play-div' style='width:100%;height:100%;z-index:1000;'><iframe id='iframe-player' frameborder='0' allowfullscreen='true' width='100%' height='100%'></iframe></div>");
var index = parseInt($(item).attr("data-index"));
var url = this.originalInterfaceList[index].url + window.location.href;
if (document.getElementById("iframe-player") == null) {
var player = $(this.node);
player.empty();
player.append(videoPlayer);
}
this.innerParse(url); //把播放链接加入到自定义的div
//把点击过的标红
$(".vip_mod_box_action li").removeClass("selected");
$(item).addClass("selected");
commonFunctionObject.GMsetValue("index",index);
});
});
};
this.operatOther = function(){
//console.log(window.location.host)
switch (window.location.host) {
case 'www.bilibili.com':
receiveInfoFromAnotherDomain()
this.addHtmlElements();
//console.log("检测是否为vip视频");
let findviptime= new Date().getTime()
let waitlimit = setInterval(() => {
let arr1=[$(".bpx-player-toast-confirm").text(),$(".twp-title").text()]
let arr2=['成为大会员','付费观看','成为大会员抢先看']
//let arr2=['成为大会员', '开通大会员观看','正在观看预览,大会员免费看全片', '正在观看预览,付费观看完整版']
let intersection = arr1.filter(item => new Set(arr2).has(item))
//console.log(arr1,arr2,intersection);
if(intersection.length!=0){
console.log("是vip视频");
$(".player-limit-mask").remove();
$(".player-limit-mask pay").remove();
//$(".twp-container").hide()
//$(".twp-mask.twp-float").hide()
this.videoreplace()
clearInterval(waitlimit);
}
if(new Date().getTime()-findviptime>=5000){
clearInterval(waitlimit)
}
}, 250);
break
default:
try{
detecH5Player(new Date().getTime())
}catch(err){
console.log('h5:'+err)
}
break
}}
this.videoreplace = function(){
let videoPlayer = $("<div id='iframe-play-div' style='width:100%;height:100%;z-index:1000;'><iframe id='iframe-player' frameborder='0' allowfullscreen='true' width='100%' height='100%'></iframe></div>");
let index = commonFunctionObject.GMgetValue("index");
$(".vip_mod_box_action li").eq(index).addClass("selected");
if(index==null){
index=0
}
let url2 = this.originalInterfaceList[index].url + window.location.href;
console.log(index,url2);
//alert(url);
if (document.getElementById("iframe-player") == null) {
let player = $(this.node);
player.empty();
player.append(videoPlayer);
}
this.innerParse(url2);
}
this.start = function(){
this.operatOther();
this.mouseEvent();
}
};
(new superVideoHelper()).start();
//最后统一调用
/* try{
//let web = window.location.href
//if(web.indexOf("bilibili") != -1){
}catch(e){
console.log("全网VIP解析:error:"+e);
}*/
})()