На це відповіли здебільшого, але я розширю ...
Крок 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)