Esto ha sido contestada en su mayor parte, pero se expandirá ...
Paso 1
Mi objetivo era activar el zoom en determinados momentos, y desactivarlo en otros.
// 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');
Paso 2
La etiqueta de la ventana gráfica actualizaría, pero el zoom pizca era todavía activo !! Tenía que encontrar la manera de hacer que la página recogiera los cambios ...
Es una solución de hackeo, pero alternar la opacidad del cuerpo hizo el truco. Estoy seguro de que hay otras maneras de lograr esto, pero esto es lo que funcionó para mí.
// after updating viewport tag, force the page to pick up changes
document.body.style.opacity = .9999;
setTimeout(function(){
document.body.style.opacity = 1;
}, 1);
Paso 3
Mi problema fue resuelto sobre todo en este momento, pero no del todo. Necesitaba saber el nivel de zoom actual de la página para poder cambiar el tamaño de algunos elementos para que quepan en la página (piense en los marcadores del mapa).
// check zoom level during user interaction, or on animation frame
var currentZoom = $document.width()/window.innerWidth;
Espero que esto ayude a alguien. Pasé varias horas golpeándome el mouse antes de encontrar una solución.
¡Agradable!Desafortunadamente, parece que no puedo hacer que funcione. Mi situación es un poco diferente: estoy trabajando con un sitio que tiene un ancho de 980px. El contenido va directamente al borde del diseño, por lo que en un iPad, parece incómodo. Pensé que establecería la ventana gráfica con un ancho de 1020px para permitir un margen de 20px en cada lado ... pero no tuve suerte: 'viewport = document.querySelector (" meta [name = viewport] "); viewport.setAttribute ('content', 'width = 1020'); ' (Solo por algún contexto: estoy poniendo esto en una instancia de Drupal algo bloqueada ... así que no tengo acceso directo a la área de la cabeza y necesita usar Javascript) – Sam
gruñir gruñir ... Creo que sé por qué esto no funciona para mí. El fragmento anterior reescribirá el valor del ancho de la ventana meta. Ese meta no existe todavía ... no puede cambiarlo si no está allí, ¿verdad? De cualquier forma que pueda agregar ese meta con Javascript? (¡Maldita sea esta instancia de Drupal bloqueada! ¡Creo que estoy jodido!) – Sam
Esto debería ser lo suficientemente fácil. Solo escríbelo directamente. Si está utilizando jQuery sería algo como esto: '$ ('head'). Append (' ');' o, sin jQuery: 'document.getElementsByTagName (' head ') [0] .appendChild (...);' – markquezada