-
-
Save mathiasbynens/901295 to your computer and use it in GitHub Desktop.
// Original code from http://www.blog.highub.com/mobile-2/a-fix-for-iphone-viewport-scale-bug/ | |
var metas = document.getElementsByTagName('meta'); | |
var i; | |
if (navigator.userAgent.match(/iPhone/i)) { | |
for (i=0; i<metas.length; i++) { | |
if (metas[i].name == "viewport") { | |
metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0"; | |
} | |
} | |
document.getElementsByTagName('body')[0].addEventListener("gesturestart", gestureStart, false); | |
} | |
function gestureStart() { | |
for (i=0; i<metas.length; i++) { | |
if (metas[i].name == "viewport") { | |
metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6"; | |
} | |
} | |
} |
// Rewritten version | |
// By @mathias, @cheeaun and @jdalton | |
(function(doc) { | |
var addEvent = 'addEventListener', | |
type = 'gesturestart', | |
qsa = 'querySelectorAll', | |
scales = [1, 1], | |
meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; | |
function fix() { | |
meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; | |
doc.removeEventListener(type, fix, true); | |
} | |
if ((meta = meta[meta.length - 1]) && addEvent in doc) { | |
fix(); | |
scales = [.25, 1.6]; | |
doc[addEvent](type, fix, true); | |
} | |
}(document)); |
http://mathiasbynens.be/demo/ios-viewport-scaling
In order for the script to work and bypass the 2nd gesture minor tweaking like in orienatation change event set the max to 1.00099 instead of just 1.0
hi, i'm still in a learning process and really grateful to all sites like this one!
the code works fine with me. the only thing is that a tiny part of the page is being cut off from the sides. is there a way of preventing this or is it possibly a self-inflicted problem because i made my page 1000px wide?
i'd be very grateful to any help and ideas!
I appreciate this code, which has helped me as I've adapted my website to be more mobile friendly. I'm posting about an issue which just came to my attention, hoping for some advice. It seems that the bug fix doesn't work if a page includes dynamic text. I have two pages which implement the bug fix, although the script is external in a file named MaintainViewport.js. If you visit http://mauitradewinds.com/test/view.htm you will see a horizontally-scrolling image with a fixed text caption. The viewport bug fix works perfectly. But, at http://mauitradewinds.com/test/test.htm there is a fading caption below the scrolling image. The viewport bug is not fixed on this page, although it references the same javascript to correct that bug. If I remove the dynamic caption, the viewport bug also disappears. If there is a solution to this, I'd be grateful to see it.
}(document));
? should be })(document);
@ericmuyser - you can write it either way. The latter is more common, but the former works as well.
You might want to update with additional meta params, for iOS 6+.
function fix() {
meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=' + scales[1] + ', user-scalable=no, minimum-scale=' + scales[0];
doc.removeEventListener(type, fix, true);
}
hmm, still seems to create problems for me....
Is this fix still applicable to iOS or has Apple solved this issue?
Is this fix still applicable to iOS or has Apple solved this issue?
I also want to know...
I tested this code and its working well. thanks for sharing.
I don't think this works any more (iOS 10+) due to Apple now ignoring the scale meta tags
If that bug was fixed there should be some release information on it somewhere. I'd love to see a link on this to know if it truly is supposed to be fixed. I too have heard the rumors.
I read through what I could find on the iOS 6 release with no luck.