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

时间:2011-03-16 09:58:05

标签: javascript css firefox securityexception

以下是代码:

您会注意到alert(document.styleSheets[x].cssRules.length)因“安全例外”而失败。任何解决方法。我问,因为有一些“CSS延迟加载”类使用此功能来检测是否加载了CSS文档。

另外:安全例外是正确行为还是符合标准?

7 个答案:

答案 0 :(得分:7)

尝试读取从其他域或服务器加载的样式表或尝试读取@import规则时,可能会出现该错误。

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

答案 1 :(得分:5)

截至2013年,您可以在< link> -Element上设置“crossorigin”属性,以通知浏览器此CSS受信任(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link)。

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

答案 2 :(得分:1)

你正在从另一个域加载css文件,我想你不能修改外部加载的css文件的cssRules。

请参阅:Accessing cross-domain style sheet with .cssRules

答案 3 :(得分:1)

尝试使用条件:( IE解决方法)

function aftermath(index) {
    var css = document.styleSheets[index].rules || document.styleSheets[index].cssRules;
    alert(css.length);
}

这是错误:

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

答案 4 :(得分:1)

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

您获得的安全错误源于相同的原始策略 - 您正在处理来自其他域的样式表,如果样式表托管在您的网页所在的域中,则不会出现此问题。

答案 5 :(得分:0)

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

答案 6 :(得分:-2)

尝试使用window.document.styleSheets[x].cssRules.length代替document.styleSheets[x].cssRules.length。它将在Firefox上运行,没有任何安全例外。