Firefox не может перечислить document.styleSheets []. CssRules [] - PullRequest
13 голосов
/ 16 марта 2011

Вот код:

Вы заметите, что alert(document.styleSheets[x].cssRules.length) терпит неудачу с «исключением безопасности». Любой обходной путь для этого. Я спрашиваю, потому что есть пара классов «отложенной загрузки CSS», которые используют эту функцию, чтобы определить, загружен ли документ CSS.

Также: является ли исключение безопасности правильным поведением / соответствует ли оно стандартам?

Ответы [ 7 ]

7 голосов
/ 16 марта 2011

Вы можете получить эту ошибку при попытке прочитать таблицу стилей, загруженную из другого домена или сервера, или при попытке прочитать правило @import.

Для вашей цели просто проверьте document.styleSheets.length.

5 голосов
/ 17 сентября 2013

Начиная с 2013 года, вы можете установить атрибут "crossorigin" в элементе , чтобы сигнализировать браузеру, что этот CSS является доверенным (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link).

После этого вы можете получить доступ к его правилам через Javascript.

1 голос
/ 16 марта 2011

Таблица стилей есть и работает нормально, вы просто не можете получить доступ к свойству cssRules таблицы стилей, потому что она установлена ​​в null браузером.

Ошибка безопасности, которую вы получаете из-за той же политики происхождения - вы работаете с таблицами стилей из другого домена, у вас не возникнет этой проблемы, если таблицы стилей размещены на том же домене, на котором находится ваша веб-страница.

1 голос
/ 16 марта 2011

Попробуйте с условием: (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

1 голос
/ 16 марта 2011

Вы загружаете css-файлы из другого домена, я полагаю, что вам не разрешено изменять cssRules для загружаемых извне файлов css.

см. Это: Доступ к междоменной таблице стилей с помощью .cssRules

0 голосов
/ 16 декабря 2015

Попробуйте window.document.styleSheets[x].cssRules.length вместо document.styleSheets[x].cssRules.length.Он будет работать на Firefox без каких-либо исключений безопасности.

0 голосов
/ 23 апреля 2015

Вы можете поместить ошибочную строку в блок try-catch. Вот так я решил ту же проблему в одном проекте.

...