rusdtp.ru chat blocker

  1. 10 г. назад

    есть такой интересный сайт http://rusdtp.ru/
    недавно на нём плюсом к форуму добавился какой-то непонятный и ненужный чатик, который занимает хренову тучу места на странице.

    меня такой поворот событий возмутил, и сподвиг на написание юзерскрипта для Greasemonkey (этот аддон есть для FF, Chrome и Opera).
    собственно, если кому-то интересно, то скрипт такой:

    // ==UserScript==
    // @name        rusdtp.ru chat blocker
    // @namespace   rusdtp-chat-blocker
    // @include     http://rusdtp.ru/*
    // @version     1
    // ==/UserScript==
    
    // Main
    function main() {
        var e = document.getElementsByClassName('borderwrap')[0];
        var child_div = e.children[0];
        var child_script = e.children[1];
        var child_frame = e.children[2];
        if (child_div.nodeName == 'DIV' && child_script.nodeName == 'SCRIPT' && child_frame.nodeName == 'IFRAME') {
            var child_br = e.children[3];
            e.removeChild(child_div);
            e.removeChild(child_script);
            e.removeChild(child_frame);
            if (child_br.nodeName == 'BR') e.removeChild(child_br);
        }
    }
    
    /**
     * Opera reads user.js files as greasemonkey notation with the following results:
     *   - "Not permitted to use window.opera.addEventListener."  Alternate addEvenetListener supported, but with wonky syntax
     *   - DOES NOT WORK: addEventListener('DOMContentLoaded', main, false)
     *   - WORKS: addEventListener('DOMContentLoaded', main(), false)
     *   - Always runs after creating the DOM for the page; does not support // @run-at document-start 
     * Opera reads .js files (NOT ending in user.js) as default with the following results:
     *   - Allows use of window.opera.addEventListener
     *   - WORKS: addEventListener('DOMContentLoaded', main, false)
     *   - DOES NOT WORK: addEventListener('DOMContentLoaded', main(), false)
     *   - "It is usually run before the DOM for the page has been completed," so // @run-at document-start is redundant
     *   - Need to attach main() to an event listener, because DOM may not be ready when script is loaded.
     * More info:
     *   - http://www.opera.com/docs/userjs/using/  (Adding User JavaScripts)
     *   - http://www.opera.com/docs/userjs/examples/  (Greasemonkey scripts)
     */
    if (window.opera) {
    	// Opera's greasemonkey version of addEventListener() breaks try-catch on error, so it must be called first.
    	try {
    		document.addEventListener('DOMContentLoaded', main(), false)
    	}
    	catch(err) {
    		document.addEventListener('DOMContentLoaded', main, false)
    	}
    }
    else {
    	// FF, Chrome
    	document.addEventListener('DOMContentLoaded', main, false);
    }
    
    
  2. не совсем понятно зачем зачем проверять на оперу, если ты пользуешься ФФ)

    я в таких случаях подключаю jquery

    function loadJQuery(){
    	if(typeof(jQuery) === 'undefined'){
    		var s = document.createElement("script");
    		s.type = "text/javascript";
    		s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
    		document.head.appendChild(s);
    }
    
    loadJQuery();
    
    //Пошел основной код
    $(document).ready(function(){ ...});
    

    а с ней уже как два пальца)

    Ответы: (2)
  3. kitt а с ней уже как два пальца)

    да это понятно :)

    насчёт оперы - код загрузчика полностью выдрал из шаблона, мой код - в main()

  4. они там совсем с ума посходили со своей рекламой. скоро рекламы будет больше, чем контента.

    новая версия:

    // ==UserScript==
    // @name        rusdtp.ru chat blocker
    // @namespace   rusdtp-chat-blocker
    // @include     http://rusdtp.ru/*
    // @version     1
    // ==/UserScript==
    
    // Main
    function main() {
        
        var earr = document.getElementsByClassName('borderwrap');
        if (earr.length > 0) {
            var e = earr[0];
            if (e.children.length > 2) {
                var child_div = e.children[0];
                var child_script = e.children[1];
                var child_frame = e.children[2];
                if (child_div.nodeName == 'DIV' && child_script.nodeName == 'SCRIPT' && child_frame.nodeName == 'IFRAME') {
                    var child_br = e.children[3];
                    e.removeChild(child_div);
                    e.removeChild(child_script);
                    e.removeChild(child_frame);
                    if (child_br.nodeName == 'BR') e.removeChild(child_br);
                }
            }
        }
    
        var fstr = 'http://rusdtp.chatovod.ru/';
        var earr = document.getElementsByTagName('iframe');
        for (var i = 0; i < earr.length; i++) {
            var e2 = earr[i];
            if (e2.getAttribute('src') && e2.getAttribute('src').substr(0, fstr.length).toLowerCase() == fstr) e2.parentNode.removeChild(e2);
        }
        
        var fstr = 's-8547f282cc28bcb6d4c2fa959d456fdf';
        var earr = document.getElementsByTagName('script');
        for (var i = 0; i < earr.length; i++) {
            var e2 = earr[i];
            if (e2.getAttribute('id') && e2.getAttribute('id').substr(0, fstr.length).toLowerCase() == fstr) {
                var e3 = e2.parentNode;
                e3.parentNode.removeChild(e3);
            }
        }
       
     }
    
    /**
     * Opera reads user.js files as greasemonkey notation with the following results:
     *   - "Not permitted to use window.opera.addEventListener."  Alternate addEvenetListener supported, but with wonky syntax
     *   - DOES NOT WORK: addEventListener('DOMContentLoaded', main, false)
     *   - WORKS: addEventListener('DOMContentLoaded', main(), false)
     *   - Always runs after creating the DOM for the page; does not support // @run-at document-start 
     * Opera reads .js files (NOT ending in user.js) as default with the following results:
     *   - Allows use of window.opera.addEventListener
     *   - WORKS: addEventListener('DOMContentLoaded', main, false)
     *   - DOES NOT WORK: addEventListener('DOMContentLoaded', main(), false)
     *   - "It is usually run before the DOM for the page has been completed," so // @run-at document-start is redundant
     *   - Need to attach main() to an event listener, because DOM may not be ready when script is loaded.
     * More info:
     *   - http://www.opera.com/docs/userjs/using/  (Adding User JavaScripts)
     *   - http://www.opera.com/docs/userjs/examples/  (Greasemonkey scripts)
     */
    if (window.opera) {
    	// Opera's greasemonkey version of addEventListener() breaks try-catch on error, so it must be called first.
    	try {
    		document.addEventListener('DOMContentLoaded', main(), false)
    	}
    	catch(err) {
    		document.addEventListener('DOMContentLoaded', main, false)
    	}
    }
    else {
    	// FF, Chrome
    	document.addEventListener('DOMContentLoaded', main, false);
    }
    
    

или зарегистрируйтесь чтобы ответить!