不断更新cookie会导致浏览器崩溃

时间:2011-04-19 23:49:53

标签: javascript cookies greasemonkey

问题背景:

我通常会将我的浏览器一夜之间停在我的梦幻棒球直播评分页面上。第二天,浏览器总是缓慢而且经常崩溃。

经过一番调查后,我确信这是由网站每1秒更新一次cookie引起的。如果我在网站的域上打开了5个标签(我经常这样做),它会每秒更新cookie 5次。

调试:

我使用Firefox 4.0与firebug和firecookie。

会话cookie名为“ fsr.a ”并包含* nix时间戳。我相信它被称为“预见触发器”,它是某种广告软件。

您可以在此处看到它(无需登录):http://www.cbssports.com/

Cookie似乎是由此文件设置的:http://sports.cbsimg.net/js/phase2-min-v0047.js

THE FIX:

我尝试过Adblocking它,但这打破了网站。我尝试编写一个Greasemonkey脚本来对抗它,但我对JS还不够好。我显然无法阻止域中的所有cookie。

只需使用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 :(得分:0)

您似乎需要注册并登录该网站才能设置该Cookie。我不会这样做,所以我无法测试修复。

但是,看看那个JS,下面的一个或多个应该可以使用Greasemonkey:

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

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


  3. 更糟糕的是:

    1. 将该JS文件复制到您的电脑上。
    2. 编辑它,杀死那个计时器。
    3. 使用adblock仅阻止原始JS文件。
    4. 使用Greasemonkey应用修改过的JS。