我可以在移动Safari浏览器中更改视口元标记吗?

我有一个为移动Safaribuild立的ajax应用程序,需要显示不同types的内容。 我需要用户可扩展= 1的其他内容我需要用户可扩展= 0的一些内容。 有没有办法更新这个dynamic而不刷新页面?

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> 

我意识到这是有点老,但是,是的,它可以做到。 一些JavaScript让你开始:

 viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'); 

只需更改您需要的部分,Mobile Safari将尊重新的设置。

更新:

如果你在源代码中没有元视口标签,你可以直接附加这样的东西:

 var metaTag=document.createElement('meta'); metaTag.name = "viewport" metaTag.content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" document.getElementsByTagName('head')[0].appendChild(metaTag); 

或者如果你使用jQuery:

 $('head').append('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">'); 

在你的<head>

 <meta id="viewport" name="viewport" content="width=1024, height=768, initial-scale=0, minimum-scale=0.25" /> 

在你的JavaScript的某处

 document.getElementById("viewport").setAttribute("content", "initial-scale=0.5; maximum-scale=1.0; user-scalable=0;"); 

…但运气好,为你的设备调整,摆弄几个小时…而我还不在那里!

资源

这已经得到了大部分的答复,但我会扩大…

步骤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步

视口标签将更新,但捏缩放仍然活跃! 我不得不find一个方法来让页面接受更改…

这是一个黑客的解决scheme,但切换身体的不透明性的伎俩。 我相信还有其他方法可以做到这一点,但这是我的工作。

 // 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; 

我希望这有助于某人。 在find解决scheme之前,我花了好几个小时敲击鼠标。