Greasy Fork 还支持 简体中文。

remove anti-adblock for cnbeta

remove red alert top of cnbeta

目前為 2017-12-02 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name remove anti-adblock for cnbeta
  3. // @namespace null
  4. // @version 1.2.3
  5. // @description remove red alert top of cnbeta
  6. // @author Anonymous
  7. // @match *://*.cnbeta.com/*
  8. // @grant none
  9. // @run-at document-start
  10. // ==/UserScript==
  11.  
  12. (function (window) {
  13. var last = +new Date();
  14. var delay = 100; // default delay
  15.  
  16. // Manage event queue
  17. var stack = [];
  18.  
  19. function callback() {
  20. var now = +new Date();
  21. if (now - last > delay) {
  22. for (var i = 0; i < stack.length; i++) {
  23. stack[i]();
  24. }
  25. last = now;
  26. }
  27. }
  28.  
  29. // Public interface
  30. var onDomChange = function (fn, newdelay) {
  31. if (newdelay) delay = newdelay;
  32. stack.push(fn);
  33. };
  34.  
  35. // Naive approach for compatibility
  36. function naive() {
  37.  
  38. var last = document.getElementsByTagName('*');
  39. var lastlen = last.length;
  40. var timer = setTimeout(function check() {
  41.  
  42. // get current state of the document
  43. var current = document.getElementsByTagName('*');
  44. var len = current.length;
  45.  
  46. // if the length is different
  47. // it's fairly obvious
  48. if (len != lastlen) {
  49. // just make sure the loop finishes early
  50. last = [];
  51. }
  52.  
  53. // go check every element in order
  54. for (var i = 0; i < len; i++) {
  55. if (current[i] !== last[i]) {
  56. callback();
  57. last = current;
  58. lastlen = len;
  59. break;
  60. }
  61. }
  62.  
  63. // over, and over, and over again
  64. setTimeout(check, delay);
  65.  
  66. }, delay);
  67. }
  68.  
  69. //
  70. // Check for mutation events support
  71. //
  72.  
  73. var support = {};
  74.  
  75. var el = document.documentElement;
  76. var remain = 3;
  77.  
  78. // callback for the tests
  79. function decide() {
  80. if (support.DOMNodeInserted) {
  81. window.addEventListener("DOMContentLoaded", function () {
  82. if (support.DOMSubtreeModified) { // for FF 3+, Chrome
  83. el.addEventListener('DOMSubtreeModified', callback, false);
  84. } else { // for FF 2, Safari, Opera 9.6+
  85. el.addEventListener('DOMNodeInserted', callback, false);
  86. el.addEventListener('DOMNodeRemoved', callback, false);
  87. }
  88. }, false);
  89. } else if (document.onpropertychange) { // for IE 5.5+
  90. document.onpropertychange = callback;
  91. } else { // fallback
  92. naive();
  93. }
  94. }
  95.  
  96. // checks a particular event
  97. function test(event) {
  98. el.addEventListener(event, function fn() {
  99. support[event] = true;
  100. el.removeEventListener(event, fn, false);
  101. if (--remain === 0) decide();
  102. }, false);
  103. }
  104.  
  105. // attach test events
  106. if (window.addEventListener) {
  107. test('DOMSubtreeModified');
  108. test('DOMNodeInserted');
  109. test('DOMNodeRemoved');
  110. } else {
  111. decide();
  112. }
  113.  
  114. // do the dummy test
  115. var dummy = document.createElement("div");
  116. el.appendChild(dummy);
  117. el.removeChild(dummy);
  118.  
  119. // expose
  120. window.onDomChange = onDomChange;
  121. })(window);
  122.  
  123. function clearAd(){
  124. var adNodes=document.querySelectorAll('a[href$="/articles/3.htm"]');
  125. if(adNodes.length>0){
  126. var ad=adNodes[0];
  127. var body=document.getElementsByTagName('body')[0];
  128. var adContainer=ad.parentNode.parentNode.parentNode;
  129. var mainContainer=adContainer.parentNode;
  130. mainContainer.removeChild(adContainer);
  131. body.style="";
  132. }
  133. }
  134.  
  135. onDomChange(function(){
  136. clearAd();
  137. });