2015-04-28 10 views
7

Gdy użytkownik loguje się do mojej aplikacji z iPhone'a/iPada, Safari (pomocny) powiększa się, gdy użytkownik wypełnia pola nazwy użytkownika/hasła. Kiedy jednak formularz zostanie przesłany, a my go zalogujemy, nie przeładujemy strony (jest to jedna aplikacja strony), więc zoom nigdy się nie resetuje. Aplikacja jest zawsze uruchamiana w powiększonej skali.Jak mogę zresetować powiększenie po przesłaniu formularza w mobilnym Safari, zachowując jednocześnie skalowalność użytkownika?

Przyjrzałem się Jeremy Keith's solution, która z powodzeniem resetuje zoom, ale także uniemożliwia przyszłe skalowanie/powiększanie przez użytkownika, ponieważ ustawia on maximum-scale widoku.

Jak to:

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'; 
} 

Czy ktoś widział piękny rozwiązanie resetowanie to po przedłożeniu formularza, bez zamarznięcie rzutnię potem?

Odpowiedz

6

To, co znalazłem w pracy, jest trochę hacky, ale wydaje się skuteczne. Zasadniczo przy składaniu formularza ustawiam maximum-scale, a następnie natychmiast go usuwam. Mam nadzieję, że to pomaga komuś.

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

W iOS 9 miałem również dodać 'skurczyć do montażu = no' - [źródło] (http://www.wmyl.se/en/blog/safari-ios-9 -causing-issues-responsive-sites /) –

+0

Wygląda na to, że przestało działać w iOS 10. Byłoby zainteresowane poprawką. – Magnar

+0

Dzięki; to było bardzo pomocne. Zaproponuję ulepszenie kilku linii: 'var viewportContentOrig = viewportmeta.getAttribute ('content'); viewportmeta.setAttribute ("zawartość", "szerokość = szerokość urządzenia, minimalna skala = 1,0, maksymalna skala = 1,0, początkowa skala = 1,0"); viewportmeta.setAttribute ("content", viewportContentOrig); ' – Ryan

Powiązane problemy