Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№122-11-2015 19:45:00

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Block External scripts

Привтствую.
Для бравзера Опера [opera] (да смилостивятся Боги над загубленным праведником) есть множество блокировщиков скриптов, годных и удобных. Есть минимум три плугина. По убыванию это:
1. ScriptWeeder - абсолютно то что нужно. лучший и самый удобный из всех подобных плугов для всех хромо-фоксов. Установки для домена-урл-глобально, белый список(не черный(!) что есть правильно) Аналогов не имеет ваапче :( (Для хрома был/есть плуг подобный, но он похоже уже тоже умер ScriptSafe )
2. ExternalScript  -  оочень годный плуг, но хуже первого по удобству исп-я.
3. И скрипт-версия от Lex1  О ней собсна и будет вопрос к знатокам: А не будет ли любезен, многоуважаемый All, заделать(переписать) этот мего-нужный скрипт для работы в FF :blush:
Сам скрипт выглядит так:

Block-external-scripts.js (160 строк)

Выделить код

Код:

// ==UserScript==
// @name Block external scripts
// @author Lex1
// @version 1.3.11
// @description Block external scripts and document.write (usually used for js-ads).
// @include http://*
// @exclude http://*youtube.com/*
// @exclude http://*metacafe.com/*
// @exclude http://vimeo.com/*
// @exclude http://www.piter.fm/*
// @exclude http://*lastfm.ru/*
// @exclude http://*facebook.com/*
// @exclude http://*vk.com/*
// @exclude http://*myspace.com/*
// @exclude http://twitter.com/*
// @exclude http://*flickr.com/*
// @exclude http://*deviantart.com/*
// @exclude http://*ebay.com/*
// @exclude http://*wikipedia.org/*
// @exclude http://*yahoo.com/*
// @exclude http://*.ya.ru/*
// @exclude http://*hotmail.com/*
// @exclude http://*imageshack.us*
// @exclude http://*britannica.com/*
// @exclude http://*bbc.co.uk/*
// @exclude http://*cnn.com/*
// @exclude http://*opera.com/*
// @exclude http://*eurosport.ru/*
// @exclude http://*newegg.com/*
// @exclude http://*livegames.ru/*
// @exclude http://picasaweb.google.com/*
// @exclude http://playset.ru/*
// @exclude http://molotok.ru/*
// @exclude http://kinozal.tv/*
// @exclude http://tvshack.net/*
// @exclude http://megashare.by/*
// @exclude http://anonym.to/*
// @exclude http://www.macromedia.com/*
// @exclude http://example.com/*
// ==/UserScript==

(function(){
    var skip = '^data:|^http://ajax.googleapis.com/|^http://www.google.com/jsapi|^http://maps.google.com/|^http://www.google.com/recaptcha/'
    + '|^http://[0-9a-z-]+.gstatic.com/|^http://[0-9a-z-]+.appspot.com/|^http://yui.yahooapis.com/|^http://script.aculo.us/'
    + '|^http://ipinfodb.com/|^http://api.recaptcha.net/|^http://rutube.ru/|^http://css.yandex.net/|^http://api-maps.yandex.ru/'
    + '|^http://s\\d+.addthis.com/js/|^http://s\\d+.ucoz.net/src/u.js|^http://[0-9a-z-]+.imgsmail.ru/|^http://62.105.135.100/|^https?://auth.tbn.ru'
    + '|swfobject.js$|show_afs_search.js$|chart.js$|ajax.js$|widgets.js$|common.js$|AC_RunActiveContent.js$|jquery[0-9a-z.-]*.js$';

    var reSkip = new RegExp(skip.replace(/\/|\.(?=\w)/g, '\\$&'), 'i');
    var noreload = true, blocked = '', prefix = 'ujs_block_ext_scripts';

    var getValue = function(name){
        if(window.localStorage){
            return window.localStorage.getItem(name) || '';
        }
        else{
            var eq = name+'=', ca = document.cookie.split(';');
            for(var i = ca.length; i--;){
                var c = ca[i];
                while(c.charAt(0) == ' ')c = c.slice(1);
                if(c.indexOf(eq) == 0)return unescape(c.slice(eq.length));
            };
            return '';
        }
    };
    var setValue = function(name, value, del){
        if(window.localStorage){
            if(del){window.localStorage.removeItem(name)}else{window.localStorage.setItem(name, value)};
        }
        else{
            if(document.cookie.split(';').length < 30 && document.cookie.length-escape(getValue(name)).length+escape(value).length < 4000){
                var date = new Date();
                date.setTime(date.getTime()+((del ? -1 : 10*365)*24*60*60*1000));
                document.cookie = name+'='+escape(value)+'; expires='+date.toGMTString()+'; path=/';
            }
            else{
                alert('Cookies are full!');
            }
        }
    };
    var getTLD = function(domain, full){
        if(!domain)return '';
        var r = domain.match(/^((?:\d{1,3}\.){3})\d{1,3}$/); if(r)return r[1] + '0';
        var a = domain.split('.'), l = a.length; if(l < 2)return domain;
        return full ? a[l - 2] + '.' + a[l - 1] : a[(l > 2 && /^(co|com|net|org|edu|gov|mil|int)$/i.test(a[l - 2])) ? l - 3 : l - 2];
    };

    var createButton = function(){
        var enabled = getValue(prefix) != 'disabled';
        if(enabled && noreload && !blocked)return;
        var ru = window.navigator.language == 'ru';
        var lng_u = ru ? '\u0420\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C: ' : 'Unblock: ';
        var lng_d = ru ? '\u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E' : 'Blocking disabled';
        var lng_b = ru ? '\u0417\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D' : 'Blocked';
        var lng_s = ru ? '\u0441\u043A\u0440\u0438\u043F\u0442' : 'script';
        var lng_r = ru ? '\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443' : 'This page must be reloaded';
        var count = blocked.split('; ').length;
        if(count > 1){
            if(ru){lng_b += '\u043E'; lng_s += (count > 4) ? '\u043E\u0432' : '\u0430'}else{lng_s += 's'};
        };
        var txt = noreload ? (enabled ? lng_b + ' ' + count + ' ' + lng_s : lng_d) : lng_r;
        var title = (enabled && noreload) ? lng_u + blocked : '';

        var b = document.getElementById(prefix);
        if(b){b.value = txt; b.title = title; return};
        b = document.createElement('input');
        b.type = 'button';
        b.value = txt;
        b.title = title;
        b.id = prefix;
        b.setAttribute('style', 'display:inline-block;position:fixed;visibility:hidden;right:0;bottom:0;width:auto;height:auto;margin:0;padding:1px 8px;font:12px Times New Roman;z-index:9999;cursor:pointer;');
        b.addEventListener('click', function(e){
            if(e.ctrlKey && !e.shiftKey && !e.altKey){alert(lng_b + ':\n\n' + blocked.replace(/; /g, '\n')); return};
            if(noreload){
                if(enabled){setValue(prefix, 'disabled')}else{setValue(prefix, 'enabled', true)};
                this.value = lng_r;
                this.style.width = 'auto';
                noreload = false;
            }
            else{
                window.location.reload(false);
            }
        }, false);
        b.addEventListener('mouseout', function(){this.setAttribute('style', 'visibility:hidden;'); this.parentNode.removeChild(this)}, false);
        (document.body || document.documentElement).appendChild(b);
        var maxWidth = b.offsetWidth;
        b.style.width = 0;
        b.style.visibility = 'visible';
        var timer = window.setInterval(function(){
            var width = parseInt(b.style.width || maxWidth) + 20;
            if(width > maxWidth){clearTimeout(timer); width = maxWidth};
            b.style.width = width + 'px';
        }, 10);
    };

    if(getValue(prefix) != 'disabled'){
        document.write = function(w){
            return function(s){
                if(/<\/?(script|iframe|embed|object)/i.test(s)){
                    blocked = /(^.*document\.write\{)(\d+)(\}.*$)/.test(blocked) ? RegExp.$1 + (parseInt(RegExp.$2) + 1) + RegExp.$3 : (blocked ? blocked + '; ' : '') + 'document.write{1}';
                    // if(window.opera)window.opera.postError('Blocked: ' + s);
                }
                else{
                    w.call(this, s);
                }
            };
        }(document.write);

        window.addEventListener('beforescriptexecute', function(e){
            var s = e.element.src; if(!s || reSkip.test(s))return;
            var h = content.document.domain, n = !/\.(com|[a-z]{2})$/.test(h);
            if(getTLD(/^https?:\/\/([^\/]+@)?([^:\/]+)/i.test(s) ? RegExp.$2 : h, n) != getTLD(h, n)){
                e.preventDefault();
                if(blocked.indexOf(s) == -1)blocked += blocked ? '; ' + s : s;
                // if(window.opera)window.opera.postError('On <' + h + '> blocked external script: ' + s);
            }
        }, false);
    };
    document.addEventListener('mousemove', function(e){
        var docEle = (document.compatMode == 'CSS1Compat' && window.postMessage) ? document.documentElement : document.body;
        if(docEle && docEle.clientHeight - e.clientY < 20 && docEle.clientWidth - e.clientX < 40)createButton();
    }, false);
})();


Эффекты у него следующие(визуальные) при движении мыша в правый-нижний угол является кнопка со счетчиком заблокированных скриптов
fff56ce3b6ce859a9977f4876533f284.jpeg
Просто ЛКМ - перегружает страницу с выкл. блокировки.
CTRL+ЛКМ на этой кнопке вызывает окно со списком адресов скриптов заблокированных. Это полезно для вписывания разрешений-исключений, когда заблочилось нечто полезное.
8abbe4ec50735e973654a62ec2d90485.jpeg
... так вот, не будет ли любезен многоуважаемый All посмотреть, поковырять :rock:

скрытый текст
зы. Во избежание повторений и холиваров: этиваши NoScript фигня полная. Знаю. Ставил. Убрал навсегда. Куча лишнего + замедление бравзера взамен ускорения.

Отсутствует

 

№222-11-2015 20:16:50

FMRUser
Участник
 
Группа: Members
Зарегистрирован: 01-03-2014
Сообщений: 814
UA: Firefox 42.0
Веб-сайт

Re: Block External scripts

jars

Может так проще будет (AdBlock)?

Выделить код

Код:

$third-party,script,domain=site.ru|site.ru|site.ru|site.ru

Отсутствует

 

№322-11-2015 20:36:44

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Block External scripts

ну кагбе да и наверное проще... только вот адблоком не пользуюсь.
Silent Block ~260 правил на регулярках режут все, + по мелочи через CSS другой скрипт Lex1(универсальный) AdBlock+.js
зы. Не спросишь - не узнаешь, так ведь ;)

