Skip to content

Instantly share code, notes, and snippets.

@rty
Created June 11, 2010 06:56
Show Gist options
  • Save rty/434145 to your computer and use it in GitHub Desktop.
Save rty/434145 to your computer and use it in GitHub Desktop.
// small fix for old safari versions compatibility
// this bug occures
// on iPhone OS since 3.2 version (iPad)
// and on iOS since 4.0 version
// as of 1.4.2 the mobile safari reports wrong values on offset()
// http://dev.jquery.com/ticket/6446
// remove once it's fixed
if (/webkit.*mobile/i.test(navigator.userAgent)
&& "getBoundingClientRect" in document.documentElement) {
(function ($) {
$.fn.offsetOld = $.fn.offset;
$.fn.offset = function () {
var result = this.offsetOld();
result.top -= window.scrollY;
result.left -= window.scrollX;
return result;
};
})(jQuery);
}
@jimitha
Copy link

jimitha commented Jul 7, 2010

works perfectly for me, thank you!

@fitsallun
Copy link

This seems to be fixed in iOS 4.1 -I can only repro now on an iPad (still on iOS 3.2), so I had to change the regex to the following:

/ipad.*webkit.*mobile/i.test(navigator.userAgent)

iOS 4.2 should hopefully fix this issue for iPads as well...

@rty
Copy link
Author

rty commented Oct 8, 2010

I think it has been fixed in iOS 4.1 version for iPhone. Starting from iOS 4.2 it could be installed to both iPhone and iPad. My solution is:

if (/webkit.mobile/i.test(navigator.userAgent)
&& "getBoundingClientRect" in document.documentElement
&& parseFloat(/OS (.
) like/ig.exec(navigator.userAgent)[1].replace('_', '.')) < 4.1) {
(function ($) {
$.fn.offsetOld = $.fn.offset;
$.fn.offset = function () {
var result = this.offsetOld();
result.top -= window.scrollY;
result.left -= window.scrollX;

        return result;
    };
})(jQuery);

};

@fitsallun
Copy link

Thanks, man -I was working on something similar, but you beat me to it. I realized after I posted I didn't account for people who are on an old version of the OS. I ended up with this:

if (/webkit.*mobile/i.test(navigator.userAgent) && parseFloat($.browser.version) < 532.9 && "getBoundingClientRect" in document.documentElement) {
...
}

I think it'll be slightly faster than the RegEx.

@rty
Copy link
Author

rty commented Oct 8, 2010

Yeah! It's cool solution:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment