Questo è stato risposto per la maggior parte, ma amplierò ...
Passo 1
Il mio obiettivo era abilitare lo zoom in determinati momenti e disabilitarlo in altri.
// 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');
Passo 2
Il tag viewport si aggiornava, ma lo zoom con pizzico era ancora attivo !! Ho dovuto trovare un modo per far sì che la pagina raccolga le modifiche ...
È una soluzione per hacker, ma cambiare l'opacità del corpo ha funzionato. Sono sicuro che ci sono altri modi per ottenere questo risultato, ma ecco cosa ha funzionato per me.
// after updating viewport tag, force the page to pick up changes
document.body.style.opacity = .9999;
setTimeout(function(){
document.body.style.opacity = 1;
}, 1);
Passaggio 3
Il mio problema è stato per lo più risolto a questo punto, ma non del tutto. Avevo bisogno di conoscere l'attuale livello di zoom della pagina in modo da poter ridimensionare alcuni elementi per adattarli alla pagina (pensa agli indicatori di mappa).
// check zoom level during user interaction, or on animation frame
var currentZoom = $document.width() / window.innerWidth;
Spero che questo aiuti qualcuno. Ho passato diverse ore a battere il mouse prima di trovare una soluzione.
viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020');
(Solo per un po 'di contesto: lo metto in un'istanza di Drupal un po' bloccata ... quindi non ho accesso diretto all'area della testa e devo usare Javascript)