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

So above is my translation of a function ripped from here : Dynamically loading css file using javascript with callback without jQuery

When I had this in straight javascript it worked great, but the coffee version is giving me problems in ie8 'fn' is null or not an object

Here is the rendered javascript for that section:

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);

Anyway I am new to try and catch and just don't understand what is going wrong here. Thanks in advance everyone!

Community
  • 1
  • 1
Fresheyeball
  • 29,567
  • 20
  • 102
  • 164

1 Answers1

1

I think this has less to do with try/catch and more to do with that for whatever reason, fn is not defined when the callback executes (as the error says). Are you sure fn is passed into loadCSS in the cases where you get the error?

hvgotcodes
  • 118,147
  • 33
  • 203
  • 236