css - 外部 CSS 在 chrome 中下载但未反映
问题描述
我有一个外部 CSS 样式,它在 chrome 中下载但没有反映。当我这样做时,它会手动更改内联样式表。它在 Firefox 浏览器中运行良好。
以以下格式加载样式表:
if (domainURL != '') {
link = document.createElement('LINK');
link.rel = 'stylesheet';
link.href = domainURL;
link.type = 'text/css';
document.head.appendChild(link);
}
我也尝试了以下解决方案,但都没有奏效。
- 刷新
- 清除缓存
- 在样式链接中添加版本(例如:https://tel.org.css?v=1.111)
请有人帮我解决这个 chrome 浏览器问题。
解决方案
到目前为止,我的猜测是 CSS 文件没有被应用,因为它有一个错误的HTTP 标头content-type
,其值应该是带有编码参数 ( ) 的mime 类型text/css; charset: UTF-8
,但它是一个未知值 ( css
)。
Firefox 似乎覆盖了错误的内容类型标头并嗅探(猜测)信息(因为x-content-type-options: nosniff
不允许这样做)。而 Chrome 可能反而尊重标题“如果它在那里,它一定是有原因的”,因此不知道如何处理未知类型的文件。
要测试此诊断程序,您应该尝试:
- 加载另一个 CSS 文件(如果可能,托管在其他地方,因为它可能是服务器设置了错误的标头)。它不一定要漂亮,只是为了显示它是否被应用。
- 如果可以,请更改标题。修复 content-type 或删除它(让浏览器嗅探 mime-type,这对于安全性来说不是理想的,但会起作用)。
- 在 JS 中创建样式表:
fetch('your-css-file.css') .then(response => response.text()) .then(styleString => { const style = document.createElement('style') style.textContent = styleString document.head.append(style) })
我测试了自己的第三种解决方案(在 JS 中获取并使用文本响应创建样式表)并且它有效。但是,由于以下规则,它会尝试下载图像:
.logo {
background-image: url(../logo/images6.1624696593222.jpg);
而且,和以前一样,我得到了一个错误的内容类型标题:
Request URL: https://greatone11.aroscop.org/logo/images6.1624696593222.jpg
content-type: text/html; charset=UTF-8
server: nginx/1.18.0
x-powered-by: Express
似乎您将expressjs作为您的服务器,将nginx作为您的反向代理。其中之一就是弄乱你的标题。我的赌注是 Express,因为它可能是为 Angular 设置的,而您正在尝试在这里做一些不太有角度的事情!
推荐阅读
- c++ - 将 map 分配给 char*.. 这是如何工作的?(包括代码示例)
- sql - 带有 SQL 查询函数的多循环 - 查询之间的 2 分钟间隔
- c - 在Win32中试探性切换到等待光标的正确方法是什么?(或者:如何正确触发 WM_SETCURSOR?)
- typescript - Typescript 无法使用定义为类型 T 的键的子集的键来索引类型 T
- android - 如何切换 Facebook SDK 同意?
- c# - EF Core - 异步函数阻塞 UI
- haskell - 比较 Haskell 中 2 个列表的长度
- python - 模块导入良好实践
- pandas - 如何在熊猫df的列中找到具有不同值的第一行?
- r - 提取具有特定名称的变量并为所有文件循环