diff --git a/reloadr.js b/reloadr.js old mode 100644 new mode 100755 index 659f3aa..d5780c1 --- a/reloadr.js +++ b/reloadr.js @@ -37,7 +37,7 @@ var Reloadr = { // deal with array being passed if ( typeof options.length != 'undefined') this.options.client = options; - + // change any options given else for (x in options) this.options[x] = options[x]; @@ -66,12 +66,51 @@ var Reloadr = { if ( this.options.server.length ) urls.push(this.options.path +'?'+ this.options.server.join(',')); + var self = this; + // check 'em - for (i in urls) - this.ajax.call(this, urls[i], function() { - if (this > Date.parse(window._Reloadr_LoadTime)) - location.reload(); - }); + for (i in urls) { + (function (i) { + self.ajax.call(self, urls[i], function () { + if (this > Date.parse(window._Reloadr_LoadTime)) { + if (urls[i].slice(-3) === 'css') { + // handle linked css + var links = document.getElementsByTagName('link'); + for (j = 0; j < links.length; j++) { + var link = links[j]; + if (link.rel === 'stylesheet' && link.href.indexOf(urls[i]) > -1) { + link.href = link.href.replace(/(.*)\.css(.*)/gi, '$1.css?' + (+new Date)); + } + } + + // handle @imported css + var styles = document.styleSheets; + for (var j = 0; j < styles.length; j++) { + var style = styles[j]; + var rules = style.cssRules || style.rules; + if (rules) { + for (var k = 0; k < rules.length; k++) { + if (rules[k] instanceof CSSImportRule) { + var rule_css = rules[k].cssText; + if (rule_css.indexOf(urls[i]) > -1) { + var new_rule_css = rule_css.replace(/@import(.*)\.css(.*)"\)/i, '@import$1.css?' + (+new Date) + '")'); + style.deleteRule(k); + style.insertRule(new_rule_css, k); + } + } + } + } + } + + window._Reloadr_LoadTime = new Date(); + } + else { + location.reload(); + } + } + }); + })(i); + } this.go(); },