Отсутствует

 

№422-11-2015 20:56:47

nabigator
Забанен
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 72
UA: Firefox 42.0

Re: Block External scripts

Преимущества перед NoScript?

Отсутствует

 

№522-11-2015 21:47:35

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Block External scripts

Размер.
-один плугин
Ничего лишнего.
соотв. быстрота исполнения.

Отсутствует

 

№622-11-2015 21:58:00

nabigator
Забанен
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 72
UA: Firefox 42.0

Re: Block External scripts

jars пишет

соотв. быстрота исполнения.

Да все равно фигня js.

Я вот думал, что если бы была возможность на уровне движка (?) отключать сторонние скрипты, без всякого левого джаваскрипта - вот это была бы "быстрота исполнения и ничего лишнего" :)

Отсутствует

 

№722-11-2015 22:40:47

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Block External scripts

Ну дык!1!11 Но того делать низзя, ибо абизянки пугаются и какаются, ежели чего не так загрузилось или случайно она сама галочку в настройках поставила и ... забыла. И тогда криком-кричит-на-форумы-строчит про то что все кругом виноваты и мазилла плохая и глючная, Опера гуано, а хром тормозит...

nabigator пишет

Да все равно js.

ну как жеж ?! Скриптег на 6,9кB или плуг на 550kB который становится по-сути еще одним фильтром, еще одна инстанция разбирающая контент. Потому и гутарю, пробовал его и заместо увеличения производительности(что происходит в Опере при исп. ScriptWeeder или этого скрипта) - с NoScript-oм происходит затормаживание. Еще хуже чем без него.  А его ABE это вообще ахтунг!
... вот и хотелось бы его того, ... прикрутить и в FF.

Отсутствует

 

№822-11-2015 22:55:57

nabigator
Забанен
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 72
UA: Firefox 42.0

Re: Block External scripts

jars пишет

ну как жеж ?! Скриптег на 6,9кB или плуг на 550kB ..

Но концептуально это одинаково хреновые решения. Не кошерно, когда один js управляет другими js - нужен API, а например правила обработки/выполнения я может вообще на Lua хочу писать. Только это из области фантастики..

Кстати, никакого заметного замедления с NoScript я не ощущаю, а на миллисекунды откровенно плевать - ничего не решает.

Отредактировано nabigator (23-11-2015 04:01:24)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia
Язык отображения форума: [Русский] [English]