用UserStyle替换JavaScript函数

时间:2010-09-06 17:01:43

标签: javascript html userscripts

我正在修改Instapaper的UserStyle。自编写原始UserStyle以来,Instapaper在其标题中添加了许多JavaScript函数,这些函数控制页面的宽度和使用的字体。

他们是:

        function loadDefaults()
        {
            _fontSize = 16;
            _fontFamily = "G";
            _lineHeight = 1.5;
            _width = 500;
        }

        function loadFont()
        {
            var cookieData = readCookie("fontMetrics");
            if (cookieData && (cookieData = cookieData.split("_")) && cookieData.length == 4) {
                _fontSize = parseInt(cookieData[0]);
                _fontFamily = cookieData[1];
                _lineHeight = parseFloat(cookieData[2]);
                _width = parseInt(cookieData[3]);
            } else loadDefaults();

            applyFont();
        }

如何修改UserScript以覆盖这些函数,因为它们在加载后执行?

到目前为止,我已经尝试过用空白覆盖替换这些函数,但它没有用。由于我的脚本首先执行,有没有什么方法可以删除标题中的整个JavaScript块?

1 个答案:

答案 0 :(得分:1)

首先,用户脚本适用于javascript而非用户类型。其次,您希望在用户脚本中使用unsafeWindow,以覆盖网页在window范围内定义的函数。

所以你的代码看起来像是:

    unsafeWindow.loadDefaults = function loadDefaults()
    {
        _fontSize = 16;
        _fontFamily = "G";
        _lineHeight = 1.5;
        _width = 500;
    }

    unsafeWindow.loadFont = function loadFont()
    {
        var cookieData = readCookie("fontMetrics");
        if (cookieData && (cookieData = cookieData.split("_")) && cookieData.length == 4) {
            _fontSize = parseInt(cookieData[0]);
            _fontFamily = cookieData[1];
            _lineHeight = parseFloat(cookieData[2]);
            _width = parseInt(cookieData[3]);
        } else loadDefaults();

        applyFont();
    }