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 扩展自定义字体 的相关文章

  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • Angular - CSS - 自定义类型=文件输入,如何使用按钮而不是标签?

    我制作了一个类型为 file 的自定义输入字段 因为我不喜欢默认的输入字段 为了实现这一目标 我做了
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 是否可以在 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