阻止字体下载

阻止字体下载

由于某种原因,某些字体在我的电脑上看起来很糟糕——有些线条是双倍粗的,有“墨迹”斑点,等等。它们几乎不可读,而且肯定没有按预期显示。以下是设计字体的示例:

原始字体

并在我的屏幕上显示:

我的看法

(抱歉,手头没有更好的例子)。

一方面,最好能诊断出问题本身。(Vista 机器,问题发生在 Firefox 和 Chrome 中,但不发生在 IE 中,等等)但我认为更实用的权宜之计是阻止下载 webfonts。有办法吗?

我并不关心这种情况何时发生:停止 CSS 中的某些 @ 规则、禁止显示自定义字体、在 TCP 或 HTTP 级别阻止它。我不想对 fonts.googleapis.com 和 themes.googleusercontent.com 进行 DNS 阻止,因为这也会阻止不相关的好东西。

答案1

如果您有代理服务器,您可以在 http 级别阻止它。然后您应该能够告诉它阻止与字体关联的 Content-Type。现在我不知道内容类型,但应该很容易找到它Fiddler

另一个稍微相关的说明。我的电脑上有一种字体的行为与此类似。这是由 Windows 中的字体和 Clear Type 中的错误引起的。如果我关闭 Clear Type,字体看起来会很好。或者字体看起来和没有 Clear Type 时一样好。所以也许你可以先试试?

我已经检查过了,你也许可以使用以下方法阻止字体Fiddler。通过更改自定义规则,您可能能够做到这一点。看看它是否有效可能会很有用。尝试将此代码添加到 OnBeforeResponse 函数中的 CustomRules.js。

if(oSession.oResponse.headers.ExistsAndContains("Content-Type", "font/woff")) {
            oSession.oRequest.FailSession(404, "Blocked", "Fiddler blocked font file");
}

答案2

今天我遇到了这个要求,因为 Google 似乎已经开始在搜索结果标题中推出“Google Sans”。就我而言,字体(我认为)显示符合预期,但尝试阅读该特定字体而不是传统字体(如 Arial)的文本绝对让我头疼。

理论上我可以使用 CSS 用户样式,但这种方法意味着要为引用字体的每条规则编写覆盖,并在网站的 CSS 发生变化时保持更新。(此外,就 Google 而言,他们的许多类名等似乎都是随机的 - 可能是压缩器或类似工具的副作用,而不是刻意选择,但绝对让人感觉非常不方便访问。)

无论如何,经过一番努力,我能够编写一个 GreaseMonkey 脚本来完成这项工作:

// ==UserScript==
// @name        Block Fonts
// @namespace   mynamespace
// @version     1
// @grant       none
// ==/UserScript==
function BlockFonts(blockedFonts) {
    var blockFont = {};
    for (var i in blockedFonts)
    {
        blockFont[blockedFonts[i]] = true;
    }
    var sheets = document.styleSheets;
    for (var i in sheets) {
        try {
            var rules = sheets[i].rules || sheets[i].cssRules;
            for (var r in rules) {
                if (rules[r].style && rules[r].style.fontFamily)
                {
                    var items = rules[r].style.fontFamily.split(',');
                    var newItems = [];
                    for (var n in items)
                    {
                        var font = items[n].replaceAll('"', '');
                        if (font in blockFont)
                        {
                            console.log('Blocked "'+font+'"');
                        }
                        else
                        {
                            newItems.push(items[n]);
                        }
                    }
                    rules[r].style.fontFamily = newItems.join(',');
                }
            }
        } catch (e) {
            console.log(e);
        }
    }
}

BlockFonts(['Google Sans']);

要根据您的使用情况进行定制,只需['Google Sans']最后将其更改为包含要阻止的字体名称的数组(例如['Google Sans', 'Example Font 2'])——我写它是为了阻止任意数量的字体,即使在我的用例中只需要一种字体。

try-catch 是针对每个工作表的,因为我在控制台中执行此操作时,某些工作表会收到“SecurityError”,这阻止了以后的工作表被扫描。当作为 GreaseMonkey 脚本运行时不会发生这种情况(至少在撰写本文时),但我认为值得保留它。

在 Pale Moon 29.1.1 中进行了测试,PM GreaseMonkey 叉 3.31.4

相关内容