Javascript Firefox无法枚举document.styleSheets[].cssRules[]

Javascript Firefox无法枚举document.styleSheets[].cssRules[],javascript,css,firefox,securityexception,Javascript,Css,Firefox,Securityexception,代码如下: 您会注意到警报(document.styleSheets[x].cssRules.length)失败,出现“安全异常”。有什么解决办法吗。我这样问是因为有几个“CSS延迟加载”类使用这个特性来检测是否加载了CSS文档 另外:安全异常是否是正确的行为/是否符合标准?您正在从另一个域加载css文件,我猜您不允许修改外部加载css文件的cssRules 见此:尝试条件:(即解决方法) 这是一个错误: aftermath(document.styleSheets.length - 1

代码如下:

您会注意到
警报(document.styleSheets[x].cssRules.length)
失败,出现“安全异常”。有什么解决办法吗。我这样问是因为有几个“CSS延迟加载”类使用这个特性来检测是否加载了CSS文档


另外:安全异常是否是正确的行为/是否符合标准?

您正在从另一个域加载css文件,我猜您不允许修改外部加载css文件的cssRules

见此:

尝试条件:(即解决方法)

这是一个错误:

aftermath(document.styleSheets.length - 1);
如果我将其设置为0,所有工作正常。。。 问题是,如果您需要访问,css此时还没有准备好 它,你需要马上去做

上次编辑:

如果您没有从源代码处更新css,则可以使用php代理加载它:

<?php
$name = 'http://ajax.googleapis.com/ajax/libs/jqueryui/$_GET[version]/themes/$_GET[theme]/jquery-ui.css';
$fp = fopen($name, 'rb');
fpassthru($fp);
exit;
?>


然后,您可以使用例如
/proxy.php?version=1.7.0&theme=humanity

来获取它。当您尝试读取从不同域或服务器加载的样式表,或尝试读取@import规则时,可能会出现该错误


出于您的目的,只需检查document.styleSheets.length

样式表在那里并且工作正常,您无法访问样式表的
cssRules
属性,因为浏览器将其设置为null


您遇到的安全错误是由于同源策略造成的-您正在处理来自另一个域的样式表,如果样式表托管在您的网页所在的同一个域上,则不会出现此问题。

从2013年起,您可以在-元素上设置“crossorigin”属性,以向浏览器发出此CSS受信任的信号()


之后,您可以通过Javascript访问其规则。

您可以将失败的行放入try-catch块中。这就是我在一个项目中解决相同问题的方法。

尝试
window.document.styleSheets[x].cssRules.length
而不是
document.styleSheets[x].cssRules.length
。它将在firefox上工作,不会出现任何安全异常。

我收到错误:未捕获异常:[异常…”底层对象不支持参数或操作“代码:”15“nsresult:“0x8053000f(NS\u错误\u DOM\u无效访问\u错误)”位置:“行:49”]在第一个示例中,
NS\u ERROR\u DOM\u INVALID\u ACCESS\u ERR
是错误。错误:width为null源文件:第二行:189抱歉混淆。。。我已经稍微修改了小提琴。出于您的目的,只需检查样式表。长度,它不会增加,直到样式表及其所有规则在浏览器中呈现。我想不是。。。在加载样式表之前,chrome不会增加document.styleSheets.length,但FireFox会增加。没有检查其他浏览器。我已经修改了小提琴并添加了延迟。但是,无论我做什么,我都无法克服安全问题;一切都很好。。。除安全错误外,代理是有效选项;但我的情况并非如此。啊,CDN的优势,没有任何CDN的优势;)
<?php
$name = 'http://ajax.googleapis.com/ajax/libs/jqueryui/$_GET[version]/themes/$_GET[theme]/jquery-ui.css';
$fp = fopen($name, 'rb');
fpassthru($fp);
exit;
?>