Странное поведение в Chrome относительно document.styleSheets - PullRequest
1 голос
/ 06 октября 2011

У меня есть этот код ...

function disableSheets(){
  console.log(document.styleSheets.length);
    var c = document.styleSheets.length;
    for(var i=0;i<c;i++){
      console.log(document.styleSheets[i]);
        if(typeof document.styleSheets[i]!=='undefined' && document.styleSheets[i].href.indexOf('stylezone')!=-1){
          document.styleSheets[i].disabled=true; 
        }
    }
    console.log(document.styleSheets.length);
}

Когда я запускаю его в Firefox / Firebug, он говорит:

3
StyleSheet
StyleSheet
StyleSheet
3

Когда я запускаю его в Chrome / Developer Tools, он говорит:

3
CSSStyleSheet
CSSStyleSheet
undefined
1

Итак, мои вопросы:

  1. С чего бы это говорить, что есть 3 таблицы стилей, если третий не определен?
  2. Как я потерял 2 таблицы стилей к концу этого цикла?
  3. Что случилось с 3-м листом?

В верхней части моего HTML у меня есть 3 <link> s, связывающие 3 таблицы стилей, а затем сразу после этого я вызываю disableSheets().

Ответы [ 3 ]

1 голос
/ 13 сентября 2012

Подумав некоторое время об ошибке -webkit-, я нашел для нее решение:

Просто назначьте document.styleSheets [n] глобальной переменной перед ее отключением, затем она остается в StyleSheetList.

1 голос
/ 06 октября 2011

Очевидно, таблицы стилей удаляются из объекта document.styleSheets (Chrome), если он отключен.

Ваш код фактически читает первую и третью таблицы стилей:

Обзор:

  • 3 таблицы стилей: A, B, C
  • var c = document.styleSheets.length;
  • Петля , i = 0
  • i=0Выберите styleSheet[i] = StyleSheet AОсталось 2 таблицы стилей: B, C
  • Петля , i = 1
  • i=1, Выбрать styleSheet[i] = StyleSheet CОсталось 1 таблица стилей: B
  • Петля , i = 2
  • i=2, Выбрать styleSheet[i] = undefined
  • Петля i<3 = break
  • Console.log(document.styleSheets.length) = 1 (таблица стилей B)

Чтобы ваш код работал, измените цикл:

 for(var i=c-1; i>=0; i--){

Примечание. Инициализируйте i в c-1!Индексы объектов массива в JavaScript начинаются с нуля.

0 голосов
/ 13 сентября 2012

Установка disable=true в таблице стилей удаляет ее из document.styleSheets

Это ошибка в Chrome, Safari

http://code.google.com/p/chromium/issues/detail?id=88310

...