WebSuckIt!

Ugh, these Webs these Sockets... Nobody need them.

La data de 16-08-2016. Vezi ultima versiune.

// ==UserScript==
// @name         WebSuckIt!
// @namespace    lainscripts_websuckit
// @version      2.14
// @description  Ugh, these Webs these Sockets... Nobody need them.
// @author       lainverse
// @match        *://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==
(function() {
    'use strict';
    var to_block = [
        '||bgrndi.com^',
        '||brokeloy.com^',
        '||dreadfula.ru^',
        '||et-code.ru^',
        '||gocdn.ru^',
        '||hghit.com^',
        '||kuveres.com^',
        '||lepubs.com^',
        '||mail.ru^',
        '||marketgid.com^',
        '||mxtads.com^',
        '||psma01.com^',
        '||psma02.com^',
        '||psma03.com^',
        '||recreativ.ru^',
        '||regpole.com^',
        '||torvind.com^',
        '||trafmag.com^',
        '||xxuhter.ru^'
    ];
    var masks = [];
    to_block.forEach(function(m){
        masks.push(new RegExp(
            m.replace(/([\\\/\[\].*+?(){}$])/g, '\\$1')
            .replace(/\^(?!$)/g,'\\.?[^\\w%._-]')
            .replace(/\^$/,'\\.?([^\\w%._-]|$)')
            .replace(/^\|\|/,'^wss?:\\/+([^\/.]+\\.)*'),
            'i'));
    });
    var ws = window.WebSocket;
    function wsGetter(tgt, nm) {
        console.log('[WSI] Registered call to property "', nm, '"');
        var closingFunctions = ['close', 'send'];
        try {
            if (typeof ws.prototype[nm] === 'function') {
                if (closingFunctions.indexOf(nm) > -1) {
                    tgt.readyState = ws.CLOSED;
                }
                return function(){};
            }
            if (typeof ws.prototype[nm] === 'number') {
                return ws[nm];
            }
        } catch(e) {}
        return tgt[nm];
    }
    window.WebSocket = new Proxy(ws, {
        construct: function(e,i) {
            var url = i[0];
            console.log('[WSI] Opening socket on', url, '…');
            var j = masks.length;
            while(j--) {
                if (masks[j].test(url)) {
                    console.log("[WSI] Blocked.");
                    return new Proxy({url: url, readyState: ws.OPEN}, {
                        get: wsGetter
                    });
                }
            }
            return new e(i[0],i[1]);
        }
    });
})();