F9y4ng / GreasyFork-Scripts

The open source code of this project is used for userscripts (油猴脚本) for desktop browsers, including Font Rendering (Customized) (字体渲染(自用脚本)- Font Rendering.user.js), and Search Engine Assistant (优雅的搜索引擎助手 - Google & Baidu Switcher.user.js), etc.
https://f9y4ng.github.io/GreasyFork-Scripts/
GNU General Public License v3.0
950 stars 46 forks source link

[新增功能] 增加 web font支持 #232

Closed luckykong closed 1 year ago

luckykong commented 1 year ago

1. 准备工作(确认预先完成的操作)

2. 请描述您所需要的新功能或新建议(清晰简明地描述您的需求是什么)

能否增加 web font支持? 在最新的macOS上,Safari禁止使用默认字体之外的字体(即使本地安装了,也不能用)。 但是似乎依然可以支持woff2字体。比如可以通过样式表,引入如下css,依然能全局更改字体。

@font-face {
    font-family: 'LXGW Bright GB';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('https://*****:8888/LXGWBrightGB-Regular.woff2') format('woff2');
}

:not(i,head *):not([class*='glyph']):not([class*='icon']):not([class*='fa-']):not([class*='vjs-']):not([class*='mu-']){font-family:'LXGW Bright GB',serif;}

在这里,需要注意的是 本地网站需要使用https 链接。 但这个应该很简单吧,对于人均开发者的GitHub,搞个文件分享的docker很简单。

3. 附加信息或屏幕截图(此处添加可帮助表明您意图的附加信息或截图)

F9y4ng commented 1 year ago

web font外部字体的引用所要处理的问题可比你举例的情况要复杂的多。

  1. 首先就是跨域问题,这个基本无解。
  2. 其次就是CROS/CSP策略问题,Safari尤其是严格处理CSP的典范。

基于以上限制,基本不会考虑外部字体了。

Safari浏览器应该可以调用正确安装在MacOS上的字体(CSS 对网页字型的手动设定,除了 webfonts 以外(这里的意思应该是远程在CSP授权内的域,或者本地域的webfont),就只有「sans-serif / serif 」这样的万用牌命令、让 Safari 浏览器与 macOS 的 CoreText 框架自动批配需要的字型),大部分字体未生效基本是:

  1. 安装新字体后在脚本定义中的字体名称有误;
  2. 安装的新字体不支持local属性;
  3. 浏览器不能正确解析新安装的字体。(由于加粗文字所描述的原因)

以上是MacOS用户使用脚本后遇到过的问题。

F9y4ng commented 1 year ago

260 由@abmcar 提供了在Mac本地实现的webfont方式,在Safari上实现的非系统字体调用的方法,如有需求可以尝试。