Ocultar la barra de direcciones no funciona: se necesita un enfoque a testing de balas.

En este momento estoy escribiendo algún tipo de aplicación web y quiero ocultar la barra de direcciones en dispositivos iOS y, preferiblemente, también en dispositivos Android.
Normalmente hago esto con

window.addEventListener( 'load', function () { setTimeout( function () { window.scrollTo( 0, 1 ); }, 0 ); }); 

pero esto no funcionará ahora porque la página no tiene suficiente contenido para desplazarse.
Ahora sé que este es un problema común y sé que hay múltiples soluciones, pero preferiría una solución pequeña, a testing de balas.
En realidad, estaba bastante contento cuando encontré esta pregunta: http://stackoverflow.com/questions/9678194/cross-platform-method-for-removing-the-address-bar-in-a-mobile-web-app

donde se publicó este código:

 function hideAddressBar() { if(!window.location.hash) { if(document.height < window.outerHeight) { document.body.style.height = (window.outerHeight + 50) + 'px'; } setTimeout( function(){ window.scrollTo(0, 1); }, 50 ); } } window.addEventListener("load", function(){ if(!window.pageYOffset){ hideAddressBar(); } } ); window.addEventListener("orientationchange", hideAddressBar ); 

Desafortunadamente, esto no funciona para mí. Veo que algo sucede porque algunos elementos que tienen el set padding-top en porcentajes se mueven hacia abajo, pero la barra de direcciones permanece.

Por supuesto, también hice una búsqueda en Google y probé muchos fragments que encontré. Algunos no hicieron nada, algunos simplemente movieron los elementos con padding-top hacia padding-top un poco.
El único código que encontré es el siguiente:

 var page = document.getElementById('page'), ua = navigator.userAgent, iphone = ~ua.indexOf('iPhone') || ~ua.indexOf('iPod'), ipad = ~ua.indexOf('iPad'), ios = iphone || ipad, // Detect if this is running as a fullscreen app from the homescreen fullscreen = window.navigator.standalone, android = ~ua.indexOf('Android'), lastWidth = 0; if (android) { // Android's browser adds the scroll position to the innerHeight, just to // make this really difficult. Thus, once we are scrolled, the // page height value needs to be corrected in case the page is loaded // when already scrolled down. The pageYOffset is of no use, since it always // returns 0 while the address bar is displayed. window.onscroll = function() { page.style.height = window.innerHeight + 'px' } } var setupScroll = window.onload = function() { // Start out by adding the height of the location bar to the width, so that // we can scroll past it if (ios) { // iOS reliably returns the innerWindow size for documentElement.clientHeight // but window.innerHeight is sometimes the wrong value after rotating // the orientation var height = document.documentElement.clientHeight; // Only add extra padding to the height on iphone / ipod, since the ipad // browser doesn't scroll off the location bar. if (iphone && !fullscreen) height += 60; page.style.height = height + 'px'; } else if (android) { // The stock Android browser has a location bar height of 56 pixels, but // this very likely could be broken in other Android browsers. page.style.height = (window.innerHeight + 56) + 'px' } // Scroll after a timeout, since iOS will scroll to the top of the page // after it fires the onload event setTimeout(scrollTo, 0, 0, 1); }; (window.onresize = function() { var pageWidth = page.offsetWidth; // Android doesn't support orientation change, so check for when the width // changes to figure out when the orientation changes if (lastWidth == pageWidth) return; lastWidth = pageWidth; setupScroll(); })(); 

Fuente

Pero no estoy muy contento con esta solución, ya que no soy un amigo del olfato de la UA.

¿Tienes alguna sugerencia sobre lo que podría tratar de hacer que funcione sin que la UU huela? ¿Puede ser mi HTML el que causa problemas con algunos scripts que publiqué?

No sé si es a testing de balas, pero funciona en un montón de dispositivos. Si encuentras advertencia, avísame.

 if (((/iphone/gi).test(navigator.userAgent) || (/ipod/gi).test(navigator.userAgent)) && (!("standalone" in window.navigator) && !window.navigator.standalone)) { offset = 60; $('body').css('min-height', (window.innerHeight + offset) + 'px'); setTimeout( function(){ window.scrollTo(0, 1); }, 1 ); } if ((/android/gi).test(navigator.userAgent)) { offset = 56; $('html').css('min-height', (window.innerHeight + offset) + 'px'); setTimeout( function(){ window.scrollTo(0, 1); }, 0 ); }