无法获得属性'indexOf'的价值

时间:2014-01-23 10:04:47

标签: javascript html css internet-explorer polyfills

我正在使用CSS多列布局(css3),当然在Chrome,FF和Safari中都能正常使用。 但是许多人仍然使用IE9,我们需要支持它。

对于IE支持,我包括来自this sitecsscolumns polyfill js。

当在IE9中加载此polyfill时,我在控制台中收到此错误消息:

'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是失败的地方。有没有其他人遇到这个问题?或者可能知道问题是什么?

1 个答案:

答案 0 :(得分:3)

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
    }
}