Firefox 扩展自定义字体

2024-01-08

我正在使用 Firefox Add-on SDK 创建扩展并执行 PageMod。这段代码位于main.js.

...
exports.main = function() {
  var pageMod = require("sdk/page-mod");

  pageMod.PageMod({
    include: "*",
    contentScriptWhen: 'end',
    contentStyleFile: [
      self.data.url("css/style.css"),
      self.data.url("css/font-awesome.css")
    ],
    contentScriptFile: [
      self.data.url("js/jquery.js"),
      self.data.url("js/spritzify.js")
    ],
    onAttach: function onAttach(worker) {
      worker.postMessage("Hello World");
    }
  });
};
...

my css/font-awesome.css尽管字体文件没有加载到页面中。

@font-face {
  font-family: 'FontAwesome';
  src: url('fonts/fontawesome-webfont.eot?v=4.1.0');
  src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

字体文件夹位于我的扩展的数据文件夹中。有人可以解释一下如何使用 PageMod 将自定义字体加载到网页中吗?


如果您查看控制台消息,您应该看到以下内容:

可下载字体:不允许下载(字体系列:“FontAwesome”样式:正常粗细:正常拉伸:正常src索引:0):不允许错误的URI或跨站点访问

不幸的是,网络字体受同源政策的约束,只能通过以下方式放宽CORS https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。这意味着无法从扩展 URL 加载字体文件,因为那里无法使用 CORS。

这给您留下了两个选择:

  1. 您可以将字体托管在具有正确 CORS 标头的 Web 服务器上,或者使用某些现有的字体托管。
  2. 您将字体编码为数据:URI http://en.wikipedia.org/wiki/Data_URI_scheme。有许多 data: URI 生成器可用,例如this one http://dopiaza.org/tools/datauri/index.php.

恕我直言,第二种解决方案是更好的解决方案,因为您的扩展不会依赖于任何 Web 服务器,尤其是第三方 Web 服务器。此外,它不会引入字体下载造成的任何延迟。我尝试了一下,效果很好:

@font-face {
  font-family: 'FontAwesome';
  src: url('data:application/octet-stream;base64,d09GRgAB...') format('woff');
  font-weight: normal;
  font-style: normal;
} 

旁注:您不需要 Firefox 扩展中的完全向后兼容性,拥有 WOFF 格式的字体就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firefox 扩展自定义字体 的相关文章

随机推荐

  • 是否可以在 R 中使用 sendmail 抄送收件人?

    我想从 R 向多个收件人发送一封邮件 我可以使用sendmail功能 但当收件人收到电子邮件时 他们只能看到自己的电子邮件地址to场地 看起来 sendmail 内部循环并向每个收件人发送单独的电子邮件 这不是真的carbon copy 重
  • malloc 对内存对齐做出哪些保证?

    我遇到了以下代码 int main char A char malloc 20 char B char malloc 10 char C char malloc 10 printf n d A printf t d B printf t d
  • 设置Python的collections.defaultdict的默认字符串值

    我正在使用 Python 3 2 3 并且想要更改默认返回的字符串值 from collections import defaultdict d defaultdict str d NonExistent 返回的值为 我怎样才能改变这个 以
  • 如何在 Roblox 中打开和关闭 gui?

    我正在 Roblox 中制作游戏 但遇到了错误 我正在尝试制作在游戏中打开商店的 GUI 按钮 但它打不开 我试图使按钮不可见而商店可见 一切工作正常 但图形用户界面不会变得可见 不可见 它表示 GUI 在属性中的可见性发生了变化 但在游戏
  • Kong:docker-compose [PostgreSQL错误]无法检索PostgreSQL server_version_num:未提供主机或服务,或未知

    我正在尝试学习如何使用Kong https konghq com 对于我的 API 服务器 但遇到了错误 kong 1 nginx error init by lua error usr local share lua 5 1 kong i
  • 存储库上的 Ninject WCF 垃圾收集

    我正在使用带有 WCF 扩展的 Ninject 2 2 在我的大多数服务中 存储库都会快速实例化 发布 但是 我的一项服务执行长时间运行的操作 2 3 分钟 如果我观察 w3wp 进程 我可以看到使用 SQL 建立的 TCP IP 连接 并
  • MVC4 使用什么加密?

    我们如何找出 MVC4 使用的加密方式 我注意到有一个 SALT 选项 但这似乎也没有在WebSecurity 模块 我想知道使用的标准以及是否可以轻松升级到最新的 SHA 根据下面的链接Default Hashing Algorithm
  • 广告激活有什么作用?

    In an answer https stackoverflow com a 8129994 357313 我注意到 Align with spaces only defadvice align regexp around align re
  • 如何在 Tensorflow.js 中获取预测值

    我正在尝试将预测系统构建到 MERN 应用程序中 我是 Tensorflow 新手 刚刚关注this https codelabs developers google com codelabs tfjs training regressio
  • 如何使用 Gradle 将 romainguy 的 ViewServer 包含在 Android Studio 中?

    我正在尝试使用 RomainGuy 的 ViewServer https github com romainguy ViewServer https github com romainguy ViewServer 我的 Android St
  • C 中的 Boost 类似库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您能否推荐我可以在 C 环境中使用的同行评审库 例如 Boost for C 提供哈希 线程 进程间通
  • 将数据从 Microsoft SQL Server 读取到 R 中

    是否可以从 R 接口读取 MS SQL Server 中存储的数据 如果是的话 如果有人能告诉我如何做到这一点 我也会很感激 尝试过RODBC已经打包了吗 http cran r project org web packages RODBC
  • MVC 授权属性拒绝

    我正在使用Authorize 属性来保护我的控制器 操作 并且只想向未经身份验证的用户显示登录操作 或者换句话说 拒绝对经过身份验证的用户的访问 我在网上找不到任何涉及拒绝权限或允许负面权限 即 LoggedIn 的内容 有人可以指出我正确
  • 让 ORMLite 对结构使用正确的序列化

    tl dr 我正在结构上注册序列化器和反序列化器 序列化器未被调用 但解串器被调用 我怎样才能解决这个问题 它适用于引用类型 并且执行JsConfig
  • 如何在 C# 中进行非阻塞套接字调用来确定连接状态?

    Socket 上 Connected 属性的 MSDN 文档说明如下 Connected 属性的值 反映连接的状态 截至最近一次操作 如果 你需要确定当前 连接状态 进行 非阻塞 零字节发送调用 如果 调用成功返回或 抛出 WAEWOULD
  • CefSharp 中的可拖动无边框窗口

    我想在某些 HTML 元素上实现带有拖动逻辑的无边框窗口 我找到了一些工作示例 例如适用于 Chrome 的无框窗口 https chrome google com webstore detail frameless window samp
  • iOS6 中的 CoreMIDI/PGMidi 虚拟 midi 错误

    面临两个错误 此代码在 iOS 4 和 5 中有效 但更新到 6 后 它不起作用 我发现了以下内容 但不知道如何在代码中修复它 从 iOS 6 开始 应用程序需要在其 UIBackgroundModes 中拥有音频键才能使用 CoreMID
  • Mvvm交叉绑定

    我尝试将小部件绑定到视图模型属性 但出现异常 MvxBind Warning 14 76 Failed to create target binding for binding Signature for Order ClientSigna
  • 创建 WCF 消息的缓冲副本

    我在消息检查器中有以下代码来检查响应正文 我知道 WCF 消息只能读取一次 因此我首先创建一个副本 但使用以下代码我仍然收到错误 此消息无法支持该操作 因为它已被读取 我错过了什么吗 MessageBuffer buffer message
  • Firefox 扩展自定义字体

    我正在使用 Firefox Add on SDK 创建扩展并执行 PageMod 这段代码位于main js exports main function var pageMod require sdk page mod pageMod Pa