На этот вопрос по большей части дан ответ, но я расширю ...
Шаг 1
Моя цель состояла в том, чтобы включить масштабирование в одно время и отключить его в другое время.
// enable pinch zoom
var $viewport = $('head meta[name="viewport"]');
$viewport.attr('content', 'width=device-width, initial-scale=1, maximum-scale=4');
// ...later...
// disable pinch zoom
$viewport.attr('content', 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no');
Шаг 2
Тег области просмотра обновился, но масштабирование щипком все еще было активным !! Мне нужно было найти способ, чтобы страница приняла изменения ...
Это хакерское решение, но переключение непрозрачности тела помогло. Я уверен, что есть другие способы добиться этого, но вот что сработало для меня.
// after updating viewport tag, force the page to pick up changes
document.body.style.opacity = .9999;
setTimeout(function(){
document.body.style.opacity = 1;
}, 1);
Шаг 3
Моя проблема в основном была решена на этом этапе, но не совсем. Мне нужно было знать текущий уровень масштабирования страницы, чтобы я мог изменить размер некоторых элементов, чтобы они поместились на странице (подумайте о маркерах карты).
// check zoom level during user interaction, or on animation frame
var currentZoom = $document.width() / window.innerWidth;
Надеюсь, это кому-нибудь поможет. Я несколько часов стучал мышкой, прежде чем нашел решение.
viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020');
(Просто для некоторого контекста: я помещаю это в несколько заблокированный экземпляр Drupal ... поэтому у меня нет прямого доступа к области головы, и мне нужно использовать Javascript)