Tieba Multiuser

百度贴吧马甲切换

目前為 2014-08-19 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Tieba Multiuser
  3. // @namespace http://gera2ld.blog.163.com/
  4. // @author Gerald <gera2ld@163.com>
  5. // @icon http://s.gravatar.com/avatar/a0ad718d86d21262ccd6ff271ece08a3?s=80
  6. // @version 1.3.1.1
  7. // @description 百度贴吧马甲切换
  8. // @homepage http://geraldl.ml/userjs/TiebaMultiuser
  9. // @include http://tieba.baidu.com/*
  10. // @require https://greasyfork.org/scripts/144/code.user.js
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_registerMenuCommand
  14. // ==/UserScript==
  15.  
  16. function getValue(k,d){
  17. var o=GM_getValue(k,'');
  18. if(o&&typeof o=='string') o=JSON.parse(o);
  19. return o||d;
  20. }
  21. function setValue(k,v){GM_setValue(k,JSON.stringify(v));}
  22. function switchUser(s,p){
  23. var d=new Date();if(s) d.setTime(16094e8); else s='';
  24. document.cookie='BDUSS='+s+';domain=baidu.com;path=/;expires='+d.toGMTString();
  25. if(typeof p=='function') p();
  26. else if(typeof p=='string') location.replace(p);
  27. else location.reload();
  28. }
  29. function saveUsers(){setValue('ge_users',users);}
  30. function userManage(e,p,o){
  31. e.preventDefault();o=e.target;e=o.parentNode;p=e.parentNode;
  32. if(o.tagName=='A') {
  33. if(e==p.firstChild) switchUser();
  34. else if(e==p.lastChild) {
  35. //unsafeWindow.TbCom.process("User", "buildLoginFrame"); // HttpOnly cookie
  36. location.href='http://wappass.baidu.com/?login&u='+encodeURIComponent(location.href);
  37. } else switchUser(users[o.innerText||o.textContent]);
  38. } else if(o.tagName=='SPAN') {
  39. o=o.previousSibling;delete users[o.innerText||o.textContent];
  40. setTimeout(saveUsers,0);p.removeChild(e);
  41. }
  42. }
  43. function buildMenu(bar){
  44. utils.addStyle('\
  45. #ge_tu>li{position:relative;cursor:pointer;}\
  46. #ge_tu span{position:absolute;top:0;right:0;background:#77f;color:white;border-radius:3px;border:1px solid;border:none;margin:2px;padding:2px;cursor:pointer;line-height:1em;}\
  47. #ge_tu span:hover{background:red;}\
  48. ');
  49. $('<li class=split>').prependTo(bar);
  50. var a=$('<li><div class="u_menu_item"><a href=# class=u_menu_wrap style="margin-top:-2px;">马甲</a></div></li>').prependTo(bar).mouseover(function(){
  51. b.show();c.addClass('u_menu_hover');
  52. }).mouseout(function(){b.hide();c.removeClass('u_menu_hover');}),
  53. b=$('<div class=u_ddl>').hide().appendTo(a),
  54. c=a.children().first();
  55. $('<div class=u_ddl_tit style="left:1px;">').appendTo(b).width(a.innerWidth()-2);
  56. ul=$('<ul id=ge_tu>').appendTo($('<div class="u_ddl_con u_ddl_con_top">').appendTo(b)).click(userManage);
  57. initMenu();
  58. }
  59. function initMenu(){
  60. d=[];
  61. if(users) {
  62. d.push('<li><a href=#>未登录状态</a></li>');
  63. for(var i in users) {
  64. if(!i) {delete users[i];continue;}
  65. d.push('<li><a href=#>'+i.replace(/&/g,'&amp;').replace(/</g,'&lt;')+'</a><span>删</span></li>');
  66. }
  67. } else
  68. d.push('<li title="未检测到Cookie,请任意添加一个马甲或自行去除对应Cookie的HttpOnly属性。" style="color:gray">未检测到Cookie</li>');
  69. d.push('<li><a href=#>添加马甲</a></li>');
  70. ul.html(d.join(''));
  71. }
  72. function showOptions(){
  73. utils.popup.show({
  74. html:'\
  75. <h3>设置 - 贴吧马甲切换脚本</h3>\
  76. <fieldset><legend>马甲数据 <button id=gu_import>导入</button> <button id=gu_export>导出</button> \
  77. <a title="复制数据到以下文本框然后点击导入即可导入数据。\n点击导出后复制数据文本即可用于导入。">(?)</a></legend>\
  78. <textarea id=gu_data></textarea></fieldset>\
  79. ',
  80. className:'ge_opt',
  81. init:function(d){
  82. var t=d.querySelector('#gu_data');t.onclick=function(){this.select();};
  83. d.querySelector('#gu_import').onclick=function(o){
  84. try{o=JSON.parse(t.value);}catch(e){o=null;}
  85. if(o&&typeof o=='object') {
  86. for(var i in o) users[i]=o[i];
  87. saveUsers();initMenu();alert('导入成功!');
  88. } else alert('导入失败!');
  89. };
  90. d.querySelector('#gu_export').onclick=function(){t.value=JSON.stringify(users);};
  91. }
  92. });
  93. }
  94. function init(d,m){
  95. users=getValue('ge_users',{});
  96. if((d=PageData)&&d.user&&d.user.is_login&&d.user.name) d=d.user.name; // 贴吧
  97. if(d) {
  98. m=document.cookie.match(/BDUSS=(.*?)(;|$)/);
  99. if(m) {users[d]=m[1];saveUsers();}
  100. else users=null;
  101. }
  102. GM_registerMenuCommand('贴吧马甲设置',showOptions);
  103. function check(e){
  104. if(e.target.parentNode.id=='com_userbar') {
  105. document.body.removeEventListener('DOMNodeInserted',check,false);
  106. buildMenu(e.target);
  107. }
  108. }
  109. document.body.addEventListener('DOMNodeInserted',check,false);
  110. }
  111. var users,ul;
  112. if(document.querySelector('a[param=word]')) init();