Jak zatrzymać pobieranie pliku gif przez chrome / firefox?

8

Gdy odwiedzam dowolną stronę zawierającą animowane strony gif(Google+, 9gag itp.), Wszystkie one zaczynają się ładować. Moja przepustowość jest ograniczona i nie chcę ich pobierać, chyba że naprawdę chcę je wyświetlić. Widziałem niektóre wtyczki, które po prostu zatrzymują animację, ale sam obraz i tak jest pobierany . 9gag.com początkowo miał tę funkcję, która po prostu pokazywała statyczny obraz (jeśli jest to animowany gif) i zaczęła pobieranie dopiero po kliknięciu na niego (teraz go usunęli).

Czy jest jakaś wtyczka, która może zatrzymać pobieranie gif? Czy muszę napisać rozszerzenie? Jakieś sugestie?

mshsayem
źródło
Zakładam, że nie chcesz blokować wszystkich zdjęć, prawda? Problem polega na tym, że blokowanie wszystkich .gifplików byłoby wystarczająco proste , ale jeśli chcesz blokować tylko .gif pliki animowane , rozszerzenie nadal musiałoby pobierać .gifpliki osadzone na stronie, aby ustalić, czy są one animowane, czy nie. Najlepszym rozwiązaniem jest zablokowanie wszystkich plików GIF. (Pomyślałem tylko o pomyśle, który mógłby zadziałać, ale nie sądzę, że został on zrealizowany. Jeśli mam trochę czasu, spróbuję coś wymyślić, na wypadek, gdyby nikt nie wiedział o istniejącym rozwiązaniu.)
Synetech
Zablokuje wszystkie gif. Wszystkie pozostałe obrazy powinny być widoczne. Poszukałem google, ale wygląda na to, że wszyscy martwią się rozproszeniem animacji. Większość wtyczek po prostu zatrzymuje animację. Mógłbym napisać rozszerzenie chrome; ale zastanawiałem się tylko, czy istnieje jakieś inne rozwiązanie.
mshsayem,
1
Ponieważ animowane pliki GIF mają często kilka megabajtów, zgadzam się, że mogą być dość uciążliwe, szczególnie gdy jest ich kilka na stronie (możesz praktycznie utworzyć DoS z stroną załadowaną gigantycznymi animowanymi plikami GIF). Kilka rozszerzeń blokujących obrazy, które mogę znaleźć, jest typem blokujących wszystkie obrazy. Istnieje jednak Safe Blocker, który ma opcjonalną funkcję blokowania GIF. W tej chwili nie mogę tego przetestować, ale wygląda obiecująco.
Synetech
Właśnie wypróbowałem Safe Blocker . To po prostu daje stronę proxy, która zdecydowanie nie jest tym, czego chcę.
mshsayem
Ach, szkoda. Oni nie wspomnieć, że , ale to wyjaśnić przegląd mówiąc to powoli . Dziwne, że to jeszcze nie zostało rozwiązane. Być może dzieje się tak, ponieważ strony pełne animowanych plików GIF są wciąż dość nowe, więc nie zostało jeszcze rozwiązane. Wypróbuj ten skrypt użytkownika . Nie działał w starej wersji Chromium, ale może działać w nowszych wersjach Chrome.
Synetech

Odpowiedzi:

1

Nie mam jeszcze odpowiedniego rozszerzenia / wtyczki. Próbowałem użyć następującego skryptu użytkownika z TamperMonkey w Chrome. Działa świetnie. Blokowanie wszystkich gifów (w tym gifów ajax) na stronie 9gag.com. Z jakiegoś powodu ajax gify w Google + nie są blokowane (sprawdzanie tego). Ogromne podziękowania dla Synetec za jego pomoc, wysiłek i kod. Oto skrypt użytkownika (większość skryptów jest kopiowana z skryptu użytkownika Synetec ):

// ==UserScript==
// @name       gifBlock
// @namespace  http://i.have.no.homepage/
// @version    0.1
// @description  Stops downloading gif images (including ajax gifs) in 9gag.com (or any page if you just fix the @match rule)
// @match      http://*.9gag.com
// @copyright  2012+, Nobody
// ==/UserScript==

