Постоянное обновление cookie вызывает сбой браузера - PullRequest
1 голос
/ 20 апреля 2011

ПРЕДПОСЫЛКИ ПРОБЛЕМЫ:

Обычно я оставляю свой браузер припаркованным на странице фэнтези-бейсбола в режиме реального времени.На следующий день браузер всегда работает медленно и часто падает.

После некоторого расследования я убежден, что это вызвано тем, что сайт обновляет cookie каждую 1 секунду.Если у меня открыто 5 вкладок в домене сайта (что я часто и делаю), он обновляет cookie 5 раз в секунду.

ОТЛАДКА:

Я использую Firefox4.0 с firebug и firecookie.

Файл cookie сеанса называется " fsr.a " и содержит метку времени * nix.Я считаю, что это называется «предвидеть триггер», и это своего рода рекламное ПО.

Вы можете увидеть его в действии здесь (не нужно входить в систему): http://www.cbssports.com/

Кажется, файл cookieбыть установленным этим файлом: http://sports.cbsimg.net/js/phase2-min-v0047.js

ИСПРАВЛЕНИЕ:

Я пробовал Adblocking, но это сломало сайт.Я пытался написать сценарий Greasemonkey, чтобы противостоять ему, но я еще недостаточно хорош с JS.Я, очевидно, не могу заблокировать все куки в домене.

Просто ищу идеи или, возможно, указатель в правильном направлении со скриптом Greasemonkey.

РЕДАКТИРОВАТЬ:

Интересно, могу ли я просто изменить переменную таймера с помощью Greasemonkey, чтобы обновлять cookie реже?

Для справки, я считаю, что это код, отвечающий за " fsr.a"cookie:

var FSR = {
    version: "5.3.0",
    date: "11/11/2009",
    enabled: true,
    files: "http://images.cbssports.com/script/foresee/",
    id: "7alXWMyc064b1ROgR/DloA==",
    sites: [{
        path: /\w+-?\w+\.(com|org|edu|gov|net)/
    }, {
        path: ".",
        domain: "default"
    }]
};

function fsr$setAlive() {
    var a = new Date().getTime();
    document.cookie = "fsr.a=" + a + ";path=/" + ((FSR.site.domain) ? ";domain=" + FSR.site.domain + ";" : ";")
}(function () {
    if (window != window.top) {
        return
    }
    function g(k) {
        if (typeof k == "object") {
            var l = k.constructor.toString().match(/array/i);
            return (l != null)
        }
        return false
    }
    var e = FSR.sites;
    for (var h = 0, a = e.length; h < a; h++) {
        var c;
        if (!g(e[h].path)) {
            e[h].path = [e[h].path]
        }
        for (var j = 0, b = e[h].path.length; j < b; j++) {
            if (c = document.location.href.match(e[h].path[j])) {
                FSR.siteid = h;
                FSR.site = FSR.sites[FSR.siteid];
                if (!FSR.site.domain) {
                    FSR.site.domain = c[0]
                } else {
                    if (FSR.site.domain == "default") {
                        FSR.site.domain = false
                    }
                }
                if (!FSR.site.name) {
                    FSR.site.name = c[0]
                }
                var d = ["files", "js_files", "image_files", "html_files"];
                for (var h = 0, f = d.length; h < f; h++) {
                    if (FSR.site[d[h]]) {
                        FSR[d[h]] = FSR.site[d[h]]
                    }
                }
                break
            }
        }
        if (c) {
            break
        }
    }
    if (!window["fsr$timer"]) {
        fsr$setAlive();
        window["fsr$timer"] = setInterval(fsr$setAlive, 1000)
    }
})();

Альтернативная паста: http://pastebin.com/YrHFCZn1

1 Ответ

0 голосов
/ 20 апреля 2011

Похоже, вам нужно зарегистрироваться и войти на сайт, чтобы установить этот cookie.Я не буду этого делать, поэтому не могу протестировать исправление.

НО, глядя на этот JS, один или несколько из следующих вариантов должны работать от Greasemonkey:

  1. clearInterval (unsafeWindow["fsr$timer"]); unsafeWindow["fsr$timer"] = null;

  2. unsafeWindow["fsr$setAlive"] = function () {}


Хуже до худшего:

  1. Копироватьэтот файл JS на ваш компьютер.
  2. Отредактируйте его, чтобы убить этот таймер.
  3. Используйте adblock, чтобы заблокировать только оригинальный файл JS.
  4. Используйте Greasemonkey, чтобы применить ваш измененный JS.
...