"__MSG_@@extension_id__" 不起作用并且 webfonts 不加载

Posted

技术标签:

【中文标题】"__MSG_@@extension_id__" 不起作用并且 webfonts 不加载【英文标题】:"__MSG_@@extension_id__" doesn't work and webfonts don't load 【发布时间】:2015-10-02 19:35:11 【问题描述】:

我正在开发一个 Google Chrome 扩展程序,它将样式表注入到我在 manifest.json 中定义的特定网站中。

样式表中包含@font-facesrc: url("chrome-extension://__MSG_@@extension_id__/assets/fonts/[...] 中包含的网络字体,但__MSG_@@extension_id__ 似乎不起作用,并且像Font Awesome 这样的网络字体最终仍然显示正方形。

manifest.json

"manifest_version": 2,

"content_scripts": [
        
        "matches": [
            "http://[url].com/*"
        ],
        "css": ["assets/css/main.css"]
    
],

"web_accessible_resources": ["assets/fonts/*", "assets/img/*"]

main.css

@font-face 
      font-family: 'FontAwesome';
      src: url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.eot?v=4.3.0");
      src: url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"), 
           url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.woff2?v=4.3.0") format("woff2"), 
           url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.woff?v=4.3.0") format("woff"), 
           url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.ttf?v=4.3.0") format("truetype"), 
           url("chrome-extension://__MSG_@@extension_id__/assets/fonts/fontawesome/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg");
      font-weight: normal;
      font-style: normal; 

我已经尝试在 url 中硬编码我的扩展 ID,它在我的 iMac 上工作并正确显示 Font Awesome,但是当我切换到我的 Macbook 并硬编码新的扩展 ID 时,它不再工作了,但是我确定我没有做错任何事情,因为我只需要更改 ID。现在我想尝试__MSG_@@extension_id__,但它也不起作用。另一次尝试使用 Base64 嵌入字体也失败了。我的其他 webfonts 是 Roboto 和 Open Sans,以同样的方式包含在内。

Chrome 扩展程序无法访问字体。

【问题讨论】:

相对 URL 不起作用,因为它们不会访问本地扩展,而是访问网站路径。字体存储在扩展本身中。这就是为什么需要使用manifest.json 访问字体和 img 文件夹的原因 如果main.css 在你的扩展中,那么它使用本地扩展的路径。看here。 我会尝试tabs.insertCSS:1. 使用getPackageDirectoryEntry 读取css 文件,2. 使用chrome.extension.getURL 手动替换chrome-extension://__MSG_@@extension_id__ 对此有什么答案吗? 4年后同样的问题:D 【参考方案1】:

我看到了这个问题的最后一条评论,同样的问题 4 年后:D。 我相信几乎每个人都已经找到了解决方案,或者他们已经按照自己的方式完成了工作。但我认为这将对其他人有所帮助,因为同样的问题被一次又一次地问到。

回答

const urlFontAwesomeWebFontEot = chrome.runtime.getURL('assets/fonts/fontawesome/fontawesome-webfont.eot')

const urlFontAwesomeWebFontSvg = chrome.runtime.getURL('assets/fonts/fontawesome/fontawesome-webfont.svg')

@font-face 
      font-family: 'FontAwesome';
      src: url($urlFontAwesomeWebFontEot);
      src: url($urlFontAwesomeWebFontSvg) format("svg");
      font-weight: normal;
      font-style: normal; 

我刚刚为两个 URL 创建了变量,但您可以根据自己的要求创建。

chrome.runtime.getURL API 帮助获取资源的绝对 URL 指向扩展

参考文献

Google Chrome extension relative path https://developer.chrome.com/docs/extensions/reference/runtime/#method-getURL

【讨论】:

以上是关于"__MSG_@@extension_id__" 不起作用并且 webfonts 不加载的主要内容,如果未能解决你的问题,请参考以下文章

php正则匹配表情

php正则匹配表情

批处理修改文件名,只需要将文件名字中的前四个字符"MSG_"去掉。

类似NSLog的ASL Log宏

python multiprocessing问题,为啥输出结果和预期不一样?

c语言中如何将十六进制转换成2个字节输出