QQZoneCleaner

清爽的qq空间

当前为 2015-06-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name QQZoneCleaner
  3. // @description 清爽的qq空间
  4. // @namespace http://weibo.com/qiangtoutou
  5. // @include http://*.qzone.qq.com/*
  6. // @grant unsafeWindow
  7. // @version 2014-12-01 20:59:41
  8. // ==/UserScript==
  9.  
  10. (function(w){
  11. //默认的需要删除的class数组,可自行添加,删除
  12. var classArr = ['fn_gdtads', 'fn_paipai', 'fn_mayKnow', 'fn_openvip','fn_guanxiquan','fn_fnrecm','fn_birthdayGuy','feed-hot'],
  13. idArr = ['div_corner_ad_container','QM_My_App_Container','idQbossHotbar'],
  14. filterStr={
  15. content:['收藏音乐','我的空间积分','转载','QQ超市','QQ农场','和QQ好友一起玩游戏','设置背景音乐','添加了应用',
  16. '我要把所有的动物','我和好友们都在玩','赶紧送礼物祝他生日快乐吧','赶紧送礼物祝她生日快乐吧','发起的投票','让自己的空间与众不同','我刚刚在QQ空间领到预约码',
  17. '#玩得酷,靠得住#火箭加速冲,直达广寒宫'],
  18. name:['官方Qzone','QQ空间']
  19. };
  20.  
  21. //v8使用模块加载系统,只能这样加一个检测方法了
  22. //超时检测,在规定时间内轮循f,直到为真则执行cb
  23. var check=function(f,cb){
  24. var now=new Date,
  25. timeout=8000;
  26. var fun= function(){
  27. var ret=f();
  28. if(!ret){
  29. if(new Date-now<timeout){
  30. setTimeout(fun,500);
  31. }
  32. }else{
  33. cb();
  34. }
  35. }
  36. fun();
  37. }
  38. //v8版
  39. classArr=classArr.concat(['mod-side-nav-recently-used','icenter-right-ad']);
  40. idArr=idArr.concat(['QM_Container_100002','QM_Container_100003','QM_Container_333']);
  41.  
  42. //class选择器
  43. var _class = function (name) {
  44. var arr= document.getElementsByClassName(name);
  45. return Array.prototype.slice.call(arr);
  46. }
  47. //id选择器
  48. var _id = function (id) {
  49. return document.getElementById(id);
  50. }
  51. var QQZoneCleaner = {
  52. //删除指定元素
  53. remove : function (elem) {
  54. elem && elem.parentNode && elem.parentNode.removeChild(elem);
  55. },
  56. hide : function (elem) {
  57. elem && (elem.style.display='none');
  58. },
  59. _getArr:function(){
  60. var i,j,el,arr,cls;
  61. arr=[];
  62. //id
  63. for (var j = idArr.length; j--; ) {
  64. el = _id(idArr[j]);
  65. arr.push(el);
  66. }
  67. //class
  68. for (var i = classArr.length; i--; ) {
  69. cls=classArr[i];
  70. el=_class(cls);
  71. arr=arr.concat(el);
  72. }
  73. //过滤消息内容
  74. arr=arr.concat(this._fromContent());
  75. //过滤用户
  76. arr=arr.concat(this._fromName());
  77. return arr;
  78. },
  79. //内容
  80. _fromContent:function(){
  81. var arr=_class('f_info');
  82. //v8
  83. arr=arr.concat(_class('f-info'));
  84. arr=arr.concat(_class('qz_summary'));
  85. arr=this._filter(arr,'content');
  86. return arr;
  87. },
  88. //用户名
  89. _fromName:function(){
  90. var arr=_class('f_nick');
  91. //v8
  92. arr=arr.concat(_class('f-nick'));
  93. arr=this._filter(arr,'name');
  94. return arr;
  95. },
  96. //文本
  97. _text:function(obj){
  98. var t='';
  99. var arr=obj.childNodes;
  100. for(var i=0,len=arr.length;i<len;i++){
  101. t+=arr[i].textContent;
  102. }
  103. t=t.replace(/\s/g,'');
  104. return t;
  105. },
  106. _filter:function(arr,type){
  107. var html,item,i,j,retArr=[],
  108. filter=filterStr[type];
  109. for(i=arr.length;i--;){
  110. item=arr[i];
  111. html=this._text(item);
  112. for(j=filter.length;j--;){
  113. if(html.indexOf(filter[j])!=-1){
  114. var p=item.parentElement.parentElement.parentElement;
  115. retArr.push(p);break;
  116. }
  117. }
  118. }
  119. return retArr;
  120. },
  121. //执行删除操作
  122. doRemove : function () {
  123. var arrs = this._getArr();
  124. //还是隐藏吧
  125. for (var j = 0, len = arrs.length; j < len; j++)
  126. this.hide(arrs[j]);
  127. }
  128. };
  129.  
  130. QQZoneCleaner.doRemove();
  131.  
  132. check(function(){
  133. return w.QZONE.qzEvent;
  134. },
  135. function(){
  136. w.QZONE.qzEvent.addEventListener('QZ_SCROLL',function(){
  137. QQZoneCleaner.doRemove();
  138. });
  139. });
  140. })(unsafeWindow);