Ini telah dijawab untuk sebagian besar, tetapi saya akan memperluas ...
Langkah 1
Tujuan saya adalah mengaktifkan zoom pada waktu tertentu, dan menonaktifkannya di waktu lain.
// 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');
Langkah 2
Tag viewport akan diperbarui, tetapi pinch zoom masih aktif !! Saya harus menemukan cara untuk mendapatkan halaman untuk mengambil perubahan ...
Ini adalah solusi peretasan, tetapi mengubah opacity tubuh melakukan triknya. Saya yakin ada cara lain untuk mencapai ini, tetapi inilah yang berhasil untuk saya.
// after updating viewport tag, force the page to pick up changes
document.body.style.opacity = .9999;
setTimeout(function(){
document.body.style.opacity = 1;
}, 1);
LANGKAH 3
Masalah saya sebagian besar telah terpecahkan pada saat ini, tetapi tidak sepenuhnya. Saya perlu mengetahui tingkat zoom halaman saat ini sehingga saya dapat mengubah ukuran beberapa elemen agar sesuai dengan halaman (pikirkan penanda peta).
// check zoom level during user interaction, or on animation frame
var currentZoom = $document.width() / window.innerWidth;
Saya harap ini membantu seseorang. Saya menghabiskan beberapa jam membenturkan mouse saya sebelum menemukan solusi.
viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020');
(Hanya untuk beberapa konteks: Saya meletakkan ini dalam contoh Drupal yang agak terkunci ... jadi saya tidak memiliki akses langsung ke area kepala dan perlu menggunakan Javascript)