YoukuSS

By Jason Huang Last update Jun 23, 2010 — Installed 471 times.
// ==UserScript==
// @name YoukuSS
// @author NLF
// @description 优酷功能的增强(窗口大小控制,视频下载等.)(support opera 10.1+,firefox 3.5+,chrome 5+)
// @mod_date 2010-6-22
// @version 1.9
// @include http://v.youku.com/*
// @include http://www.flvcd.com/parse*
// @download http://bbs.operachina.com/viewtopic.php?f=41&t=62429
// ==/UserScript==

(function (){
	//迷你窗口上和下载地址解析iframe上..禁止加载JS.
	if(/^https?:\/\/v\.youku\.com\/v_showMini/i.test(location.href) || window.name=='N_downvideo')return;

	///////////////////////////////////开关////////////////
	var prefs={
		SZ:2									,//初始化为屏幕尺寸  0:普通(优酷的默认大小);1:普屏(大);2:宽屏;3宽屏(大);
		EnableCS:true 				,//是否启用cookie保存最后的屏幕状态..;
		drag:true							,//任何地方按住ctrl 鼠标左键拖曳播放器大小..;
		replacec:true					,//美化原开关灯按钮..;
		minic:false					,//迷你播放器控制栏..;
		download:true					,//视频下载功能..(chrome上无效);
		transition:true				,//切换屏幕大小时.动画过渡..;
		////////////////////////////////////开关结束////////////////

		//普屏CSS内容
		NMCSS:'\
			div#player{\
				width:610px;\
				height:499px;\
			}',

		//超普屏CSS内容
		SNMCSS:'\
			div#player{\
				width:930px;\
				height:738px;\
			}\
			div.right{\
				margin-top:738px!important;\
			}',

		//宽屏CSS内容
		WSCSS:'\
			div#player{\
				width:610px;\
				height:388px;\
			}',

		//超宽屏CSS内容
		SWSCSS:'\
			div#player{\
				width:930px;\
				height:569px ;\
			}\
			div.right{\
				margin-top:569px!important;\
			}'
	};

	function setCookie(c_name,c_value,keepday,c_path,c_domain,c_secure){
		var scookie=c_name+'='+encodeURIComponent(c_value);
		if (keepday){
			var exdate=new Date();
			exdate.setDate(exdate.getDate()+Number(keepday));
			scookie+=';expires='+exdate.toGMTString();
		}
		if (c_path){
			scookie+=';path='+c_path;
		}
		if (c_domain){
			scookie+=';domain='+c_domain;
		}
		if (c_secure){
			scookie+=';secure='+c_secure;
		}
		document.cookie=scookie;
	};

	function getCookie(c_name){
	var sre="(?:;)?"+c_name+"=([^;]*);?"
	var ore=new RegExp(sre);
		if(ore.test(document.cookie)){
			return decodeURIComponent(RegExp.$1)
		}else{
			return '';
		}
	};

	if(prefs.EnableCS){
		prefs.SZ=getCookie("ykws") || prefs.SZ;
	};
	var Style=document.createElement('style');
	Style.setAttribute('type','text/css');
	document.getElementsByTagName('head')[0].appendChild(Style);

	function Style_loader(){
		switch(String(prefs.SZ)){
			case '0':{
				Style.innerHTML=prefs.NMCSS;
			};break;
			case '1':{
				Style.innerHTML=prefs.SNMCSS;
			};break;
			case '2':{
				Style.innerHTML=prefs.WSCSS;
			};break;
			case '3':{
				Style.innerHTML=prefs.SWSCSS;
			};break;
			case 'cus':{
				Style.innerHTML=getCookie("ykwsc");
			};break;
			default:{
			};break;
		};
	};
	Style_loader();

	function init(){
		//封装 evaluate()方法
		function matchSingleNode(xpath,doc,root){
			doc=doc||document;
			if(root){
				xpath=xpath.indexOf('.')==0? xpath : '.'+xpath;
			}else{
				root=doc;
			};
			return doc.evaluate(xpath, root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
		};

		var kaiguan=document.createElement('select');
		kaiguan.innerHTML='\
			<option value="0">【4:3】</option>\
			<option value="1">【4:3】_B</option>\
			<option value="2">【16:9】</option>\
			<option value="3">【16:9】_B</option>\
			<option value="cus">【自定义】</option>';
		kaiguan.style.cssText='\
			margin-left:8px;\
			color:#014CCC;\
			display:inline!important;';
		kaiguan.addEventListener('change',function(){
			var tempV=this.value;
			if(tempV=='cus'){
				var cm=prompt('自定义屏幕大小:\n请输入宽和高\n格式:800,600(中间请用逗号分隔)','800,600');
				if(cm==null){csize();return;};
				if (!cm || cm.indexOf(',')==-1){alert('格式无效');csize();return};
				var cm=cm.split(',');
				var width=parseInt(cm[0],10);
				var height=parseInt(cm[1],10);
				var ccss='div>.left>div.playArea>div#player{width:'+width+'px'+';height:'+height+'px'+';}'
				if(width >610){
					ccss+='div.right{margin-top:'+height+'px'+'!important;}'
				};
				setCookie("ykwsc",ccss,30,'/','v.youku.com');
			};
			prefs.SZ=cursel=tempV;
			setCookie("ykws",prefs.SZ,30,'/','v.youku.com');
			Style_loader();
		},false);
		var position=matchSingleNode('//div[@class="guide"]');
		position.appendChild(kaiguan);


	//根据屏幕状态初始化开关的状态
		var cursel,options=kaiguan.options;
		function csize(){
			var cursel_t=cursel || prefs.SZ;
			for(var i=0,ii=options.length;i<ii;i++){
				if(options[i].value==cursel_t){
					options[i].selected=true;
					cursel=options[i].value;
					//alert(typeof cursel);
					break;
				};
			};
		};
		csize();

		//视频下载..
		(function(){
			if(!prefs.download || window.chrome)return;
			var i_downbox;
			function V_download(e){
				if(!i_downbox){
					var url=location.href;
					var hash=location.hash;
					if(hash){
						//alert(hash);
						url=url.replace(hash,'');
					};
					i_downbox=document.createElement('div');
					i_downbox.style.cssText='\
						border:1px solid #ccc;\
						position:absolute;\
						z-index:1000;\
						border-radius:3px;\
						background-color:white;\
						height:96px;\
						box-shadow:2px 2px 6px #ccc;\
						-moz-box-shadow:2px 2px 6px #ccc;\
						top:2px;\
						overflow:hidden!important;\
						display:none;';
					var iframe=document.createElement('iframe');
					iframe.frameBorder=0;
					iframe.width=iframe.height='100%';
					iframe.name='N_downvideo';
					i_downbox.appendChild(iframe);
					var i_src='http://www.flvcd.com/parse.php?kw='+url;
					iframe.src=i_src;
					document.body.appendChild(i_downbox);
				};

				if(i_downbox.style.display!='none'){
					i_downbox.style.display='none';
					this.textContent='>>下载视频(开)';
				}else{
					i_downbox.style.display='';
					var i_left=this.getBoundingClientRect().left+window.scrollX+this.offsetWidth;
					i_downbox.style.left=i_left+3+'px';
					this.textContent='>>下载视频(关)';
				};
			};
			var r_d_a=document.createElement('a');
			r_d_a.textContent='>>下载视频(开)';
			r_d_a.style.cssText='\
				padding-left:10px;\
				color:#014CCC;';
			r_d_a.href='javascript:';
			r_d_a.addEventListener('click',V_download,false);
			position.appendChild(r_d_a);
		})();

		//关灯美化..
		(function(){
			if(!prefs.replacec)return;
			var spana=matchSingleNode('//span[@class="turn"]/a');
			if(!spana)return;
			var lightImage='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAABCCAYAAABjJzf7AAAABHNCSVQICAgIfAh\
				kiAAAAAlwSFlz  AAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNAay06AAAARs  SURBVEi\
				J7ZbNT1xVGIefc+6dGeAOA9MOlMKCSjWFjtDGVg2xJWPRhUsXdeHGaKJRN/oP1JX7rmw0  McaNraluTKDxq820okEa6UecGShto\
				ZEiCNNhmJk79/McF3wUF100bnmTd3HOeZ7kTc5v8YqzZ88C  IKVECNEL9CmlWpRShGFYDoKgUK/XpxzHAcBkvYTW+nhzc/ORdDo\
				9FI/H22q1mlsul5dzudx4tVpt  B34BtPQ8D9/3+yzLOprJZN5NJBJPhWEYq1QqYblcThw7dux1y7KO1Gq1vrW1NaTneTiOkx4YG\
				Djh  +74Kw9AVQgjDMAzHcZyFhYXS4ODgkG3bacdxMG3bRmvdkkwm97muawPa8zzPtm1XKaWDIHBTqVSX  bdutWmvMarWK1lq7r\
				usUi8U1QNu27ZZKJVdKKWKxmCmECGzbVlprzFqthtZ6eWpqKhePx/cVi8Wi  UkpLKUVzc3MkmUwmCoXCrOM4y1prpOM41Ov1yQs\
				XLvyeSqWilmXFLMsyk8lkrLW1tSkej0fPnTv3  q+d5k77vYwwODqKUWiuVSub8/Lw7PDz8ghDCtywrsnv37j1nzpw5Pzc3Ny6Ey\
				AMYPT092LZNEAQL  i4uL7d3d3amOjo52wzCMqampW6Ojo2PAz4AGkL7vs9EqDMObExMT1yKRSGMkEmmamJi4BtwE1MYH  I/P5PN\
				tqPp/PV6SUhpTSyOfzFWB+8/Hy5csPyUwmw8mTJ+nv739nZGREnz59WhuG8Wk6nSadTm9x  m1kim82SyWQA6O3txfd9AHK53PYJk\
				BvdACSz2exegJWVFVZXVzeZvcAuoAmQAjCA5o3LhBAiDpwC  OrXWHwIPgApQAspCa83jlHwsekfYEXaEHWFH2BEeUeLrj7YdBL1A\
				n9YkNaA1a1qTC0IKYbjObG1k  wFBLx8Gj6cx7mZbO7i7HWdCl+7N/T499O/Zg4U4ncAnQxqvHAUi3dj794ok3v3g/lki0a+3Iam1\
				G  uOru3gPPvXF0aXa6WF0tlkPFolQKwpBDAy99MByqmlTK88HEMBoIgnJQWh0Xh19+OxOEPBsoMIP1  2VKtnfv3B0HFBamDoKxc\
				dwmlfKGUF+7qeqLbC9ij9UPB9NyVoGbfCoWQynWXqFZvm1LGZCTSKtCG  7/lIrcH0AwCW7+XGphNd8nC1Ol1XyheGEZWxWKewrJ7\
				IXP76tOezCCCDEPyA38ZHv7pmNfY70Whb  tKGhw2hq2i8t60kjFtnnXPrmkxuhIhuEYLzyPGhNqVqtN67cn+eZobcOCWmE0WibjM\
				cPxL777OOR  pb9mLgHjALJchYoNfsCPd3KTd+7+mbsZjbZHTDNu3L7xx83ZwtVbwPdb0QgVbHSoNVcKVy/mTTMe  MYx4tHD1Yh6\
				4AoRbQvbGf6Iyc2960hXCEFKa4t70pAvMbD5++QOY2euQvQ6vvdxOW1tb7cqknB0Y  a2yfmZnh1Odu8ng/NVhntmeJ8z/9QyZzEC\
				jS19eL50XZDm6NxCM2snJ5eZP5fxvZvzGZVZUdEni2  AAAAAElFTkSuQmCC';

			spana.style.cssText+='\
				padding-left:20px;\
				background-image:url("'+lightImage+'");\
				background-repeat:no-repeat;\
				background-position:0 0;'
			function lightC(){
				if(getCookie('light')=='off'){
					spana.textContent='开灯';
					spana.style.opacity='0.6';
					spana.style.backgroundPosition='0 -50px';
					spana.style.color='#F0F000';
					spana.style.textShadow='0 0 5px #F0F000';
				}else{
					spana.textContent='关灯';
					spana.style.opacity='1';
					spana.style.backgroundPosition='0 0';
					spana.style.removeProperty('color');
					spana.style.textShadow='';
				};
			};
			lightC();
			spana.addEventListener('click',lightC,false)
		})();

		//拖曳缩放播放器大小;
		(function(){
			if(!prefs.drag)return;
			function moveit(e){
				prefs.SZ=cursel='cus';
				var f_player_W=e.clientX-o_mouse_x+ player_W;
				var f_player_H=e.clientY-o_mouse_y+ player_H;
				if(f_player_W>Div_left_W){
					var Div_right_MT=f_player_H;
				}else{
					var Div_right_MT=0;
				};
				clearTimeout(ys);
				ys=setTimeout(function(){Style.innerHTML='div>.left>div.playArea>div#player{width:'+ f_player_W +'px ;height:'+ f_player_H +'px;}\
												div.right{margin-top:'+Div_right_MT+'px !important;}';
											},10);
			};

			function moveover(e){
				csize();
				setCookie("ykwsc",Style.innerHTML,30,'/','v.youku.com');
				setCookie("ykws",prefs.SZ,30,'/','v.youku.com');
				document.removeEventListener('mousemove',moveit,false);
				document.removeEventListener('mouseup',moveover,false);
			};

			var Div_left_W,Div_right,player_W,player_H,o_mouse_x,o_mouse_y,ys;
			document.addEventListener('mousedown',function(e){
				if(e.button!=0 || !e.ctrlKey){return;};
				e.preventDefault();
				Div_left_W=matchSingleNode('//div[@class="left"]').offsetWidth;
				Div_right=matchSingleNode('//div[@class="right"]');
				player_W=document.getElementById('player').offsetWidth;
				player_H=document.getElementById('player').offsetHeight;
				o_mouse_x=e.clientX;
				o_mouse_y=e.clientY;
				document.addEventListener('mousemove',moveit,false);
				document.addEventListener('mouseup',moveover,false);
			},false);
		})();

		//迷你控制栏..
		(function(){
			if(!prefs.minic)return;
			var movie_player=document.getElementById("movie_player");
			if(!movie_player)return;
			var flashvars=movie_player.getAttribute("flashvars").replace(/interior/i, "index");
			movie_player.setAttribute('flashvars',flashvars);
			movie_player.parentNode.appendChild(movie_player);
		})();

		//动画过渡..
		(function(){
			if(!prefs.transition)return;
			var style=document.createElement('style');
			style.setAttribute('type','text/css');
			style.innerHTML='\
				div#player{\
					-o-transition:width 0.2s ease-in-out,height 0.2s ease-in-out;\
					-webkit-transition:width 0.2s ease-in-out,height 0.2s ease-in-out;\
					-moz-transition:width 0.2s ease-in-out,height 0.2s ease-in-out;\
				}';
			document.getElementsByTagName('head')[0].appendChild(style);
		})();

	};
////////////////////////////////////
	if(window.opera){
		document.addEventListener('DOMContentLoaded',init,false);
	}else{
		init();
	};

})();

//下载功能..iframe
(function(){
	if(window.name!='N_downvideo')return;
	var head=document.getElementsByTagName('head')[0];
	var style=document.createElement('style');
	style.type='text/css';
	head.appendChild(style);
	if(window.chrome){
		style.innerHTML='\
			body>*,\
			body>table>tbody>tr,\
			body>table>tbody>tr>th>table:first-child,\
			body>table>tbody>tr>th>table:last-child>tbody>tr:last-child{\
				display:none!important;\
			}\
			body>table,body>table>tbody>tr[style]{\
				display:block!important;\
			}\
			a{\
				font-size:0!important;\
			}\
			a:after{\
				content: "下载地址";font-size:13px;\
			}';
		return;
	}else{
		style.innerHTML='\
			*{\
					display:none!important;\
				}\
			body{\
				background-color:white!important;\
			}';
	};

	function init(){
		//alert(document.title)
		var as=document.links,tempa,tempa_h,tempa_in,dua=[],hdd,hdd_t;
		for(var i=0,ii=as.length;i<ii;i++){
			tempa=as[i];
			tempa_h=as[i].href;
			if(/^https?:\/\/f\.youku\.com\/player\/getFlvPath/i.test(tempa_h)){
				dua.push(tempa_h);
				continue;
			};
			if(hdd)continue;
			tempa_in=tempa.innerHTML;
			if(/高清模式解析/i.test(tempa_in)){
				hdd=tempa_h;
				hdd_t='高清模式解析';
			}else{
				if(/普通模式解析/i.test(tempa_in)){
					hdd=tempa_h;
					hdd_t='普通模式解析';
				};
			};
		};

		head.innerHTML='';
		var body=document.body;
		body.innerHTML='';

		if(dua.length==0){
			body.innerHTML='解析失败.两次解析时间最少间隔5秒<br /><a href="'+location.href+'">点击重试</a>'
			//alert('解析失败');
		}else{
			//alert(dua.length);
			var DurlN;
			var ii=dua.length;
			var div_title=document.createElement('div');
			var h4inner='本视频一共有 <b>'+ii+'</b> 段';
			if(hdd){
				h4inner+='<a style="color:red;padding-left:10px;" href="'+hdd+'">'+hdd_t+'</a>'
			};
			div_title.innerHTML=h4inner;
			body.appendChild(div_title);
			body.appendChild(document.createElement('hr'));
			for(var i=0;i<ii;i++){
				DurlN=document.createElement('a');
				DurlN.style.cssText='\
					padding-right:10px;\
					font-size:13px;';
				DurlN.textContent='第 '+(i+1)+' 段';
				DurlN.href=dua[i];
				body.appendChild(DurlN);
			};
		};
	};

	if(window.opera){
		document.addEventListener('DOMContentLoaded',init,false);
	}else{
		init();
	};
})();