Skip to content

Commit 14ce340

Browse files
committed
Merge pull request #87 from otakurzo/master
fix: css onload patch for some old browsers.
2 parents 61fd4dd + 9bc0dc5 commit 14ce340

3 files changed

Lines changed: 123 additions & 1 deletion

File tree

dist/ocLazyLoad.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,68 @@
115115
el.async = 1;
116116
anchor.insertBefore(el, anchor.lastChild);
117117

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+
118180
return deferred.promise;
119181
}
120182

0 commit comments

Comments
 (0)