function tamperMonkeyWrap()
{   
    function log(m)
    {
        console.log(m);
    }
    function jQWrap($)
    {
        log("Extension execution begins...");

        function blockGifs()
        {        
            $('img').each(function() {
                var $img = $(this),
                    src = $img.attr('src'),
                    w = $img.width(),
                    h = $img.height(),
                    cursor = $img.css('cursor'),
                    parts = src.split('.'),
                    ext = parts[parts.length-1];

                if ($.trim(ext.toLowerCase()) != "gif")
                    return;            

                $img.attr('data-imgurl', src);
                $img.data('cursor', cursor);
                $img.css('cursor', 'pointer');
                $img.addClass('gif-blocked');                
                h = h > 100? h : 100;
                $img.attr('src', '//ipsumimage.appspot.com/'+w+'x'+h+'?l=Gif (Click)');
            }); 
        }

        function interceptAjax () {
            $('body').ajaxComplete(
                function (event, requestData)
                {
                    log("Blocking GIF [Ajax] ...");                
                    blockGifs();
                }
            );
        }

        $(document).ready(function() {
            log("Blocking GIF [Ready]....");
            blockGifs();
            interceptAjax();        
            $(document).on('click', 'img.gif-blocked', function(ev) {            
                var $img = $(this),
                    url = $img.attr('data-imgurl'),
                    cursor = $img.data('cursor');

                $img.attr('src', url);
                $img.css('cursor', cursor);
                $img.removeClass('gif-blocked');
                ev.preventDefault();
                return false;
            });  
        });

        log("Document is not ready yet. trying block just in case it takes time to be _ready_ (google+).");
        blockGifs();
    }

    if (window.jQuery == undefined)
    {
        log("Loading jQuery...");
        var scriptTag = document.createElement('script');
        scriptTag.src = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
        scriptTag.onload = function(){
            log("jQuery loaded.");
            window.jQuery = jQuery; 
            jQWrap(jQuery);
        };
        document.getElementsByTagName('head')[0].appendChild(scriptTag);
    }
    else
    {
        log("jQuery already included in the page");
        jQWrap(window.jQuery);
    }   
}

var scriptTag = document.createElement('script');
scriptTag.text = '(' + tamperMonkeyWrap.toString() + ')();';
document.getElementsByTagName('head')[0].appendChild(scriptTag);

Teraz:

  1. Zainstaluj TamperMonkey
  2. Przejdź do panelu
  3. Kliknij „nowy skrypt”
  4. Wklej powyższy kod
  5. Zapisz i sprawdź, czy to działa. (działa teraz tylko na 9gag.com. Możesz jednak zmienić @matchdyrektywę, aby pasowała do dowolnej witryny. Użyj, @match http://*/*aby działała na wszystkich stronach (http). Zmień na httpsna dowolną bezpieczną stronę http, np. google +)
mshsayem
źródło
Szkoda, że ​​sporo użytkowników zaczęło przesyłać pliki GIF z rozszerzeniem .jpg. Tak zwane animowane pliki JPEG . Prawdopodobnie ten idiotyzm stwierdził, ponieważ niektóre strony nie zezwalają na przesyłanie plików GIF, ale sprawdzają tylko rozszerzenie, aby określić typ pliku. W ten sam sposób to robisz. Domyślam się, że if ($.trim(ext.toLowerCase()) != "gif")złapie tylko połowę GIF-ów.
Martin
0

Kilka fajnych dodatków do Firefoxa:

adblock - inteligentne blokowanie reklam

flashblock - cały flash zostanie zablokowany, dopóki go nie klikniesz

imgblock - blokuje WSZYSTKIE obrazy, wszędzie (można tymczasowo wyłączyć jednym kliknięciem)

ghostery - blokuje portale społecznościowe (mogą one wygenerować więcej niż sto kilobajtów na stronę!)

peterh - Przywróć Monikę
źródło
Wiem o tym. Ale nie robią tego, co chcę. tj. zatrzymaj pobieranie (nie tylko uczyń go niewidocznym) po prostu obrazy gif.
mshsayem,