ie8 respond.js 'undefined' is null or not an object

让人想犯罪 __ 提交于 2019-12-10 12:58:40

问题


I'm using respond.js (+1 for that library) and I'm getting and error to the following function of the object:

translate = function (styles, href, media) {
    // here I got 'undefined' error in IE 8
    var qs = styles.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),
        ql = qs && qs.length || 0;

    //try to get CSS path
    href = href.substring(0, href.lastIndexOf("/"));

    var repUrls = function (css) {
        return css.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3");
    },
    useMedia = !ql && media;

    //if path exists, tack on trailing slash
    if (href.length) {
        href += "/";
    }

    //if no internal queries exist, but media attr does, use that   
    //note: this currently lacks support for situations where a media attr is specified on a link AND
    //its associated stylesheet has internal CSS media queries.
    //In those cases, the media attribute will currently be ignored.
    if (useMedia) {
        ql = 1;
    }

    for (var i = 0; i < ql; i++) {
        var fullq, thisq, eachq, eql;

        //media attr
        if (useMedia) {
            fullq = media;
            rules.push(repUrls(styles));
        }
        //parse for styles
        else {
            fullq = qs[i].match(/@media *([^\{]+)\{([\S\s]+?)$/) && RegExp.$1;
            rules.push(RegExp.$2 && repUrls(RegExp.$2));
        }

        eachq = fullq.split(",");
        eql = eachq.length;

        for (var j = 0; j < eql; j++) {
            thisq = eachq[j];
            mediastyles.push({
                media: thisq.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/) && RegExp.$2 || "all",
                rules: rules.length - 1,
                hasquery: thisq.indexOf("(") > -1,
                minw: thisq.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
                maxw: thisq.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/) && parseFloat(RegExp.$1) + (RegExp.$2 || "")
            });
        }
    }

    applyMedia();
},

Are there any other workarounds? I have tried different ones...


回答1:


I had a similar issue in line 121 (Respond.js 1.3.0). An empty stylesheet was causing the issue and removing it solved the problem.

There is not enough information to tell if your case is exactly the same, but you may try and see if it helps.



来源:https://stackoverflow.com/questions/18468050/ie8-respond-js-undefined-is-null-or-not-an-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!