2014-01-23 2 views
0

Я использую многоколоночную раскладку CSS (css3), которая, конечно же, отлично работает в Chrome, FF и Safari. Но многие по-прежнему используют IE9, и у нас есть требование поддержать его.Невозможно получить значение свойства 'indexOf'

Для поддержки IE я включаю csscolumns polyfill js из this site.

Когда это polyfill нагрузки в IE9 я получаю сообщение об ошибке в консоли:

'unable to get value of the property 'indexof' object is null or undefined' 

и отладчик основные моменты этого кода в качестве источника проблемы:

function loadCssCache(s,callback){if(s.href.indexOf(location.host)==-1||s.href.indexOf(location.host)>50){return false} 

И код, вызывающий loadCssCache является:

for (var i = 0; i < document.styleSheets.length; i++) { 
    loadCssCache(document.styleSheets[i], "parseStylesheets") 
} 

s.href.indexOf - это место, где оно терпит неудачу. Кто-нибудь еще сталкивается с этой проблемой? Или может знать, в чем проблема?

+0

Ключ находится в сообщении об ошибке – ediblecode

+6

Проблема не с 'indexOf', сообщение об ошибке говорит, что' s.href' является null или undefined. Вам нужно выяснить, почему это так. – Barmar

ответ

2

spec указывает, что встроенные таблицы стилей (содержание, содержащееся в атрибуте style) включены в список document.styleSheets. Соответствующая часть, вероятно, такова:

Для встроенных таблиц стилей значение этого атрибута равно NULL.

Итак, если у вас есть какие-либо атрибуты стиля для любых элементов, вы получите ошибку с нулевой ссылкой при попытке прочитать значение с .href.

Простое исправление добавить проверку на null:

function loadCssCache(s,callback){ 
    if(s.href == null || s.href.indexOf(location.host) == -1 || s.href.indexOf(location.host) > 50){ 
     return false 
    } 
} 
+0

Я не использую встроенный стиль в div с csscolumns, только «высотный» встроенный стиль в другом div для анимации. Решением может быть обновление вручную href для тех, которые являются нулевыми. – gorn

+0

@gorn 'document' относится ко всей странице, поэтому, если * любой * элемент имеет встроенный стиль, он будет включен. Вы можете увидеть, что ваш браузер пытается проанализировать, добавив 'console.log (document.styleSheets)' к одному из ваших элементов 'script'. –

+0

Да, 'document.styleSheets [0]' - хороший способ проверить его. Проблемы состояли в том, что я загрузил сценарий слишком рано. Css не был готов: | – gorn