|
115 | 115 | el.async = 1; |
116 | 116 | anchor.insertBefore(el, anchor.lastChild); |
117 | 117 |
|
| 118 | + /* |
| 119 | + The event load or readystatechange don't fire in: |
| 120 | + - iOS < 6 (default mobile browser) |
| 121 | + - Android < 4.4 (default mobile browser) |
| 122 | + - Safari < 6 (desktop browser) |
| 123 | +
|
| 124 | + Then use a patch found in: |
| 125 | + https://github.com/kof/xLazyLoader/blob/master/src/jquery.xLazyLoader.js#L163 |
| 126 | + but applied to browsers with the problem |
| 127 | + */ |
| 128 | + |
| 129 | + // BEGIN PATCH |
| 130 | + if(type == 'css'){ |
| 131 | + var ua = navigator.userAgent.toLowerCase(); |
| 132 | + var usePatch = false; |
| 133 | + |
| 134 | + // iOS < 6 |
| 135 | + if (/iP(hone|od|ad)/.test(navigator.platform)) { |
| 136 | + var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); |
| 137 | + var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.')); |
| 138 | + usePatch = iOSVersion < 6; |
| 139 | + } |
| 140 | + |
| 141 | + if(!usePatch){ |
| 142 | + // Android < 4.4 |
| 143 | + if( ua.indexOf("android") > -1 ){ |
| 144 | + var androidVersion = parseFloat(ua.slice(ua.indexOf("android")+8)); |
| 145 | + usePatch = androidVersion < 4.4; |
| 146 | + } |
| 147 | + } |
| 148 | + |
| 149 | + if(!usePatch){ |
| 150 | + // Safari < 6 |
| 151 | + if (ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1) { |
| 152 | + var safariVersion = parseFloat(ua.match(/version\/([\.\d]+)/i)[1]); |
| 153 | + usePatch = safariVersion < 6; |
| 154 | + } |
| 155 | + } |
| 156 | + |
| 157 | + if(usePatch){ |
| 158 | + var tries = 500; // * 20 = 10000 miliseconds |
| 159 | + |
| 160 | + var checkElement = function checkElement(){ |
| 161 | + try { |
| 162 | + el.sheet.cssRules; |
| 163 | + } catch (e) { |
| 164 | + tries--; |
| 165 | + if( tries <= 0 ){ |
| 166 | + el.onload = el['onreadystatechange'] = el.onerror = null; |
| 167 | + deferred.reject(new Error('Timeout: ' + path)); |
| 168 | + } else { |
| 169 | + setTimeout(checkElement, 20); |
| 170 | + } |
| 171 | + return; |
| 172 | + } |
| 173 | + el.onload(); |
| 174 | + } |
| 175 | + checkElement(); |
| 176 | + } |
| 177 | + } |
| 178 | + // END PATCH |
| 179 | + |
118 | 180 | return deferred.promise; |
119 | 181 | } |
120 | 182 |
|
|
0 commit comments