无法访问外部 CSSStyleSheet 中的规则

Posted

技术标签:

【中文标题】无法访问外部 CSSStyleSheet 中的规则【英文标题】:cannot access rules in external CSSStyleSheet 【发布时间】:2018-08-11 19:29:54 【问题描述】:

我无法弄清楚为什么 .cssRules.rules 在我的简单颜色生成器项目中不起作用。

我有一个 <link> 元素来链接我的外部 CSS 文件:

<link href="ColorGenerator.css" type="text/css" rel="stylesheet">

还有一个&lt;script&gt; 元素,用于在&lt;/html&gt; 元素之前链接我的外部JS 文件:

<script src="ColorGenerator.js" type="text/javascript"></script>

然后我的 CSS 文件中有这个:

* 
  box-sizing: border-box;
  margin: 0;
  padding: 0;


#body 
  background: #E1E1F4;

还有这个在 JS 文件上:

const mySheet = document.styleSheets[0];
const body = document.getElementById("body");

body.onkeydown = function(e) 
  if (e.keyCode == 32) 
    mySheet.rules[0].style.background = "#ffa500";
  
;

但是当我按下空格键(e.keyCode == 32)时,什么也没有发生,所以我在 Chrome 中打开开发者工具并收到以下错误消息:

Uncaught DOMException: Failed to read the 'rules' property from 'CSSStyleSheet': Cannot access rules at HTMLBodyElement.body.onkeydown

我不确定 Chrome 是否只是不支持它,或者我的代码是否有问题,无论哪种方式,我都非常感谢任何帮助。

【问题讨论】:

我对@9​​87654332@ 不太熟悉,但富有成效的手册说它有一个cssRules 成员,而不是rules。这可能有关系吗? 我尝试同时使用.cssRules.rules,但它们都给了我同样的错误 在我的 Firefox 58 中,它适用于 cssRules; Chromium 显示“无法从 'CSSStyleSheet' 读取 'cssRules' 属性”。我不知道为什么。你用的是什么浏览器? 我认为 Chrome 64 中可能存在错误。我在不同的 Github 项目上看到了几个似乎引用相同问题的问题。祝你好运。 您是否在从服务器(HTTP 或 HTTPS)提供的页面中执行此操作?还是在文件系统提供的页面中(file:// URL)?后者可能已损坏,通常不推荐使用这种浏览方式,因为它在许多方面都已损坏(出于安全目的)。 【参考方案1】:

从 Chrome 64 开始,对样式表实施了新的 CORS 规则。您需要使用本地开发服务器对依赖于 CSS 对象模型的功能进行本地测试。详情请见Cannot access cssRules from local css file in Chrome。

【讨论】:

以上是关于无法访问外部 CSSStyleSheet 中的规则的主要内容,如果未能解决你的问题,请参考以下文章

iis部署,外部网络无法访问

设置service的nodeport以后外部无法访问对应的端口的问题

内部类

无法访问 API-29 中的外部存储

为啥 dolphindb 脚本中的函数无法访问外部范围内的变量

在Node js中的功能之外无法访问外部IP