我正在寻找一种将Chrome中的网页可以使用的字体列入白名单的方法。在Firefox中,我只是禁用允许页面选择他们自己的字体,而不是在内容设置中选择,但Chrome似乎热衷于让网页设计师强迫我们使用难看且常常不可读的字体。< / p>
我不想在时尚中使用* { font-family: sans; }
风格,因为我想保持sans(或serif)和monospace部分,以及网页设计师,因为它们是疯狂的,通常会将它们保留在最后font-family
列表。
我已经完成了我的研究,但仍然无法通过Chrome扩展程序API了解如何做到这一点。
我考虑过拦截CSS文件的请求并在响应中修改它们,但这不可能通过当前的API。
我还可以遍历DOM树,检查每个节点上的CSS并适当地替换它但是它很昂贵。此外,这对于从JavaScript构建内容的页面不起作用。所以我必须使用MutationObserver
s,这太贵了。
如果我能以某种方式读取当前标签使用的CSS文件,我可以使用font-family
样式收集规则,并通过内容脚本将适当的<style>
元素注入页面。但我找不到通过当前API读取这些CSS文件的方法。 (我还必须阅读HTML中嵌入的<style>
规则,但这样做是可行的。
我也可以通过代理进行,但我不确定如何(安全地)应对SSL。
我可以接近fontconfig。它摆脱了Arial但不适用于外部(通常是最丑陋的)CSS字体。
是否可以通过最新的Chrome扩展程序API实现我的目标?怎么样?如果没有,那么解决方法是什么?
我不关心从JavaScript设置的内联样式和样式。我可以忍受那些。我绝大多数页面都关注外部样式表的使用方式。
修改
wOxxOm修改document.styleSheets
的建议就是这样做的方法,我已经做了一个简单的扩展,在所有网站上工作!很遗憾,在当前的Chrome浏览器中,CSSStyleSheet#cssRules
会在页面来源https://code.google.com/p/chromium/issues/detail?id=45786之外加载的样式表中返回null
。 T_T
(我当然会在GitHub上发布扩展程序,并在我对其进行修改后发布链接)。
编辑2
正如wOxxOm所建议的那样,阻止网络字体也是一种选择(尽管我不太理想),甚至还存在良好的开源扩展https://chrome.google.com/webstore/detail/disable-web-fonts/olmabeadgbpmhllgdkemfdnmkngkbkeg。虽然它需要一些白名单的标志性字体。然后可以通过fontconfig管理本地字体。
这个问题可能与难看的网页字体https://code.google.com/p/chromium/issues/detail?id=173207有关。
编辑3
我最终得到了这个好的(和开源)扩展https://chrome.google.com/webstore/detail/font-blocker/knpgaobajhnhgkhhoopjepghknapnikl。它是一个黑名单,但这足以满足我的需求,它适用于标志性字体。据我所知,要实现字体白名单扩展,我必须能够枚举网页加载的所有字体,这在当前的Chrome中似乎是不可能的(请参阅第一次编辑)。