当前位置: 首页 > 知识库问答 >
问题:

javascript - 请问如何在 manifest version3 中正确的通过 css 调用图片?

柳轶
2023-12-29

我在开发一个 chrome 的插件,现在遇到的问题是无法在 css 文件中调用图片文件,目录结构如下

/project-root│├── manifest.json├── css│   └── style.css├── images│   ├── icon-48.png│   ├── icon-32.jpg│   └── icon-16.png└── scripts    └── content.js

在 manifest.json 文件中已经通过 web_accessible_resources 将对应图片引入

"web_accessible_resources": [        {          "resources": [                "/images/*"            ],          "matches": [                "<all_urls>"            ]        }    ],    "content_scripts": [        {            "matches": [                "<all_urls>"            ],            "js": [                "scripts/content.js"            ],            "css": [                "css/style.css"            ]        }    ],

在 style.css 中

.text-icon {    background-image: url('../images/icon-48.png');    background-size: cover;    width: 20px;    height: 20px;}

始终无法将图片载入。

我尝试过多个方法

  • 绝对路径,相对路径,都无法载入图片
  • 我尝试用
const imageUrl = chrome.runtime.getURL('images/icon-48.png');console.log('Image URL:', imageUrl);icon.style.backgroundImage = `url(${imageUrl})`;

但得到的图片路径转字符了得到的结果是 background-image: url(&quot;chrome-extension://adfdaksfdafdk/images/icon-48.png&quot;);

上引号变成了 &quot 这样的字符。

请问在 manifest version3 中正确的调用图片是该怎么操作呢?

共有2个答案

陆卓
2023-12-29
  1. CSS url() 里不需要引号
  2. 建议用 css 变量来做,大体如下:
.text-icon {  backgound-image: url(var(--my-extension-icon48);}

然后用 content script 向目标页面写入:

document.documentElement.style.setProperty('--my-extension-icon48', '图标的 URL');
庞鸿骞
2023-12-29

在 Manifest version 3 中,对于如何通过 CSS 调用图片,有一些重要的变化。Manifest version 3 引入了 web_accessible_resources 字段,用于指定可以从网页上安全访问的资源。然而,这个字段在处理 CSS 资源时有一些限制。

在你的情况下,你需要确保你的图片资源在 web_accessible_resources 字段中被正确指定,并且你的 CSS 文件中的 URL 是正确的。

首先,你应该确保你的 web_accessible_resources 字段中的 resources 部分正确地指定了你的图片资源。你的 manifest.json 文件应该看起来像这样:

{  "name": "My Extension",  "version": "1.0",  "manifest_version": 3,  "web_accessible_resources": [    {      "resources": [        "/images/icon-48.png",        "/images/icon-32.jpg",        "/images/icon-16.png"      ],      "matches": [        "<all_urls>"      ]    }  ],  "content_scripts": [    {      "matches": [        "<all_urls>"      ],      "js": [        "scripts/content.js"      ],      "css": [        "css/style.css"      ]    }  ]}

请注意,你的图片资源现在作为 web_accessible_resources 字段的一部分被明确列出。这样,它们就可以被你的内容脚本和任何网页安全地访问。

然后,在你的 CSS 文件中,你应该使用正确的 URL 来引用你的图片资源。在你的情况下,你应该使用相对于 manifest.json 文件的路径来引用你的图片资源。因此,你的 CSS 文件应该看起来像这样:

.text-icon {  background-image: url('images/icon-48.png');  background-size: cover;  width: 20px;  height: 20px;}

请注意,我在这里使用了单引号 ' 来包围 URL。这是因为在 CSS 中,单引号和双引号是可以互换的,而且使用单引号可以避免在你的 URL 中出现转义字符的问题。

 类似资料:
  • 问题内容: 我有一个注册事件处理程序的构造函数: 但是,我无法在回调内部访问已创建对象的属性。看起来好像不引用创建的对象,而是引用另一个对象。 我也尝试使用对象方法而不是匿名函数: 但是也有同样的问题 如何访问正确的对象? 问题答案: 你应该知道什么 (又名“上下文”)是每个功能内的特殊关键字和它的值仅取决于 如何 调用函数,而不是如何/何时/何它被定义。它不受其他变量之类的词法作用域的影响(箭头

  • 这是我的简单代码 这条线呢 重定向到taskOKAction,但它只允许我通过URL发送参数(?task=123)。 我需要将object$task发送到taskOKAction,以便在屏幕上打印用户在表单中键入的内容。 我该怎么做?在询问好的解决方案是存储表单中的数据(例如,在数据库或文件中)并只在URL中传递对象ID的参数之前,我已经对stackoverflow发了火。我认为这是一个很好的解决

  • 问题内容: 我正在尝试从外部PHP文件将JavaScript函数调用为JavaScript脚本。我的代码又大又不同,所以我在这里编写示例代码。 这是我的PHP代码: 这是我的JavaScript代码: 这就是我想要做的。 我 原来的 PHP文件不包含这些数学函数,但是想法是相同的。 如果一些它怎么没有一个妥善的解决办法,那么可能你 请 提出一种替代,但它应该从外部PHP调用值。 问题答案: 是的,

  • 我试图从javascript本身调用另一个域中的服务。我可以请求跨域服务。但我无法从服务中检索信息。一些我如何被同源政策阻止。请帮我找出代码中的错误。 OPTIONS/SolartisGeoCodelookupService/Service/DrawRegions HTTP/1.1 主机:Cross_Domain_IP_Address 用户代理:Mozilla/5.0(x11;Linux x86_

  • 问题内容: 例如,我有一个带有两种绑定方法的react组件: 在上面的代码中,我有两种绑定方法:一种是和一种是。功能有效,但无效。运行时,它返回错误: TypeError:无法读取未定义的属性“ handleRemoveComment” 问题答案: 问题在于这条线: 因为您忘记了绑定,映射回调方法,所以inside 方法将不会引用类上下文。 使用这些解决方案中的 任何一种 ,它将起作用。 1- 在

  • 问题内容: 我希望有人可以为我澄清这里发生的事情。我在整数类中挖了一下,但是由于整数 覆盖 了运算符,所以我无法弄清楚出了什么问题。我的问题是这条线: 这是我的推理:我知道java通过值传递(或通过reference的值传递),因此我认为在下面的示例中,整数对象应每次递增。 这是我的预期输出: 这是实际输出。 为什么会这样? 问题答案: 有两个问题: 整数是通过值而不是通过引用传递的。在方法内部更