Возможно предотвратить масштабирование веб-страниц в Safari на iOS 10, но это потребует дополнительных усилий с вашей стороны. Я предполагаю, что аргумент заключается в том, что степень сложности должна помешать разработчикам Cargo-Cult опустить «user-scalable = no» в каждый тег окна просмотра и сделать ненужные вещи бесполезными для пользователей с нарушениями зрения.
Тем не менее, я бы хотел, чтобы Apple изменила свою реализацию так, чтобы существовал простой (метатег) способ отключения двойного нажатия для увеличения. Большая часть трудностей связана с этим взаимодействием.
Вы можете остановить масштабирование с помощью чего-то вроде этого:
document.addEventListener('touchmove', function (event) {
if (event.scale !== 1) { event.preventDefault(); }
}, false);
Обратите внимание, что если какие-либо более глубокие цели вызывают stopPropagation для события, событие не достигнет документа, и этот слушатель не предотвратит поведение масштабирования.
Отключение двойного касания для увеличения аналогично. Вы отключаете любое нажатие на документ, происходящее в течение 300 миллисекунд после предыдущего нажатия:
var lastTouchEnd = 0;
document.addEventListener('touchend', function (event) {
var now = (new Date()).getTime();
if (now - lastTouchEnd <= 300) {
event.preventDefault();
}
lastTouchEnd = now;
}, false);
Если вы неправильно настроили элементы формы, при фокусировке на входе произойдет автоматическое масштабирование, а поскольку вы в основном отключили ручное масштабирование, теперь его практически невозможно уменьшить. Убедитесь, что размер входного шрифта> = 16px.
Если вы пытаетесь решить эту проблему в WKWebView в нативном приложении, приведенное выше решение является жизнеспособным, но это лучшее решение: https://stackoverflow.com/a/31943976/661418 . И, как упоминалось в других ответах, в iOS 10 beta 6 Apple теперь предоставила флаг для соблюдения метатега.
Обновление, май 2017 года: я заменил старый метод проверки длины касания на отключение при нажатии на более простой подход «check event.scale on touchmove». Должно быть более надежным для всех.