这是代码:
您会注意到alert(document.styleSheets[x].cssRules.length)
失败并带有“安全异常”。任何解决方法。我之所以问,是因为有几个“CSS 延迟加载”类使用此功能来检测是否加载了 CSS 文档。
另外:安全异常是正确的行为/是否符合标准?
这是代码:
您会注意到alert(document.styleSheets[x].cssRules.length)
失败并带有“安全异常”。任何解决方法。我之所以问,是因为有几个“CSS 延迟加载”类使用此功能来检测是否加载了 CSS 文档。
另外:安全异常是正确的行为/是否符合标准?
尝试读取从不同域或服务器加载的样式表或尝试读取 @import 规则时,您可能会收到该错误。
出于您的目的,只需检查 document.styleSheets.length 。
自 2013 年起,您可以在 <link>-Element 上设置“crossorigin”属性,以向浏览器发出此 CSS 受信任的信号(https://developer.mozilla.org/en-US/docs/Web/HTML/Element /链接)。
之后,您可以通过 Javascript 访问其规则。
您正在从另一个域加载 css 文件,我猜您不允许为外部加载的 css 文件修改 cssRules。
尝试条件:(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 上运行。