2015-04-28 4 views
7

Quando un utente accede alla mia app da un iPhone/iPad, Safari (utilmente) effettua lo zoom mentre l'utente sta compilando i campi nome utente/password. Ma quando il modulo viene inviato e noi li accediamo, non ricarichiamo la pagina (questa è un'applicazione a singola pagina), quindi lo zoom non viene mai ripristinato. Quindi l'app viene sempre avviata con una scala ingrandita.Come posso ripristinare lo zoom dopo l'invio del modulo in Safari mobile, mantenendo in seguito la scalabilità dell'utente?

Ho visto Jeremy Keith's solution, che ripristina correttamente lo zoom, ma impedisce anche il ridimensionamento/zoom futuro da parte dell'utente, perché imposta maximum-scale del viewport.

Ti piace questa:

var viewportmeta = document.querySelector('meta[name="viewport"]'); 

if (viewportmeta) { 
    viewportmeta.content = 'width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0'; 
} 

qualcuno ha visto una bella soluzione per resettare questo dopo un invio di un modulo, senza congelare la finestra dopo?

risposta

6

Quello che ho trovato funziona è un po 'hacky, ma sembra efficace. Fondamentalmente, sull'invio del modulo, sto impostando il maximum-scale, e quindi immediatamente rimuovendolo. Spero che questo aiuti qualcuno.

element.on('submit', function(event) { 
    if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i)) { 
     var viewportmeta = document.querySelector('meta[name="viewport"]'); 
     if (viewportmeta) { 
     viewportmeta.setAttribute('content', 'width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0'); 
     viewportmeta.setAttribute('content', 'width=device-width, minimum-scale=1.0, initial-scale=1.0'); 
     } 
    } 
} 
+1

Come di iOS 9, ho dovuto aggiungere anche 'shrink-to-fit = no' - [Fonte] (http://www.wmyl.se/en/blog/safari-ios-9 -causing-issues-responsive-sites /) –

+0

Questo sembra aver smesso di funzionare in iOS 10. Sarebbe interessato a una correzione. – Magnar

+0

Grazie; questo è stato molto utile. Offrirò un miglioramento di poche righe: 'var viewportContentOrig = viewportmeta.getAttribute ('content'); viewportmeta.setAttribute ('content', 'width = device-width, minimum-scale = 1.0, maximum-scale = 1.0, initial-scale = 1.0'); viewportmeta.setAttribute ('content', viewportContentOrig); ' – Ryan

Problemi correlati