以下是代码:
你会注意到alert(document.styleSheets[x].cssRules.length)
会出现“安全异常”的错误。有什么解决办法吗?我之所以问这个问题,是因为有几个“CSS懒加载”类使用了这个功能来检测CSS文档是否已加载。
另外:安全异常是正确的行为吗?它符合标准吗?
以下是代码:
你会注意到alert(document.styleSheets[x].cssRules.length)
会出现“安全异常”的错误。有什么解决办法吗?我之所以问这个问题,是因为有几个“CSS懒加载”类使用了这个功能来检测CSS文档是否已加载。
另外:安全异常是正确的行为吗?它符合标准吗?
当尝试读取来自不同域或服务器的样式表,或尝试读取 @import 规则时,您可能会遇到该错误。
对于您的目的,只需检查 document.styleSheets.length。
尝试使用条件:(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
获取它。
样式表已经存在并且正常工作,但是您无法访问样式表的cssRules
属性,因为浏览器将其设置为null。
您遇到的安全错误是由于同源策略 - 您正在处理来自另一个域的样式表,如果样式表托管在与您的网页相同的域上,则不会出现此问题。
你可以将出错的代码放在 try-catch 块中。这就是我在一个项目中解决同样问题的方法。
window.document.styleSheets[x].cssRules.length
代替document.styleSheets[x].cssRules.length
。这样在Firefox上就不会出现任何安全异常了。
NS_ERROR_DOM_INVALID_ACCESS_ERR
是一个错误。 - Salman A