0
Radiant::loadCSS = (fn, scope) ->
  head = document.getElementsByTagName("head")[0]
  link = document.createElement("link")
  link.setAttribute "href", "/" + ri.context + "/css/" + @obj + ".css"
  link.setAttribute "rel", "stylesheet"
  link.setAttribute "type", "text/css"
  sheet = undefined
  cssRules = undefined
  if "sheet" of link
    sheet = "sheet"
    cssRules = "cssRules"
  else
    sheet = "styleSheet"
    cssRules = "rules"
  timeout_id = setInterval(->
    try
      if link[sheet] and link[sheet][cssRules].length
        clearInterval timeout_id
        clearTimeout timeout_id
        fn.call scope or window, true, link #LINE THAT ERRORS OUT!!!
    #finally
  , 10)
  timeout_id = setTimeout(->
    clearInterval timeout_id
    clearTimeout timeout_id
    head.removeChild link
    fn.call scope or window, false, link
  , 15000)
  head.appendChild link
  link

所以上面是我从这里翻录的一个函数的翻译:Dynamically loading css file using javascript with callback without jQuery

当我在直接的 javascript 中使用它时效果很好,但是咖啡版本在 ie8 中给我带来了问题'fn' is null or not an object

这是该部分的渲染 javascript:

timeout_id = setInterval(function() {
  try {
    if (link[sheet] && link[sheet][cssRules].length) {
      clearInterval(timeout_id);
      clearTimeout(timeout_id);
      return fn.call(scope || window, true, link); //ERROR LINE!!!
    }
  } catch (_error) {}
}, 10);

无论如何,我是新手trycatch只是不明白这里出了什么问题。提前谢谢大家!

4

1 回答 1

1

我认为这与 try/catch 的关系不大,而与此有关,无论出于何种原因,fn在回调执行时都没有定义(如错误所示)。你确定在你得到错误的情况下fn被传入吗?loadCSS

于 2012-05-31T17:25:55.317 回答