// ==UserScript== // @name Baidu Multiuser // @namespace http://gera2ld.blog.163.com/ // @author Gerald // @icon http://ww2.sinaimg.cn/small/a56031a1gw1emwlbe1c8gj2097097wfa.jpg // @version 2.0 // @description 百度马甲切换 // @homepageURL http://geraldl.net/userjs/BaiduMultiuser // @match *://*.baidu.com/* // @include *.baidu.com/* // @exclude http://developer.baidu.com/* // @exclude http://web.im.baidu.com/* // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @downloadURL none // ==/UserScript== var User_Agent='Most handsome in the world', url_login='http://wappass.baidu.com/passport/login'; function getValue(k,d){ var o=GM_getValue(k,''); if(o&&typeof o=='string') o=JSON.parse(o); return o||d; } function setValue(k,v){GM_setValue(k,JSON.stringify(v));} function checkCookie(name){ m=document.cookie.match(/BDUSS=(.*?)(;|$)/); if(m) {users[name]=m[1];saveUsers();} else users=null; } function switchUser(s,p){ var d=new Date();if(s) d.setTime(16094e8); else s=''; document.cookie='BDUSS='+s+';domain=baidu.com;path=/;expires='+d.toGMTString(); if(typeof p=='function') p(); else if(typeof p=='string') location.replace(p); else location.reload(); } function initLoc(){ gu.right=gu._right=gu.parentNode.offsetWidth-gu.offsetWidth-gu.offsetLeft; gu.top=gu._top=gu.offsetTop; } function saveUsers(){setValue('ge_users',users);} function saveLoc(){setValue('ge_users_loc',{right:gu.right,top:gu.top});} function checkLogIn(res){ if(res.finalUrl.substr(0,url_login.length)==url_login) logIn(res.responseText); else GM_xmlhttpRequest({ method:'GET', url:'http://www.baidu.com', onload:function(o){ var m=o.responseText.match(/(.*?)<\/span>/); if(m) { checkCookie(m[1]); location.reload(); } else alert('出错了!我也不知道要怎么办。。'); }, }); } function logIn(src){ var i=src.indexOf('
',i), m=src.substr(i,j-i).match(/(.*?)<\/span>/), data={},rdata=[],form; if(m) alert('登录失败!'+m[1]); i=src.indexOf('
',i); form=src.substr(i,j-i); form.replace(/]*? name="(.*?)"[^>]*? value="(.*?)"[^>]*?>/g,function(m,g1,g2){ data[g1]=g2; }); if(data['vcodestr']) { // 'http://wappass.baidu.com/cgi-bin/genimage?'+data['vcodestr'] alert('需要验证码,此功能以后再说。。或者你可以休息一下再来~'); return; } else { data['username']=i=prompt('请输入手机号/邮箱/用户名:'); if(i===null) return; data['password']=i=prompt('请输入密码(用后即焚):'); if(i===null) return; } for(i in data) rdata.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i])); GM_xmlhttpRequest({ method:'POST', url:'http://wappass.baidu.com/passport/login', data:rdata.join('&'), headers:{ 'User-Agent':User_Agent, 'Content-Type':'application/x-www-form-urlencoded', }, onload:checkLogIn, }); } function userManage(e,p,o){ e.preventDefault();o=e.target;e=o.parentNode;p=e.parentNode; if(o.tagName=='A') { if(e==p.firstChild) switchUser(); else if(e==p.lastChild) { GM_xmlhttpRequest({ method:'GET', url:url_login+'?type=1', headers:{ 'User-Agent':User_Agent, }, onload:function(o){ if(!o.finalUrl) { alert('您的运行环境不支持此脚本,可以尝试Baidu Multiuser Unsafe。'); return; } logIn(o.responseText); }, }); } else switchUser(users[o.innerText||o.textContent]); } else if(o.tagName=='SPAN') { o=o.previousSibling;delete users[o.innerText||o.textContent]; setTimeout(saveUsers,0);p.removeChild(e); } } function locate(l){ if(l) { gu.right=l&&!isNaN(l.right)?l.right:100; gu.top=l&&!isNaN(l.top)?l.top:100; } gu.style.right=gu.right+'px'; gu.style.top=gu.top+'px'; } function mousemove(e){ e.preventDefault();e.stopPropagation(); var l={right:gu._right+gu.x-e.pageX,top:gu._top+e.pageY-gu.y}; locate(l); } function pinUpdate(){ if(gu.pin) { symbol.classList.add('ge_pin'); symbol.setAttribute('title','固定在页面上'); gu.style.position='absolute'; } else { symbol.classList.remove('ge_pin'); symbol.setAttribute('title','固定在屏幕上'); gu.style.position=''; } } function pin(){ initLoc(); if(gu.pin) // fixed => absolute gu.top+=window.pageYOffset; else // absolute => fixed gu.top-=window.pageYOffset; pinUpdate(); locate(); saveLoc(); } function init(){ users=getValue('ge_users',{}); GM_registerMenuCommand('百度马甲设置',showOptions); GM_addStyle('\ #ge_u{display:block;padding:10px;text-align:left;}\ #ge_u .ge_h{display:none;}\ #ge_u{z-index:10006;font:normal normal 400 12px/18px 宋体;position:fixed;}\ #ge_u>span{background:white;color:blue;border-radius:3px;border:1px solid #c0c0c0;padding:2px;cursor:pointer;}\ #ge_u>div{position:relative;margin-top:3px;}\ #ge_u>div>*{position:absolute;}\ .ge_u{background:white;border:1px solid silver;box-shadow:5px 5px 7px #333;}\ .ge_u{width:120px;max-height:400px;overflow-x:hidden;overflow-y:auto;}\ .ge_u>li{position:relative;display:block;padding:2px 20px 4px 6px;}\ .ge_u>li:hover{background:lightgray;}\ .ge_u a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\ .ge_u span{position:absolute;top:0;right:0;color:white;background:#77f;border-radius:3px;margin:2px;cursor:pointer;padding:2px;}\ .ge_u span:hover{background:red;}\ .ge_sym{display:inline-block;width:7px;height:7px;border:1px solid #c0c0c0;border-radius:4px;margin-left:3px;}\ .ge_sym.ge_pin{background:#c0c0c0;}\ .ge_opt{padding:20px;border-radius:5px;}\ .ge_opt fieldset{border:1px solid silver;border-radius:5px;padding:5px;}\ .ge_opt textarea{min-height:100px;width:100%;}\ '); gu=document.createElement('div');gu.id='ge_u'; gu.innerHTML='马甲
    '; gu.style.display=getValue('float',''); ul=gu.querySelector('ul');ul.onclick=userManage; symbol=gu.firstChild.lastChild; gu.pin=!!getValue('ge_pin');pinUpdate(); symbol.onclick=function(){setValue('ge_pin',gu.pin=!gu.pin);pin();}; gu.onmouseover=function(e){ if(this.contains(e.relatedTarget)) return; ul.classList.remove('ge_h'); if(gu.offsetLeft+gu.firstChild.offsetLeft+ul.offsetWidth<=document.body.offsetWidth) ul.style.pixelLeft=0; else ul.style.pixelLeft=document.body.offsetWidth-gu.offsetLeft-gu.firstChild.offsetLeft-ul.offsetWidth; };gu.onmouseout=function(e){if(!this.contains(e.relatedTarget)) ul.classList.add('ge_h');}; var d=getValue('ge_users_loc',{});if(typeof d=='string') d=JSON.parse(d); document.body.appendChild(gu);locate(d);gu.moving=false; gu.firstChild.onmousedown=function(e){ e.preventDefault();e.stopPropagation(); if(e.target!=gu.firstChild||gu.moving) return;gu.moving=true; initLoc(); gu.x=e.pageX; gu.y=e.pageY; document.addEventListener('mousemove',mousemove,false); }; gu.onmouseup=function(e){ if(!gu.moving) return;gu.moving=false; e.preventDefault();e.stopPropagation(); document.removeEventListener('mousemove',mousemove,false); saveLoc(); }; initMenu(); popup=document.createElement('div'); popup.className='ge_popup ge_opt'; popup.innerHTML='\

    设置 - 百度马甲切换脚本

    \
    马甲数据 \ (?)\
    \

    \ '; document.body.appendChild(popup); popup.addEventListener('click',function(e){e.stopPropagation();},false); var t=popup.querySelector('#gu_data'); t.onclick=function(){this.select();}; popup.querySelector('#gu_import').onclick=function(o){ try{o=JSON.parse(t.value);}catch(e){o=null;} if(o&&typeof o=='object') { for(var i in o) users[i]=o[i]; saveUsers();initMenu();alert('导入成功!'); } else alert('导入失败!'); }; popup.querySelector('#gu_export').onclick=function(){t.value=JSON.stringify(users);}; popup.querySelector('#gu_close').addEventListener('click',function(){popup.style.display='';},false); } function initMenu(){ d=[]; if(users) { d.push('
  • 未登录状态
  • '); for(var i in users) { if(!i) {delete users[i];continue;} d.push('
  • '+i.replace(/&/g,'&').replace(/
  • '); } } else d.push('
  • 未检测到Cookie
  • '); d.push('
  • 添加马甲
  • '); ul.innerHTML=d.join(''); } function showOptions(){ popup.style.display='block'; popup.style.top=(innerHeight-popup.offsetHeight)/2+'px'; popup.style.left=(innerWidth-popup.offsetWidth)/2+'px'; } var menu,gu,ul,symbol,options,users,popup; if(window.top===window&&document.head) init();