7

ich respond.js (+1 für diese Bibliothek) verwenden und ich bin immer und Fehler an die folgende Funktion des Objekts:ie8 respond.js ‚undefined‘ ist Null oder kein Objekt

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(); 
}, 

Gibt es andere Problemumgehungen? Ich habe verschiedene versucht ...

+0

Sie sollten keine Problemumgehungen benötigen. Laden Sie respond.js nachdem alle CSS geladen wurde? Verwendet Ihr CSS nur Medienabfragen mit minimaler/maximaler Breite? Ist Ihr CSS auf demselben Server gehostet wie HTML und respond.js? – Blazemonger

+1

Auf den ersten Blick sehe ich im Code eine '.indexOf()', die auf IE8 nicht unterstützt wird. Kannst du es entfernen und sehen, ob du immer noch den Fehler bekommst? – MacK

Antwort

11

Ich hatte ein ähnliches Problem in Zeile 121 (Respond.js 1.3.0). Ein leeres Stylesheet verursachte das Problem und das Entfernen löste das Problem.

Es gibt nicht genug Informationen, um zu sagen, ob Ihr Fall genau gleich ist, aber Sie können versuchen, ob es hilft.

+1

Große Antwort, da dies genau die Lösung war, die ich brauchte. Vielen Dank! – SeanPrice

Verwandte Themen