// ==UserScript==
// @name bili_fix_player
// @namespace bili
// @description 修复B站播放器,黑科技,列表页、搜索页弹窗,破乐视限制,提供高清、低清晰源下载,弹幕下载
// @include /^.*\.bilibili\.(tv|com|cn)\/(video|search|sp).*$/
// @include /^.*bilibili\.kankanews\.com\/(video|search|ap).*$/
// @include http://www.bilibili.com/
// @version 3.8.4
// @require http://static.hdslb.com/js/jquery.min.js
// @grant GM_xmlhttpRequest
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @grant unsafeWindow
// @author 绯色
// @downloadURL none
// ==/UserScript==
/**
出现无法播放情况先关闭自动修复
2015-06-26更新优化视频播放页cid获取,优化信息栏提升(仿AC娘),在任何一个页面都增加设置按钮,增加强制html5无弹幕播放按钮,增加视频下载按钮只能点击一次
2015-01-10API账号被封,现更换appkey,感谢swordfeng和tiansh两位小伙伴,增加一个视频播放页面的治疗按钮,用于治疗乐视源和搜狐源无法播放的情况,自动滚动到播放器时机提前,即使api返回缓慢,还是可以体验到极速自动滚屏到播放器
2014-12-08重新兼容火狐魔镜,重新修复部分乐视源只播广告,采用改版bili播放器,,弹窗分P列表标题显示
2014-11-25 博主太懒啊很多小功能修复不了(技术原因也有),本次只修复了视频下载有分段的情况和治疗下部分乐视源弹窗播放广告不播视频,博主无面向对象编程经验,此次更新尝试了部分类的写法,感觉萌(bu)萌(hui)哒(xie)。
2014-10-31 自动宽屏功能会自动强制替换视频,而且无论何种B站播放器都有效;重写了视频下载功能,因为原来的模糊视频接口坏了,此次修改成更加直观的下载
2014-09-27移除记录弹窗播放器垂直位置功能(因为部分chrome用户老是反应播放器不知所踪),重构弹窗函数,修复弹窗函数多次运行导致分P列表重叠无法选择,博主采用了新的元素点击事件函数,从而使每个弹窗元素只有唯一一个点击事件,并修复了在火狐下视频播放页替换播放器后的网页全屏(chrome下无解,等待大神帮助),重新处理监听ajax产生的新数据,使用了贴吧大花猫的监听函数,因此可以无须点击左下角的【重新渲染按钮】,但是在部分机器可能有卡顿,如果觉得卡顿可以自行删除307行的代码即可,增加按需替换播放器选项【以前是一律强制替换】,自动宽屏在弹窗和视频页大型播放器下并且强制替换选项开启有效,按需替换则部分有效[因为是替换后的视频才有效]
2014-09-15修复专题页导致按钮失效,在左侧下角增加一个【重新渲染弹窗按钮】,当部分地方没有弹窗按钮的时候,可以点击一下,然后应该有弹窗按钮了,新功能【视频页自动定位到播放器位置】,新功能【播放器自动宽屏[包括弹窗和视频页的播放器(大型)]】
2014-09-06由于B站可以自由切换新版旧版的首页,增加对其支持(增加重新渲染弹窗按钮,如果发现部分列表无弹窗按钮则点击),同时恢复记录弹窗播放器垂直位置,为保证播放器不会不知所踪,设置垂直位置有极限值,超过此值域会被自动初始化;
2014-09-04B站UI升级导致脚本失效,修复为临时版本,因为B站部分列表变成AJAX,脚本给ajax后的内容添加支持比较麻烦,等博主搬砖活干完,谢谢支持
2014-08-15增加专题弹窗,移除对所有播放器都采用打开菜单时将视频移开的功能,需要360浏览器用户自己设置打开此功能
2014-08-01弹窗网页全屏在田生大神帮助下完美解决(chrome无解),同时博主修复视频播放页面的网页全屏
2014-07-26弹窗因为本人技术问题无法完美解决,使用embed标签替换,可以网页全屏,但是关闭弹窗后会导致鼠标滚轮无效使用iframe标签无滚轮bug,但是因为跨域了,导致无法网页全屏
2014-07-23修复多数BUG
2014-07-20修复小BUG,增加评论区移除和谐娘功能 当出现[此楼层已被用户隐藏 点击查看]时,自动展开,需要到脚本设置页面设置
2014-07-13你造吗?您可以使用一个海外的代理并将http://interface.bilibili.com/playurl?*作为代理规则加入到代理列表中j即可弹窗播放爱奇艺视频(来自田生大神)
修复弹窗播放时,点击B站FLASH播放器后,若直接点击关闭弹窗,会造成鼠标滚轮无效的问题
修复360浏览器在脚本设置的时候,被视频君挡住无法设置的问题,方案是(设置的时候先让视频君去火星,设置后再放回来)
2014-06-30按照田生大神建议,增加与其脚本匹配id,在弹窗标题增加打开播放页面的按钮,补充,发现BUG,在弹窗播放时,点击B站FLASH播放器后,若直接点击关闭弹窗,会造成鼠标滚轮无效的问题,这BUG作者暂时无修复方法
并且使用了田生大神分支里面的弹窗播放器支持网页全屏功能,感谢
2014-06-21修复搜索页面因为作者正则匹配错误(B站把域名换成com但在a标签还是tv域名,坑爹)的问题
2014-06-18修复B站更换域名的BUG,在田生大神的建议下,将所有api域名换成com,弹窗播放器增加收藏按钮
2014-06-08修复小部分bug(样式冲突、弹窗冲突)
2014-06-03增强弹窗播放器,[拖动窗口标题可移动播放器,拖动右下角可改变播放器大小,设置后自动保存宽高和位置]
2014-05-25感谢吧友lzgptdgj提供BUG,在小型播放器下,屏蔽规则会无效的问题,已经修复
2014-05-14增加首页弹窗播放,基本实现全站可弹窗(首页新番专题列表除外等)
2014-05-13增加搜索页面的弹窗播放,并且支持多P和显示当前P,增加模糊画质下载按钮
2014-05-11还是基佬要求,增加弹窗播放器分P效果,增加弹幕下载功能,在吧友大神田生的建议下,正则表达式加强匹配
2014-05-10收益于自己的B站追番计划(http://v.myacg.ga或者http://weiyun.jd-app.com),代码逻辑重构(不再区分视频源再解析视频),并重写UI
2014-05-10受诸多基佬要求,增加除首页外其他分类页面的弹窗播放(初衷是为了弹窗乐视源)
2014-03-28增加下载视频按钮
2014-01-23替换优酷、爱奇艺、搜狐为B站播放器
2013-12-14修复B站播放器无法在火狐魔镜弹窗播放
------------以下信息提供给开发者-----------
//https://static-s.bilibili.tv/play.swf---新版播放器
//http://static.hdslb.com/play.swf---旧版播放器
//https://static-s.bilibili.tv/play_old.swf---考古级别播放器
//使用https连接的播放器可以获得屏蔽列表
-------------------------------------------
*/
(function() {
//初始化 init
if (GM_getValue('init') == undefined) { //初始化优化,只查询一次数据库
if (GM_getValue('version') == undefined)
GM_setValue('version', 1); //版本号
if (GM_getValue('auto') == undefined)
GM_setValue('auto', 1);
if (GM_getValue('fix_type') == undefined)
GM_setValue('fix_type', 1); //按需修复;强制修复
if (GM_getValue('fix_firefox') == undefined)
GM_setValue('fix_firefox', 0); //默认关闭修复火狐魔镜
if (GM_getValue('player_size') == undefined)
GM_setValue('player_size', 1);
if (GM_getValue('pagebox_display') == undefined)
GM_setValue('pagebox_display', 0);
if (GM_getValue('pagebox_harm') == undefined)
GM_setValue('pagebox_harm', 0);
if (GM_getValue('init360') == undefined)
GM_setValue('init360', 0);
//if (GM_getValue('player_container')== undefined) GM_setValue('player_container', 1);//弹窗播放器的标签容器(iframe/embed)已经完美解决
//初始化播放器宽高
if (GM_getValue('player_width') == undefined)
GM_setValue('player_width', 950);
if (GM_getValue('player_height') == undefined)
GM_setValue('player_height', 482);
//初始化播放器外框位置
//if (GM_getValue('div_top') == undefined) GM_setValue('div_top', 100);//设置垂直位置的时候,如果是长页而且是浮动播放器时候记录位置,会导致播放器不知所踪
if (GM_getValue('div_left') == undefined)
GM_setValue('div_left', 100);
//自动定位播放器--来自火狐吧友
if (GM_getValue('auto_locate') == undefined)
GM_setValue('auto_locate', 1);
//自动宽屏-来自牙刷科技冻猫
if (GM_getValue('auto_wide') == undefined)
GM_setValue('auto_wide', 0);
//是否启用视频弹窗功能--ajax重新渲染会导致渲染卡顿
if (GM_getValue('window_play') == undefined)
GM_setValue('window_play', 1);
GM_setValue('init', 1);
}
//欢迎屏幕
var version = '3.8.4';
var local_version = GM_getValue('version');
if (version != local_version) {
alert('\n\
1:感谢使用Bili Fix Player版本号3.8.4[20150627],阅读以下说明将有助于你更好地使用脚本\n\
2:更新优化视频播放页cid获取\n\
3:优化信息栏提升(仿AC娘),在任何一个页面都增加设置按钮\n\
4:增加强制html5无弹幕播放按钮\n\
5:增加视频下载按钮只能点击一次。反馈http://bangumi.ga/361.html\n\
6:感谢您的支持,我们下一版本再见!');
GM_setValue('version', version);
}
fix_player_fullwin = {
fix_init : function () {
setTimeout(function () {
// 代码来自 http://static.hdslb.com/js/page.arc.js 为了兼容性目的添加了 .tv 相关域名
location.href = ['javascript: void(function () {var c;',
'window.postMessage?(c=function(a){"https://secure.bilibili.com"!=a.origin',
'&&"https://secure.bilibili.tv"!=a.origin&&"https://ssl.bilibili.com"!=a.origin',
'&&"https://ssl.bilibili.tv"!=a.origin||"secJS:"!=a.data.substr(0,6)',
'||eval(a.data.substr(6));',
'"undefined"!=typeof console&&console.log(a.origin+": "+a.data)},',
'window.addEventListener?window.addEventListener("message",c,!1):',
'window.attachEvent&&window.attachEvent("onmessage",c)):',
'setInterval(function(){if(evalCode=__GetCookie("__secureJS"))',
'{__SetCookie("__secureJS",""),eval(evalCode)}},1000);',
'}());'
].join('');
}, 0);
},
fix_window : function () {
fix_player_fullwin.fix_init();
setTimeout(function () {
location.href = 'javascript:void(' + function () {
player_fullwin = function (is_full) {
$('.z, .header, .z_top, .footer').css({
'display' : is_full ? 'none' : 'block'
});
$('#window-player,#bofqi,#bofqi_embed').css({
'position' : is_full ? 'fixed' : 'static'
});
}
}
+ '());';
}, 0);
},
fix_page : function () {
fix_player_fullwin.fix_init();
setTimeout(function () {
location.href = 'javascript:void(' + function () {
player_fullwin = unsafeWindow.player_fullwin
}
+ '());';
}, 0);
}
};
/**
-------------------------------用户界面GUI View-------------------------------------
*/
//函数,插入可视化操作视图
function insert_html(type, mode) {
var auto = GM_getValue('auto') ? '已打开' : '已关闭';
var fix_type = GM_getValue('fix_type') ? '当前按需修复[自动宽屏部分视频有效]' : '当前强制修复[全部B站播放器自动宽屏有效]';
var player_size = GM_getValue('player_size') ? '大型' : '小型';
var fix_firefox = GM_getValue('fix_firefox') ? '已开启兼容火狐魔镜' : '已关闭兼容火狐魔镜';
var display = GM_getValue('pagebox_display') ? '悬浮' : '默认';
var harm = GM_getValue('pagebox_harm') ? '和谐娘打酱油中' : '默认[和谐娘和谐中]';
var init360 = GM_getValue('init360') ? '已打开' : '已关闭';
var auto_locate = GM_getValue('auto_locate') ? '已打开' : '已关闭';
var auto_wide = GM_getValue('auto_wide') ? '已打开' : '已关闭';
var window_play = GM_getValue('window_play') ? '已打开' : '已关闭';
//var container=GM_getValue('player_container')?'iframe[无滚动条bug]':'embed[无拖放bug]';
var div = '
';
$('li.m-i:nth-child(1) > a:nth-child(1)').prop('outerHTML', div);
//下载高清
$('#hd_av_download').click(function () {
download_bili_av('HD');
});
//下载渣画质
$('#ld_av_download').click(function () {
download_bili_av('LD');
});
//设置
var event_control = {
Listener : function (selector, config_val, notice1, notice2) {
$(selector).click(function () {
event_control.Control(config_val, selector, notice1, notice2);
});
},
Control : function (config_val, selector, notice1, notice2) {
GM_getValue(config_val) ? GM_setValue(config_val, 0) : GM_setValue(config_val, 1);
var s = GM_getValue(config_val) ? notice1 : notice2;
if ((config_val == 'auto_wide' && GM_getValue('auto_wide')) || (config_val == 'fix_firefox' && GM_getValue('fix_firefox'))) {
GM_setValue('fix_type', 0);
}
$(selector).html(s);
$(selector).toggleClass("active");
$('#bili_set_status').html('已更改,刷新生效_(:3」∠)_');
ac_alert('normal', s, 6000);
}
};
//监听修复按钮
event_control.Listener('#bili_fix', 'auto', '已打开自动修复', '已关闭自动修复');
//监听兼容火狐魔镜
event_control.Listener('#fix_firefox', 'fix_firefox', '已开启兼容火狐魔镜', '已关闭兼容火狐魔镜');
//监听播放器大小按钮
event_control.Listener('#player_size', 'player_size', '已设置大型播放器', '已设置小型播放器');
//监听评论分页功能显示切换
event_control.Listener('#pagebox-display', 'pagebox_display', '已设置评论分页悬浮', '已设置评论分页默认');
//监听评论和谐娘功能切换
event_control.Listener('#pagebox-harm', 'pagebox_harm', '已设置和谐娘打酱油中', '已设置默认[和谐娘和谐中]');
//360火星
event_control.Listener('#init360', 'init360', '360兼容已打开,请刷新', '360兼容已关闭,请刷新');
//自动定位播放器
event_control.Listener('#auto-locate', 'auto_locate', '自动定位播放器已打开,请刷新', '自动定位播放器已关闭,请刷新');
//自动宽屏
event_control.Listener('#auto-wide', 'auto_wide', '已打开,且自动开启强制修复模式,请刷新', '已关闭,请按自己需要是否关闭强制修复模式,请刷新');
//修复模式
event_control.Listener('#fix-type', 'fix_type', '当前按需修复[自动宽屏部分视频有效],请刷新', '当前强制修复[即使是B站播放器,自动宽屏有效],请刷新');
//弹窗播放功能
event_control.Listener('#window_play', 'window_play', '当前打开弹窗播放功能,请刷新', '当前关闭弹窗播放功能,请刷新');
}
//弹窗播放器
var window_player = {
init : function (aid, cid) {
this.width = GM_getValue('player_width');
this.height = GM_getValue('player_height');
this.wide = '';
if (GM_getValue('auto_wide') == 1)
this.wide = '&as_wide=1';
},
default:
function (aid, cid) {
window_player.init(aid, cid);
ac_alert('info', '默认弹窗播放中....', 6000);
return '';
},
fix_firefox : function (aid, cid) {
window_player.init(aid, cid);
ac_alert('info', '修复火狐专用弹窗播放中....', 6000);
return '