// ==UserScript==
// @name bili_fix_player
// @namespace bili
// @description B站播放器增强脚本,下载视频,可使用另外两种H5播放器,可弹窗播放等
// @include /^.*\.bilibili\.(tv|com|cn)\/(video|search|sp).*$/
// @include /^.*bilibili\.kankanews\.com\/(video|search|sp).*$/
// @include /http://www.bilibili.com/(#page=*)?/
// @include http://www.bilibili.com/bangumi/*
// @include http://bangumi.bilibili.com/anime/v/*
// @include http://search.bilibili.com*
// @version 4.0.3
// @require http://static.hdslb.com/js/jquery.min.js
// @require https://greasyfork.org/scripts/19694-abplayer/code/ABPlayer.js?version=125788
// @require https://greasyfork.org/scripts/19695-commentcorelibrary/code/CommentCoreLibrary.js?version=125789
// @require http://static.hdslb.com/js/md5.js
// @grant GM_xmlhttpRequest
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @grant unsafeWindow
// @author 绯色
// @downloadURL none
// ==/UserScript==
/**
出现无法播放情况先关闭自动修复
RE2:v4.0.3版新增功能[20160912]:
1:修复视频源API获取问题!
2:移除略为鸡肋的弹窗功能
3:由于B站现在自带HTML5播放器,本脚本的作用会越来越小,更新可能慢
4:博主拖延症MAX233333
v4.0.2版说明[20160607]:
1:祝君高考成功!
2:修复弹窗开启关闭故障,原因:博主把参数名更换,然后有一个参数是play忘记改成player
3:脚本存储改回原来的GM存储,原因:localStorage在跨域的时候(比如B站二级域名)都会导致脚本存储不统一
4:增加对bangumi新番页面的支持,至于弹窗功能,是个大坑,很少人需要,故此页面不再增加弹窗功能
5:增加小型播放器与其他功能组合的选项
v4.0.1版新增功能[20160530]:
1:自动网页全屏、默认关闭弹幕(已经删除),来自火狐吧谷歌卫士的bilibili_autowide脚本、修复appkey失效
2:增加一个ABP-HTML5播放器,来自脚本https://greasyfork.org/zh-CN/scripts/19696-bili-html5
3:修改脚本存储位置为localStorage,清理cookie会导致存储丢失
B站官方的弹幕播放器摘自http://tieba.baidu.com/p/4355490187谷歌卫士
license by bangumi.ga
*/
(function() {
//初始化 init
if (GM_getValue("bfp_config") ==undefined) {
var _config = {
'init' : 1,
'compatible_360' : 0, //360兼容
'version' : 0, //版本号
'enable' : 1,
'fix_type' : 0, //按需修复;强制修复
'pagebox_display_mode' : 0,
'pagebox_show_secret' : 0,
'window_player_left_position' : 100, //初始化播放器外框位置
'window_player_width' : 950, //初始化播放器宽高
'window_player_height' : 480,
'flash_player_auto_wide' : 0, //自动宽屏-来自牙刷科技冻猫
'flash_player_auto_focus' : 1, //自动定位播放器--来自火狐吧友
'enable_window_player' : 0, //视频弹窗功能-ajax重新渲染会导致渲染卡顿
'flash_player_showComments' : 1, //默认弹幕显示-来自贴吧谷歌卫士
'flash_player_auto_fullwindow' : 0, //自动网页全屏-来自谷歌卫士
};
GM_setValue('bfp_config', JSON.stringify(_config));
}
//欢迎屏幕
var version = '4.0.3';
var local_version = get_bfp_config('version');
if (version != local_version) {
alert('感谢使用Bili Fix Player版本号v4.0.3版RE2:v4.0.3版新增功能[20160912]:\n\
1:修复视频源API获取问题!\n\
2:移除略为鸡肋的弹窗功能\n\
3:由于B站现在自带HTML5播放器,本脚本的作用会越来越小,更新可能慢\n\
4:博主拖延症MAX233333');
set_bfp_config('version', version);
}
/**
数据存储IO
*/
function get_bfp_config(key) {
//console.log(JSON.parse(localStorage.getItem("bfp_config"))[key]);
//return JSON.parse(localStorage.getItem("bfp_config"))[key];
//console.log(GM_getValue("bfp_config"));
return JSON.parse(GM_getValue("bfp_config"))[key];
}
function set_bfp_config(key, value) {
//var current_config = JSON.parse(localStorage.getItem("bfp_config"));
var current_config = JSON.parse(GM_getValue("bfp_config"));
current_config[key] = value;
//console.log(current_config);
//localStorage.setItem('bfp_config', JSON.stringify(current_config));
GM_setValue('bfp_config', JSON.stringify(current_config));
return true;
}
/**
-------------------------------用户界面GUI View-------------------------------------
*/
//函数,插入可视化操作视图
function insert_html(type, mode) {
var enable = get_bfp_config('enable') ? '已打开' : '已关闭';
switch (get_bfp_config('fix_type')) {
case 2:
var fix_type = '强制默认B站播放器[与其他功能组合]';
break;
case 3:
var fix_type = '小型B站FLASH播放器[兼容火狐魔镜、与其他功能组合]';
break;
case 4:
var fix_type = '原版B站HTML5弹幕播放器[谷歌卫士提供]';
break;
case 5:
var fix_type = 'ABP-HTML5播放器[BY颜太虾]';
break;
default:
var fix_type = '按需替换[替换非B站播放器,此时自动宽屏功能无效]';
}
var display = get_bfp_config('pagebox_display_mode') ? '悬浮' : '默认不悬浮';
var harm = get_bfp_config('pagebox_show_secret') ? '和谐娘打酱油中' : '默认[和谐娘和谐中]';
var compatible_360 = get_bfp_config('compatible_360') ? '已打开' : '已关闭';
var flash_player_auto_focus = get_bfp_config('flash_player_auto_focus') ? '已打开自动聚焦播放器' : '已关闭自动聚焦播放器';
var flash_player_auto_wide = get_bfp_config('flash_player_auto_wide') ? '已打开自动宽屏' : '已关闭自动宽屏';
var enable_window_player = get_bfp_config('enable_window_player') ? '已打开弹窗功能' : '已关闭弹窗功能';
var flash_player_showComments = get_bfp_config('flash_player_showComments') ? '已默认打开弹幕' : '已默认关闭弹幕';
var flash_player_auto_fullwindow = get_bfp_config('flash_player_auto_fullwindow') ? '已默认网页全屏' : '已关闭网页全屏';
var div = '
脚本';
$('.m-i.home').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) {
var notice = 1;
var other_lock = get_bfp_config('flash_player_auto_wide') || !get_bfp_config('flash_player_showComments') || get_bfp_config('flash_player_auto_fullwindow');
if (config_val == 'fix_type') {
if (other_lock) {
ac_alert('warn', '当【自动宽屏】或【自动网页全屏】或者【自动关闭弹幕】任意一个或以上功能打开时,替换模式只能为FLASH播放器!', 6000);
var notice = 0;
if(get_bfp_config('fix_type')==3){
set_bfp_config('fix_type', 2);
var j='现在替换为大型B站FLASH播放器!';
ac_alert('success', j, 6000);
}else{
set_bfp_config('fix_type', 3);
var j='现在替换为小型B站FLASH播放器!';
ac_alert('success', j, 6000);
}
$(selector).html(j);
$(selector).toggleClass("active");
} else {
if (get_bfp_config('fix_type') >= 5 || typeof(get_bfp_config('fix_type')) == 'undefined') { //超过4自动复位成按需替换
set_bfp_config('fix_type', 1);
} else {
set_bfp_config('fix_type', get_bfp_config('fix_type') + 1);
}
var s = '当前设置为-';
switch (get_bfp_config('fix_type')) {
case 2:
s += '强制默认B站FLASH播放器[与其他功能组合]';
break;
case 3:
s += '小型B站FLASH播放器[兼容火狐魔镜、与其他功能组合]';
break;
case 4:
s += '原版B站HTML5弹幕播放器[谷歌卫士提供]';
break;
case 5:
s += 'ABP-HTML5播放器';
break;
default:
s += '按需替换[替换非B站播放器,此时自动宽屏等其他组合功能均无效]';
}
}
} else {
get_bfp_config(config_val) ? set_bfp_config(config_val, 0) : set_bfp_config(config_val, 1);
if ((get_bfp_config('flash_player_auto_wide') || !get_bfp_config('flash_player_showComments') || get_bfp_config('flash_player_auto_fullwindow'))&&get_bfp_config('fix_type')!=3){
set_bfp_config('fix_type', 2);
}
var s = get_bfp_config(config_val) ? notice1 : notice2;
}
if (notice) {
$(selector).html(s);
$(selector).toggleClass("active");
var suf_str = ['←◡←', '⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄', '╮( ̄▽ ̄)╭', '▔▽▔ ', '^∇^', ' ̄ω ̄', '・-・', ' ゚Д゚', '>▽<', '`へ´', '>д<', '・∀・', '≧Д≦', 'T.T', ' ̄~ ̄', '_(:3」∠)_'];
$('#bili_set_status .bfpbtn').html('已更改,刷新生效' + suf_str[random(0, 15)] + '');
$('#bili_set_status .bfpbtn').toggleClass('notice');
ac_alert('normal', s, 3000);
}
}
};
//随机区间
function random(min, max) {
return Math.floor(min + Math.random() * (max - min));
}
//监听修复按钮
event_control.Listener('#bili_fix', 'enable', '已打开自动修复', '已关闭自动修复');
//监听评论分页功能显示切换
event_control.Listener('#pagebox-display', 'pagebox_display_mode', '已设置评论分页悬浮', '已设置评论分页默认[取消悬浮]');
//监听评论和谐娘功能切换
event_control.Listener('#pagebox-harm', 'pagebox_show_secret', '已设置和谐娘打酱油中', '已设置默认[和谐娘和谐中]');
//360火星
event_control.Listener('#init360', 'compatible_360', '360兼容已打开,请刷新', '360兼容已关闭,请刷新');
//自动定位播放器
event_control.Listener('#auto-locate', 'flash_player_auto_focus', '自动定位播放器已打开,请刷新', '自动定位播放器已关闭,请刷新');
//自动宽屏
event_control.Listener('#auto-wide', 'flash_player_auto_wide', '自动宽屏已打开', '自动宽屏已关闭');
//修复模式
event_control.Listener('#fix-type', 'fix_type', '', '');
//弹窗播放功能
event_control.Listener('#window_play', 'enable_window_player', '当前打开弹窗播放功能,请刷新', '当前关闭弹窗播放功能,请刷新');
//默认弹幕显示
event_control.Listener('#flash_player_showComments', 'flash_player_showComments', '当前已默认打开弹幕,请刷新', '当前已默认关闭弹幕,请刷新');
//自动网页全屏
event_control.Listener('#flash_player_auto_fullwindow', 'flash_player_auto_fullwindow', '当前已默认网页全屏,请刷新', '当前已关闭网页全屏,请刷新');
}
//弹窗播放器
var window_player = {
init : function (aid, cid) {
this.width = get_bfp_config('window_player_width');
this.height = get_bfp_config('window_player_height');
this.wide = '';
if (get_bfp_config('flash_player_auto_wide') == 1)
this.wide = '&as_wide=1';
},
fix_letv : function (aid, cid) {
window_player.init(aid, cid);
ac_alert('info', '修复乐视专用弹窗播放中....', 3000);
return '