bili_fix_player

修复B站播放器,黑科技,列表页、搜索页弹窗,破乐视限制,提供高清、低清晰源下载,弹幕下载

当前为 2014-09-27 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        bili_fix_player
// @namespace   bili
// @description 修复B站播放器,黑科技,列表页、搜索页弹窗,破乐视限制,提供高清、低清晰源下载,弹幕下载
// @include     /^.*\.bilibili\.(tv|com|cn)\/(video\/|search)?.*$/
// @include     /^.*bilibili\.kankanews\.com\/(video\/|search)?.*$/
// @version     3.7.3
// @require http://static.hdslb.com/js/jquery.min.js
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_addStyle
// @grant       unsafeWindow
// @author     绯色
// ==/UserScript==
/**
出现无法播放情况先关闭自动修复
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('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('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);
	//欢迎屏幕
	var version = '3.7.3';
	var local_version = GM_getValue('version');
	if (version != local_version) {
		alert('\n\
	0:感谢使用Bili Fix Player版本号3.7.3[20140927],阅读以下说明将有助于你更好地使用脚本ーー(^U^)ノーーYO\n\
	1:重构弹窗函数,修复弹窗函数多次运行导致分P列表重叠无法选择,博主采用了新的元素点击事件函数,从而使每个弹窗元素只有唯一一个点击事件\n\
	2:修复了在火狐下视频播放页替换播放器后的网页全屏(chrome下无解,等待大神帮助)\n\
	3:【重要声明】:重新处理监听ajax产生的新数据,使用了贴吧大花猫的监听函数,因此可以无须点击左下角的【重新渲染按钮】,但是在部分机器可能有卡顿,如果觉得卡顿可以自行删除脚本307行的代码即可\n\
	4:【重要声明】:增加按需修复播放器选项【以前是一律强制替换】,自动宽屏在弹窗和视频页大型播放器下并且强制修复选项开启有效,按需修复则部分有效[因为是替换后的视频才有效]\n\
	5:移除记录弹窗播放器垂直位置功能(因为部分chrome用户老是反应播放器不知所踪)\n\
	6:如果你发现BUG,可以随时提交给我。谢谢。http://bilili.ml/361.html\n\
	7:感谢您的支持,我们下一版本再见!23333');
		GM_setValue('version', version);
	}
	/**
-------------------------------用户界面GUI View-------------------------------------
*/
	//函数,插入可视化操作视图

	function insert_html(type) {
		var auto = GM_getValue('auto') ? '已打开' : '已关闭';
		var fix_type = GM_getValue('fix_type') ? '当前按需修复[自动宽屏部分视频有效]' : '当前强制修复[即使是B站播放器,自动宽屏有效]';
		var player_size = GM_getValue('player_size') ? '大型' : '小型';
		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 container=GM_getValue('player_container')?'iframe[无滚动条bug]':'embed[无拖放bug]';
		var div = '<div ><a style="color:red" id="bili-fix-player-installed" class="i-link">脚本</a>\
						<ul class="i_num i_num_a blborder" id="bili_fix_script">\
						<li><a>360浏览器兼容[非360勿开]:<bl id="init360" class="bfpbtn">' + init360 + '</bl></a><em></em></li>\
						<li><a>自动修复(修改后请刷新页面):<bl id="bili_fix" class="bfpbtn">' + auto + '</bl></a><em></em></li>\
						<li><a>修复模式(修改后请刷新页面):<bl id="fix-type" class="bfpbtn">' + fix_type + '</bl></a><em></em></li>\
						<li><a target="_blank" href="http://bilili.ml/361.html">若无限小电视则尝试关闭修复-BUG反馈</a><em></em></li>\
						<li><a>本页视频源:<bl style="color:#F489AD">' + type + '</bl></a><em></em></li>\
						<li><a class="font">高清视频下载</a><div class="m_num" id="av_source">\
						</div><em></em></li>\
						<li><a class="font" target="_blank" id="aid_down_av">单文件[模糊]视频下载</a><em></em></li>\
						<li><a id="down_cid_xml" target="_blank">弹幕下载</a><em></em></li>\
						<li><a class="font">播放器大小(小型在火狐弹窗无BUG):<bl id="player_size" class="bfpbtn">' + player_size + '</bl></a><em></em></li>\
						<li><a>评论区分页导航:<bl id="pagebox-display" class="bfpbtn">' + display + '</bl></a><em></em></li>\
						<li><a>评论区和谐娘:<bl id="pagebox-harm" class="bfpbtn">' + harm + '</bl></a><em></em></li>\
						<li><a>视频页自动定位到播放器位置:<bl id="auto-locate" class="bfpbtn">' + auto_locate + '</bl></a><em></em></li>\
						<li><a>播放器自动宽屏[弹窗、视频页的播放器(大型),需配合选项修复模式<强制修复>]:<bl id="auto-wide" class="bfpbtn">' + auto_wide + '</bl></a><em></em></li>\
						<li><a id="bili_set_status">就绪中→_→</a><em></em></li>\
						</ul>\
						<span class="addnew_5">+10086</span></div>';
		$('li.m-i:nth-child(1) > a:nth-child(1)').prop('outerHTML', div);
		//$('li.m-i:nth-child(1) > a:nth-child(1)').html(div);
		//监听修复按钮
		var bfpbtn = document.querySelector("#bili_fix");
		bfpbtn.addEventListener("click", set_auto, false);
		//监听播放器大小按钮
		var bfpbtn = document.querySelector("#player_size");
		bfpbtn.addEventListener("click", set_player, false);
		//监听评论分页功能显示切换
		var bfpbtn = document.querySelector("#pagebox-display");
		bfpbtn.addEventListener("click", change_pagebox_display, false);
		//监听评论和谐娘功能切换
		var bfpbtn = document.querySelector("#pagebox-harm");
		bfpbtn.addEventListener("click", change_pagebox_harm, false);
		//360火星
		var bfpbtn = document.querySelector("#init360");
		bfpbtn.addEventListener("click", init_the_special, false);
		//自动定位播放器
		var bfpbtn = document.querySelector("#auto-locate");
		bfpbtn.addEventListener("click", action_auto_locate, false);
		//自动宽屏
		var bfpbtn = document.querySelector("#auto-wide");
		bfpbtn.addEventListener("click", action_auto_wide, false);
		//修复模式
		var bfpbtn = document.querySelector("#fix-type");
		bfpbtn.addEventListener("click", action_fix_type, false);
	}

	//函数,插入下载按钮

	function insert_download_button(url, count) {
		$('#av_source').append('<a href="' + url + '" target="blank">分段【' + count + '】</a>');
	}

	//设置参数
	//修复按钮事件

	function set_auto() {
		GM_getValue('auto') ? GM_setValue('auto', 0) : GM_setValue('auto', 1);
		var s = GM_getValue('auto') ? '已打开' : '已关闭';
		document.getElementById('bili_fix').innerHTML = s;
		$("#bili_fix").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	//播放器大小按钮事件

	function set_player() {
		GM_getValue('player_size') ? GM_setValue('player_size', 0) : GM_setValue('player_size', 1);
		var s = GM_getValue('player_size') ? '大型' : '小型';
		document.getElementById('player_size').innerHTML = s;
		$("#player_size").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn active font">已更改,刷新生效_(:3」∠)_</bl>');
	}

	//函数 评论分页功能显示切换(悬浮、原来位置)

	function change_pagebox_display() {
		GM_getValue('pagebox_display') ? GM_setValue('pagebox_display', 0) : GM_setValue('pagebox_display', 1);
		var s = GM_getValue('pagebox_display') ? '悬浮' : '默认';
		document.getElementById('pagebox-display').innerHTML = s;
		$("#pagebox-display").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}

	//函数 评论和谐娘功能切换

	function change_pagebox_harm() {
		GM_getValue('pagebox_harm') ? GM_setValue('pagebox_harm', 0) : GM_setValue('pagebox_harm', 1);
		var s = GM_getValue('pagebox_harm') ? '和谐娘打酱油中' : '默认[和谐娘和谐中]';
		document.getElementById('pagebox-harm').innerHTML = s;
		$("#pagebox-harm").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	//函数 360兼容

	function init_the_special() {
		GM_getValue('init360') ? GM_setValue('init360', 0) : GM_setValue('init360', 1);
		var s = GM_getValue('init360') ? '已打开,请刷新' : '已关闭,请刷新';
		document.getElementById('init360').innerHTML = s;
		$("#init360").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	//函数 自动定位播放器

	function action_auto_locate() {
		GM_getValue('auto_locate') ? GM_setValue('auto_locate', 0) : GM_setValue('auto_locate', 1);
		var s = GM_getValue('auto_locate') ? '已打开,请刷新' : '已关闭,请刷新';
		document.getElementById('auto-locate').innerHTML = s;
		$("#auto-locate").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	//函数 自动宽屏

	function action_auto_wide() {
		GM_getValue('auto_wide') ? GM_setValue('auto_wide', 0) : GM_setValue('auto_wide', 1);
		var s = GM_getValue('auto_wide') ? '已打开,请刷新' : '已关闭,请刷新';
		document.getElementById('auto-wide').innerHTML = s;
		$("#auto-wide").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	//函数 修复模式

	function action_fix_type() {
		GM_getValue('fix_type') ? GM_setValue('fix_type', 0) : GM_setValue('fix_type', 1);
		var s = GM_getValue('fix_type') ? '当前按需修复[自动宽屏部分视频有效],请刷新' : '当前强制修复[即使是B站播放器,自动宽屏有效],请刷新';
		document.getElementById('fix-type').innerHTML = s;
		$("#fix-type").toggleClass("active");
		$('#bili_set_status').html('<bl class="bfpbtn notice font">已更改,刷新生效_(:3」∠)_</bl>');
	}
	/**
-------------------------------函数 Model-------------------------------------
*/
	//函数,替换播放器

	function Replace_player(aid, cid) {
		if (GM_getValue('auto') == '1') {

			if (GM_getValue('player_size') == '1') {
				//document.getElementById('bofqi').innerHTML = '<embed id="bofqi_embed" class="player" allowfullscreeninteractive="true" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" allowscriptaccess="always" rel="noreferrer" flashvars="cid=' + cid + '&amp;aid=' + aid + '" src="https://static-s.bilibili.com/play.swf" type="application/x-shockwave-flash" allowfullscreen="true" quality="high" wmode="window">';
				var wide = '';
				if (GM_getValue('auto_wide') == 1) var wide = '&as_wide=1';
				document.getElementById('bofqi').innerHTML = '<iframe class="player" src="https://secure.bilibili.com/secure,cid=' + cid + '&amp;aid=' + aid + wide + '" scrolling="no" border="0" framespacing="0" onload="window.securePlayerFrameLoaded=true" frameborder="no" height="482" width="950"></iframe>';
				fix_sp_player_fullwin();
			} else {
				document.getElementById('bofqi').innerHTML = '<embed id="bofqi_embed" class="player" allowfullscreeninteractive="true" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" allowscriptaccess="always" rel="noreferrer" flashvars="cid=' + cid + '&amp;aid=' + aid + '" src="https://static-s.bilibili.com/play.swf" type="application/x-shockwave-flash" allowfullscreen="true" quality="high" wmode="window" style="width:100%;height:100%">';
				$('#bofqi').css({
					width: "960px",
					height: "520px"
				});
			}
		}
	}
	//api获取cid

	function api_get_cid(aid, page) {
		var url = 'http://api.bilibili.com/view?type=json&appkey=0a99fa1d87fdd38c&batch=1&id=' + aid;
		GM_xmlhttpRequest({
			method: 'GET',
			url: url,
			synchronous: false,
			onload: function(responseDetails) {
				if (responseDetails.status == 200) {
					var Content = eval('(' + responseDetails.responseText + ')');
					var list = Content.list;
					var p = page - 1;
					if (list != undefined) {
						var lp = (list[p] == undefined) ? list[0] : list[p]; //针对某些aid只有一个cid但是有分P的情况
						//console.log(lp);
						var cid = lp.cid;
						var type = lp.type;
						insert_html(type); //UI
						//修复360浏览器flash霸占脚本设置区域
						if (GM_getValue('init360') == 1) {
							$("#bili_fix_script,#bili-fix-player-installed").mouseover(function() {
								$("#bofqi,#bofqi_embed").addClass("hide");
							});
							$("#bili_fix_script,#bili-fix-player-installed").mouseout(function() {
								$("#bofqi,#bofqi_embed").removeClass("hide");
							});
						}
						var cid_xml_url = 'http://comment.bilibili.com/' + cid + '.xml';
						$('#down_cid_xml').attr('href', cid_xml_url); //弹幕下载
						if (GM_getValue('fix_type') == 1) {
							var need_replace_player = $('#bofqi').html().match(/static\.hdslb\.com\/play\.swf|secure\.bilibili\.com\/secure,cid=/);
							if (!need_replace_player) {
								Replace_player(aid, cid); //按需替换播放器 
								console.log('正在按需替换播放器');
							} else {
								console.log('视频页面使用B站播放器,无需替换');
							}
						} else {
							console.log('正在强制替换播放器');
							Replace_player(aid, cid); //强制替换播放器 
						}

						if (GM_getValue('auto_locate') == 1) $('html,body').animate({
							scrollTop: $("#bofqi_embed,#bofqi").offset().top - 30
						}, 500);
						cid_get_videodown_hd(cid); //获取高清下载链接
						aid_down_av(aid, page); //av画质下载(单文件)

					} else {
						window_player_init(); //执行弹窗函数
						addNodeInsertedListener('.vidbox.v-list li a,.bgm-calendar.bgmbox li a,.rlist li a,.rm-list li a,.r-list li a,.top-list li a,.vidbox.zt  .t', function() {
							window_player_init(); //ajax重新渲染,有可能导致浏览器卡顿,若卡顿请删除此行(仅此一行)
						});
						load_manual_window(); //加载手动渲染弹窗
					}
				}
			}
		});
	}

	//加载手动渲染弹窗

	function load_manual_window() {
		var html = '<div id="load_manual_window"><div onclick="$(\'#load_manual_window\').remove()" style="color:#F489AD">X</div><div id="load_manual_window_btn" class="manual_window_btn" title="当部分列表无弹窗按钮的时候,请点我">重新渲染弹窗</div></div>';
		$('div.header').prepend(html);
		$('#load_manual_window_btn').click(function() {
			window_player_init();
		});
	}

	function fix_sp_player_fullwin() {
		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);
		setTimeout(function() {
			location.href = 'javascript:void(' + function() {
				player_fullwin = unsafeWindow.player_fullwin
			} + '());';
		}, 0);
	}
	//播放器支持页面全屏 来自田生

	function fix_player_fullwin() {
		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);
		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);
	};

	//在新番页面,通过弹窗,获取aid,cid然后进行播放

	function aid_build_player(aid) {
		//aid=971415;这个aid奇葩出错
		var url = 'http://api.bilibili.com/view?type=json&appkey=0a99fa1d87fdd38c&batch=1&id=' + aid;
		GM_xmlhttpRequest({
			method: 'GET',
			url: url,
			synchronous: false,
			onload: function(responseDetails) {
				if (responseDetails.status == 200) {
					var Content = eval('(' + responseDetails.responseText + ')');
					//console.log(Content);
					var list = Content.list;
					if (list != undefined) {
						//默认播放第一个分P-------------------
						var p = 0;
						var lp = (list[p] == undefined) ? list[0] : list[p];
						//console.log(lp);
						var cid = lp.cid;
						$('#player_content').html(window_player(aid, cid));
						//分P列表和播放器------------------------------
						for (var i in list) {
							//console.log(list[i]);
							var cid = list[i].cid;
							var p = parseInt(i) + 1;
							$('#window_play_list').append('<li class="single_play_list" data-field="aid=' + aid + '&cid=' + cid + '"><a  href="javascript:void(0);" style="color:#00A6D8;" >' + p + 'P</a></li>');
						}
						if (!unsafeWindow.player_fullwin) setTimeout(fix_player_fullwin, 0);
						//弹窗的分P播放
						$('.single_play_list').click(
							function() {
								$('#window_play_info').html('正在播放第<span style="color:#DB5140">' + $(this).find('a').html() + '</span>');
								var info = $(this).attr('data-field');
								var pattern = /aid=(\d+)&cid=(\d+)/ig;
								var val = pattern.exec(info);
								var aid = val === null ? '' : val[1];
								var cid = val === null ? '' : val[2];
								// console.log(aid,cid);
								setTimeout(function() {
									$('#player_content').html(window_player(aid, cid));
								}, 0);
							});
					} else {
						alert('弹窗解析错误,请关闭弹窗重试,如果再次出现,请直接打开播放页播放');
					}
				}
			}
		});
	}
	//弹窗播放器

	function window_player(aid, cid) {
		var width = GM_getValue('player_width');
		var height = GM_getValue('player_height');
		var wide = '';
		if (GM_getValue('auto_wide') == 1) var wide = '&as_wide=1';
		return '<iframe  id="window-player" class="player" src="https://secure.bilibili.com/secure,cid=' + cid + '&amp;aid=' + aid + wide + '" scrolling="no" border="0" framespacing="0" onload="window.securePlayerFrameLoaded=true" frameborder="no" height="' + height + '" width="' + width + '"></iframe>'; //
	}
	//cid获取高清视频链接

	function cid_get_videodown_hd(cid) {
		var url = 'http://interface.bilibili.com/playurl?appkey=0a99fa1d87fdd38c&platform=android&quality=2&cid=' + cid;
		GM_xmlhttpRequest({
			method: 'GET',
			url: url,
			synchronous: false,
			onload: function(responseDetails) {
				if (responseDetails.status == 200) {
					var pattern = /<\/(?:(?:chunk)?size|length)>[\s\n]*?<url><\!\[CDATA\[(.*?)\]\]><\/url>/ig;
					var c = 1;
					while (content = pattern.exec(responseDetails.responseText)) {
						var url = content ? (content[1]) : 'http://interface.bilibili.cn/playurl?appkey=0a99fa1d87fdd38c&platform=android&quality=2&cid=' + cid;
						insert_download_button(url, c);
						c++;
					}
				}
			}
		});
	}
	//低画质视频下载(单文件)

	function aid_down_av(aid, page) {
		var url = 'http://www.bilibili.com/m/html5?aid=' + aid + '&page=' + page;
		GM_xmlhttpRequest({
			method: 'GET',
			url: url,
			synchronous: false,
			onload: function(responseDetails) {
				if (responseDetails.status == 200) {
					var Content = eval('(' + responseDetails.responseText + ')');
					var downlink = Content.src;
					$('#aid_down_av').attr('href', downlink);
				}
			}
		});
	}

	/**
-------------------------------控制 Control-------------------------------------
*/

	function window_player_init() {
		//弹窗------------------------------
		//新番列表弹窗UI
		$('.vd_list .title').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href');
					var pattern = /\/video\/av(\d+)\//ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					if (aid != '') {
						var title = $(this).html();
						$(this).prepend('<a class="single_player singleplaybtn xflist" href="javascript:void(0);" style="color:white;" data-field="' + aid + '">弹▶</a>');
						$(this).find('a').click(function() {
							single_player(aid, title)
						});
					}
				}
			});

		//搜索列表专题List
		$('.s_bgmlist li a').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href');
					var pattern = /\/video\/av(\d+)/ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					$('.s_v_l li .s_bgmlist ul li a').css('display', 'inline'); //防止A标签换行导致无法点击
					if (aid != '') {
						var title = '第<' + $(this).html() + '>P';
						$(this).parent('li').prepend('<bl class="single_player singleplaybtn searchlistzt" style="color:white;" data-field="' + aid + '">弹▶</bl>&nbsp;&nbsp;');
						$(this).parent('li').find('bl').click(function() {
							single_player(aid, title)
						});
					}
				}
			});

		//搜索列表弹窗UI
		$('.result li .r a').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href');
					var pattern = /\/video\/av(\d+)\//ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					if (aid != '') {
						var title = $(this).find('.t').html();
						$(this).find('.t').prepend('<a class="single_player singleplaybtn searchlist" href="javascript:void(0);" style="color:white;" data-field="' + aid + '">弹▶</a>');
						$(this).find('.t a').click(function() {
							single_player(aid, title)
						});
					}
				}
			});
		//带缩略图弹窗UI、和侧栏新投稿弹窗UI、首页的推荐栏弹窗、侧栏列表弹窗UI
		$('.vidbox.v-list li a,.bgm-calendar.bgmbox li a,.rlist li a,.rm-list li a,.r-list li a,.top-list li a').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href');
					var pattern = /\/video\/av(\d+)\//ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					if (aid != '') {
						var title = $(this).find('.t').html();
						$(this).find('.t').prepend('<a class="single_player singleplaybtn suoluotu" href="javascript:void(0);" style="color:white;" data-field="' + aid + '">弹▶</a>');
						$(this).find('a').click(function() {
							single_player(aid, title)
						});
					}
				}
			});
		//专题
		$('.vidbox.zt  .t').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href') == undefined ? $(this).parent('a').attr('href') : $(this).attr('href');
					var pattern = /\/video\/av(\d+)\//ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					//$('.vidbox.zt li a').css('display','inline');//防止A标签换行导致无法点击
					if (aid != '') {
						var title = $(this).html();
						$(this).prepend('<a class="single_player singleplaybtn zttc" href="javascript:void(0);" style="color:white;" data-field="' + aid + '">弹▶</a>');
						$(this).find('a').click(function() {
							single_player(aid, title)
						});
					}
				}
			});
		//旧版首页分区列表
		$('.video  li a,.video-wrapper li a').each(
			function() {
				if ($(this).attr('has_window_btn') == undefined) {
					$(this).attr('has_window_btn', 'true');
					var href = $(this).attr('href');
					var pattern = /\/video\/av(\d+)\//ig;
					var content = pattern.exec(href);
					var aid = content ? (content[1]) : '';
					if (aid != '') {
						var title = $(this).find('.t').html();
						$(this).find('.t').prepend('<a class="single_player singleplaybtn oldlifenqu" href="javascript:void(0);" style="color:white;" data-field="' + aid + '">弹▶</a>');
						$(this).find('.t a').click(function() {
							single_player(aid, title)
						});
					}
				}
			});
		//弹窗初始化
	}
	//弹窗默认的第一P,建立弹窗播放器并建立分P列表===click事件应该在each事件之后执行

	function single_player(aid, title) {
		$('.player-list').remove(); //移除播放列表
		var a = '<p id="window_play_title">脚本(`・ω・´)正在加载中</p><div id="player_content">脚本(`・ω・´)播放器正在努力加载中....</div>';
		var list_html = '<div class="player-list"><div class="sort"><i>分P列表</i></div><ul id="window_play_list"></ul></div>';
		var title_html = '<a class="mark_my_video singleplaybtn" href="javascript:void(0);" style="color:white;background:none repeat scroll 0% 0% rgb(0, 182, 228) !important;" data-field="' + aid + '" title="收藏该视频">★Mrak</a>&nbsp;&nbsp;&nbsp;<a class="singleplaybtn" href="http://www.bilibili.com/video/av' + aid + '/" style="color:white;background:none repeat scroll 0% 0% #1E344A!important;" target="_blank" title="前往播放页面">Go</a>&nbsp;&nbsp;&nbsp;<span style="color:#8C8983">' + title.replace('弹▶', '') + '</span>&nbsp;&nbsp;&nbsp;▶<span id="window_play_info"></span>';
		setTimeout(function() {
			creat(title_html, a); //创建可视化窗口
			$('.dialogcontainter').after(list_html);
			$('#window_play_info').html('正在播放第<span style="color:#DB5140">1P</span>');
			$('#window_play_title').html('<p><a id="div_positon_button" class="button-small button-flat-action" style="background: none repeat scroll 0% 0% #E54C7E;">固定播放器</a><a id="list_control_button" class="button-small button-flat-action" style="background: none repeat scroll 0% 0% #0CB3EE;">收缩分P列表[在左边]</a>[拖动标题可移动播放器,拖动右下角可改变播放器大小,设置后自动保存宽高和位置]</p>');
			//切换分P按钮
			$('#list_control_button').click(function() {
				var flag = $(".player-list").css("display");
				if (flag == "none") {
					$(".player-list").show();
					$('#list_control_button').html('收缩分P列表');
					$('#list_control_button').css('background', 'none repeat scroll 0% 0% #0CB3EE');
				} else {
					$(".player-list").hide();
					$('#list_control_button').html('显示分P列表');
					$('#list_control_button').css('background', 'none repeat scroll 0% 0% #FF2C14');
				}
			});
			//固定播放器按钮
			$('#div_positon_button').click(function() {
				var p = $('.dialogcontainter').css('position');
				if (p == "fixed") {
					$('.dialogcontainter').css('position', 'absolute');
					$('.player-list').css('position', 'absolute');
					$('#div_positon_button').html('浮动播放器');
					$('#div_positon_button').css('background', 'none repeat scroll 0% 0% #FECD3E');
				} else {
					$('.dialogcontainter').css('position', 'fixed');
					$('.player-list').css('position', 'fixed');
					$('#div_positon_button').html('固定播放器');
					$('#div_positon_button').css('background', 'none repeat scroll 0% 0% #E54C7E');
				}
			});
			//弹窗播放器收藏功能
			$('.mark_my_video').click(function() {
				var aid = $(this).attr('data-field');
				$.ajax({
					type: 'POST',
					url: 'http://www.bilibili.com/m/stow',
					data: 'dopost=save&aid=' + aid + '&stow_target=stow&ajax=1',
					success: function(r) {
						//$('#edit_status_bar').html(r);
						alert('收藏成功');
					},
					error: function(r) {
						alert('出错,请重试!');
					},
					dataType: 'text'
				});
			});
		}, 0);
		setTimeout(function() {
			aid_build_player(aid);
		}, 0);
	}

	//END弹窗------------------------------

	//替换播放器----------------------------
	//取出aid和分P
	var url = document.location.href;
	var aid_reg = /\/av(\d+)\/(?:index_(\d+)\.html)?/ig;
	var aid_array = aid_reg.exec(url);

	var aid = aid_array === null ? '' : aid_array[1]; //aid
	var page = aid_array === null ? '1' : typeof(aid_array[2]) == 'undefined' ? '1' : aid_array[2]; //分p

	//播放器的html
	var content; //本脚本使用了很多content变量,其中cid_get_videodown函数的while循环content变量全局,如果此处未定义content,火狐会报权限问题
	api_get_cid(aid, page); //按照aid和分p获取cid并且替换播放器

	//当设置悬浮评论分页栏时,增加css
	if (GM_getValue('pagebox_display') == 1) {
		if (url.indexOf('video/av') > -1) {
			var css = '.pagelistbox.top{z-index:999;position:fixed;bottom:10px;  left:0px;background-image:url("http://nightlyfantasy.github.io/Bili_Fix_Player/bg.png");box-shadow: 3px 3px 13px rgba(34, 25, 25, 0.4);}';
			GM_addStyle(css);
		}
	}

	//当设置评论移除和谐娘时,增加css
	if (GM_getValue('pagebox_harm') == 1) {
		if (url.indexOf('video/av') > -1) {
			var css = '.quote{display:block!important;}span.content a,.content>a[href="javascript:;"]{display:none!important;}';
			GM_addStyle(css);
		}
	}

	//css插入
	var css = '#load_manual_window,.dialogcontainter{text-align:center;}#load_manual_window{z-index:300;width:30px;cursor: pointer;left:40px;bottom:50px;position:fixed;padding: 0px 0px 10px;transition: all 0.1s linear 0s;background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.5);color: #FFF;border: medium none;}#load_manual_window:hover{background-color: rgba(0, 0, 0, 0.7);}.singleplaybtn{box-shadow: 0px 1px 1px rgba(34, 25, 25, 0.4);background:none repeat scroll 0% 0% #F489AD!important;}.bfpbtn{font-size:12px;height:25.6px;line-height:25.6px;padding:0px 2px;transition-property:#000,color;transition-duration:0.3s;box-shadow:none;color:#FFF;text-shadow:none;border:medium none;background:none repeat scroll 0% 0% #00A1CB!important;}.bfpbtn.active{background:none repeat scroll 0% 0%  #F489AD!important;}.bfpbtn.notice{background-color:#A300C0!important;}.font{font-size:11px!important;}#window_play_list li{float:left;position:relative;width:5em;border:1px solid #B0C4DE;font:80% Verdana,Geneva,Arial,Helvetica,sans-serif;}.ui.corner.label{height:0px;border-width:0px 3em 3em 0px;border-style:solid;border-top:0px solid transparent;border-bottom:3em solid transparent;border-left:0px solid transparent;border-right-color:rgb(217,92,92)!important;transition:border-color 0.2s ease 0s;position:absolute;content:"";right:0px;top:0px;z-index:-1;width:0px;}.ui.corner.label i{display:inline-block;margin:3px 0.25em 0px 17px;width:1.23em;height:1em;font-weight:800!important;}.dialogcontainter{z-index:99999!important;height:400px;width:400px;border:1px solid #14495f;position:fixed;font-size:13px;}.dialogtitle{height:26px;width:auto;background-color:#C6C6C6;}.dialogtitleinfo{float:left;height:20px;margin-top:2px;margin-left:10px;line-height:20px;vertical-align:middle;color:#FFFFFF;font-weight:bold;}.dialogtitleico{float:right;height:20px;width:21px;margin-top:2px;margin-right:5px;text-align:center;line-height:20px;vertical-align:middle;background-image:url("http://nightlyfantasy.github.io/Bili_Fix_Player/bg.gif");background-position:-21px 0px}.dialogbody{padding:10px;width:auto;background-color:#FFFFFF;background-image:url("http://nightlyfantasy.github.io/Bili_Fix_Player/bg.png");}.dialogbottom{bottom:1px;right:1px;cursor:nw-resize;position:absolute;background-image:url("http://nightlyfantasy.github.io/Bili_Fix_Player/bg.gif");background-position:-42px -10px;width:10px;height:10px;font-size:0;}.button-small{font-size:12px;height:25.6px;line-height:25.6px;padding:0px 5px;}.button-flat-action{transition-duration:0.3s;box-shadow:none;background:none repeat scroll 0% 0% #7DB500;color:#FFF!important;text-shadow:none;border:medium none;border-radius:3px;}.player-list{box-shadow: 3px 3px 13px rgba(34, 25, 25, 0.4);position:fixed;z-index:1000;left:10px;top:50px;width:400px!important;background-image:url("http://nightlyfantasy.github.io/Bili_Fix_Player/bg.png");min-height:200px!Important;}#player_content{position:absolute;top:60px;left:10px;right:10px;bottom:10px;}#window-player{bottom:0;height:100%;left:0;right:0;top:0;width:100%;}a.single_player{display:none;}a:hover .single_player{display:inline;}#bofqi_embed.hide,#bofqi.hide,#player_content.hide{margin-left:3000px!important;transition:0.5s;-moz-transition:0.5s;-webkit-transition:0.5s;-o-transition:0.5s;}#bofqi_embed,#bofqi,#player_content{transition:0.5s;-moz-transition:0.5s;-webkit-transition:0.5s;-o-transition:0.5s;}';
	GM_addStyle(css);

	//高大上的拖动DIV和改变DIV大小功能,来自互联网脚本之家www.jb51.net
	var z = 1,
		i = 1,
		left = 10;
	var isIE = (document.all) ? true : false;
	var Extend = function(destination, source) {
		for (var property in source) {
			destination[property] = source[property];
		}
	}

	var Bind = function(object, fun, args) {
		return function() {
			return fun.apply(object, args || []);
		}
	}

	var BindAsEventListener = function(object, fun) {
		var args = Array.prototype.slice.call(arguments).slice(2);
		return function(event) {
			return fun.apply(object, [event || window.event].concat(args));
		}
	}

	var CurrentStyle = function(element) {
		return element.currentStyle || document.defaultView.getComputedStyle(element, null);
	}

		function create(elm, parent, fn) {
			var element = document.createElement(elm);
			fn && fn(element);
			parent && parent.appendChild(element);
			return element
		};

	function addListener(element, e, fn) {
		element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn)
	};

	function removeListener(element, e, fn) {
		element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
	};

	var Class = function(properties) {
		var _class = function() {
			return (arguments[0] !== null && this.initialize && typeof(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;
		};
		_class.prototype = properties;
		return _class;
	};

	var Dialog = new Class({
		options: {
			Width: 400,
			Height: 400,
			Left: 100,
			Top: 10,
			Titleheight: 26,
			Minwidth: 200,
			Minheight: 200,
			CancelIco: true,
			ResizeIco: true,
			Info: "标题",
			Content: "无内容",
			Zindex: 2
		},
		initialize: function(options) {
			this._dragobj = null;
			this._resize = null;
			this._cancel = null;
			this._body = null;
			this._x = 0;
			this._y = 0;
			this._fM = BindAsEventListener(this, this.Move);
			this._fS = Bind(this, this.Stop);
			this._isdrag = null;
			this._Css = null;
			//////////////////////////////////////////////////////////////////////////////// 
			this.Width = this.options.Width;
			this.Height = this.options.Height;
			this.Left = this.options.Left;
			this.Top = this.options.Top;
			this.CancelIco = this.options.CancelIco;
			this.Info = this.options.Info;
			this.Content = this.options.Content;
			this.Minwidth = this.options.Minwidth;
			this.Minheight = this.options.Minheight;
			this.Titleheight = this.options.Titleheight;
			this.Zindex = this.options.Zindex;
			Extend(this, options);
			Dialog.Zindex = this.Zindex
			//////////////////////////////////////////////////////////////////////////////// 构造dialog 
			var obj = ['dialogcontainter', 'dialogtitle', 'dialogtitleinfo', 'dialogtitleico', 'dialogbody', 'dialogbottom'];
			for (var i = 0; i < obj.length; i++) {
				obj[i] = create('div', null, function(elm) {
					elm.className = obj[i];
				});
			}
			obj[2].innerHTML = this.Info;
			obj[4].innerHTML = this.Content;
			obj[1].appendChild(obj[2]);
			obj[1].appendChild(obj[3]);
			obj[0].appendChild(obj[1]);
			obj[0].appendChild(obj[4]);
			obj[0].appendChild(obj[5]);
			document.body.appendChild(obj[0]);
			this._dragobj = obj[0];
			this._resize = obj[5];
			this._cancel = obj[3];
			this._body = obj[4];
			////////////////////////////////////////////////////////////////////////////////o,x1,x2 
			////设置Dialog的长 宽 ,left ,top 
			with(this._dragobj.style) {
				height = this.Height + "px";
				top = this.Top + "px";
				width = this.Width + "px";
				left = this.Left + "px";
				zIndex = this.Zindex;
			}
			this._body.style.height = this.Height - this.Titleheight - parseInt(CurrentStyle(this._body).paddingLeft) * 2 + 'px';
			/////////////////////////////////////////////////////////////////////////////// 添加事件 
			addListener(this._dragobj, 'mousedown', BindAsEventListener(this, this.Start, true));
			addListener(this._cancel, 'mouseover', Bind(this, this.Changebg, [this._cancel, '0px 0px', '-21px 0px']));
			addListener(this._cancel, 'mouseout', Bind(this, this.Changebg, [this._cancel, '0px 0px', '-21px 0px']));
			addListener(this._cancel, 'mousedown', BindAsEventListener(this, this.Disappear));
			addListener(this._body, 'mousedown', BindAsEventListener(this, this.Cancelbubble));
			addListener(this._resize, 'mousedown', BindAsEventListener(this, this.Start, false));
		},
		Disappear: function(e) {
			this.Cancelbubble(e);
			document.body.removeChild(this._dragobj);
			$('.player-list').remove();
		},
		Cancelbubble: function(e) {
			this._dragobj.style.zIndex = ++Dialog.Zindex;
			document.all ? (e.cancelBubble = true) : (e.stopPropagation())
		},
		Changebg: function(o, x1, x2) {
			o.style.backgroundPosition = (o.style.backgroundPosition == x1) ? x2 : x1;
		},
		Start: function(e, isdrag) {
			if (!isdrag) {
				this.Cancelbubble(e);
			}
			this._Css = isdrag ? {
				x: "left",
				y: "top"
			} : {
				x: "width",
				y: "height"
			}
			this._dragobj.style.zIndex = ++Dialog.Zindex;
			this._isdrag = isdrag;
			this._x = isdrag ? (e.clientX - this._dragobj.offsetLeft || 0) : (this._dragobj.offsetLeft || 0);
			this._y = isdrag ? (e.clientY - this._dragobj.offsetTop || 0) : (this._dragobj.offsetTop || 0);
			if (isIE) {
				addListener(this._dragobj, "losecapture", this._fS);
				this._dragobj.setCapture();
			} else {
				e.preventDefault();
				addListener(window, "blur", this._fS);
			}
			addListener(document, 'mousemove', this._fM);
			addListener(document, 'mouseup', this._fS);
			if (GM_getValue('init360') == 1) $("#player_content").addClass("hide");
		},
		Move: function(e) {
			window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
			var i_x = e.clientX - this._x,
				i_y = e.clientY - this._y;
			this._dragobj.style[this._Css.x] = (this._isdrag ? Math.max(i_x, 0) : Math.max(i_x, this.Minwidth)) + 'px';
			this._dragobj.style[this._Css.y] = (this._isdrag ? Math.max(i_y, 0) : Math.max(i_y, this.Minheight)) + 'px'
			if (!this._isdrag)
				this._body.style.height = Math.max(i_y - this.Titleheight, this.Minheight - this.Titleheight) - 2 * parseInt(CurrentStyle(this._body).paddingLeft) + 'px';
		},
		Stop: function() {
			$("#player_content").removeClass("hide");
			removeListener(document, 'mousemove', this._fM);
			removeListener(document, 'mouseup', this._fS);
			//实时改变播放器大小,保存播放器大小
			//$('#window-player').width($('.dialogcontainter').width() - 20);
			$('#window-player').attr('width', $('.dialogcontainter').width() - 20); //完美兼容弹窗网页全屏
			GM_setValue('player_width', ($('.dialogcontainter').width() - 20));
			//$('#window-player').height($('.dialogcontainter').height() - 70);
			$('#window-player').attr('height', $('.dialogcontainter').height() - 70); //完美兼容弹窗网页全屏
			GM_setValue('player_height', ($('.dialogcontainter').height() - 70));
			//保存位置
			//var top_offset=parseInt($('.dialogcontainter').css('top'),10)>300?300:parseInt($('.dialogcontainter').css('top'),10);
			//GM_setValue('div_top',top_offset);//设置垂直位置的时候,如果是长页而且是浮动播放器时候记录位置,会导致播放器不知所踪
			GM_setValue('div_left', ($('.dialogcontainter').offset().left));
			if (isIE) {
				removeListener(this._dragobj, "losecapture", this._fS);
				this._dragobj.releaseCapture();
			} else {
				removeListener(window, "blur", this._fS);
			};
		}
	})

		function creat(title, content) {
			$('.dialogcontainter').remove();
			new Dialog({
				Info: title = title,
				Left: GM_getValue('div_left'),
				Top: 50, //GM_getValue('div_top')
				Width: (GM_getValue('player_width') + 20),
				Height: (GM_getValue('player_height') + 70),
				Content: content,
				Zindex: (2000)
			});
			i++;
			left += 10;
		}

		//函数 元素精确定位

		function addNodeInsertedListener(elCssPath, handler, executeOnce, noStyle) {
			var animName = "anilanim",
				prefixList = ["-o-", "-ms-", "-khtml-", "-moz-", "-webkit-", ""],
				eventTypeList = ["animationstart", "webkitAnimationStart", "MSAnimationStart", "oAnimationStart"],
				forEach = function(array, func) {
					for (var i = 0, l = array.length; i < l; i++) {
						func(array[i]);
					}
				};
			if (!noStyle) {
				var css = elCssPath + "{",
					css2 = "";
				forEach(prefixList, function(prefix) {
					css += prefix + "animation-duration:.001s;" + prefix + "animation-name:" + animName + ";";
					css2 += "@" + prefix + "keyframes " + animName + "{from{opacity:.9;}to{opacity:1;}}";
				});
				css += "}" + css2;
				GM_addStyle(css);
			}
			if (handler) {
				var bindedFunc = function(e) {
					var els = document.querySelectorAll(elCssPath),
						tar = e.target,
						match = false;
					if (els.length !== 0) {
						forEach(els, function(el) {
							if (tar === el) {
								if (executeOnce) {
									removeNodeInsertedListener(bindedFunc);
								}
								handler.call(tar, e);
								return;
							}
						});
					}
				};
				forEach(eventTypeList, function(eventType) {
					document.addEventListener(eventType, bindedFunc, false);
				});
				return bindedFunc;
			}
		}
		//函数 元素精确定位取消绑定

		function removeNodeInsertedListener(bindedFunc) {
			var eventTypeList = ["animationstart", "webkitAnimationStart", "MSAnimationStart", "oAnimationStart"],
				forEach = function(array, func) {
					for (var i = 0, l = array.length; i < l; i++) {
						func(array[i]);
					}
				};
			forEach(eventTypeList, function(eventType) {
				document.removeEventListener(eventType, bindedFunc, false);
			});
		}
})();