7

我使用respond.js(+1對於庫)和我得到和錯誤的對象的下列功能:IE8 respond.js「不確定」爲空或不是對象

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

還有其他解決方法嗎?我曾嘗試不同的...

+0

您不應該需要任何解決方法。你是否加載完所有的CSS後加載respond.js?你的CSS只使用最小/最大寬度的媒體查詢嗎?您的CSS是否與HTML和respond.js位於同一臺服務器上? – Blazemonger

+1

乍一看,我在代碼中看到了一個'.indexOf()',它在IE8上不受支持。你可以刪除它,看看你是否仍然有錯誤? – MacK

回答

11

我在121行(Respond.js 1.3.0)有類似的問題。一個空的樣式表導致了這個問題,並刪除它解決了這個問題。

沒有足夠的信息來判斷您的案件是否完全相同,但您可以嘗試查看是否有幫助。

+1

很好的答案,因爲這正是我需要的解決方案。謝謝! – SeanPrice

相關問題