2013-05-29 59 views
4

我的網頁絕對沒有「meta」視口標記。視口元標記刪除bug

我創造我自己的«元»視標籤動態:

var viewportMeta = document.createElement('meta'); 
    viewportMeta.setAttribute('id', 'myMeta'); 
    viewportMeta.setAttribute('name', 'viewport'); 
    viewportMeta.setAttribute('content', 'width=device-width, initial-scale=1.0, user-scalable=no'); 

,並追加到«頭»(有些用戶操作後):

document.head.appendChild(viewportMeta); 

然後(在用戶點擊在一些按鈕上)我需要從«head»中刪除「myMeta」«meta»標籤:

var myMeta = document.getElementById('myMeta'); 
document.head.removeChild(myMeta); 

它可以100%去除!使用桌面瀏覽器和iPad上的Adobe Edge Inspect Weinre進行檢查。

但是整個頁面並沒有進入之前的狀態!整個頁面保持不變,就像它在「viewportMeta」對象中具有所有定義的屬性的「meta」視口標籤。

那麼,有沒有辦法徹底刪除«meta»viewport標籤?有任何想法嗎?

(這個問題是在iPad上的Safari和Chrome瀏覽器,試圖不刪除«元»標籤,但只是改變了它的«內容»財產 - 。沒有成功在Android設備上的瀏覽器未選中)

回答

4

你應恢復視口元標記的原始值

<html> 
<head> 
    <title>test dynamic view port</title> 
</head> 
<body> 
    <button id="turnOn">on</button> 
    <button id="turnOff">off</button> 

    <script type="text/javascript"> 

     function turnOnDeviceViewport() { 

      removeMetaIfExist(); 

      var viewportMeta = document.createElement('meta'); 
      viewportMeta.setAttribute('id', 'myMeta'); 
      viewportMeta.setAttribute('name', 'viewport'); 
      viewportMeta.setAttribute('content', 'width=device-width, initial-scale=1.0, user-scalable=no'); 

      document.head.appendChild(viewportMeta); 
      alert("click"); 
     } 

     function turnOffDeviceViewport() { 

      removeMetaIfExist(); 

      var viewportMeta = document.createElement('meta'); 
      viewportMeta.setAttribute('id', 'myMeta'); 
      viewportMeta.setAttribute('name', 'viewport'); 
      viewportMeta.setAttribute('content', 'width=980, user-scalable=yes'); 

      document.head.appendChild(viewportMeta); 
      alert("click"); 
     } 

     function removeMetaIfExist() { 

      var metaElement = document.getElementById("myMeta"); 
      if (metaElement) document.head.removeChild(metaElement); 
      alert("removed"); 
     } 

     document.getElementById("turnOn").addEventListener("click", turnOnDeviceViewport, false); 
     document.getElementById("turnOff").addEventListener("click", turnOffDeviceViewport, false); 

    </script> 
</body> 

你可以找到關於蘋果的開發者網站上關於視元默認值的詳細信息: Safari HTML Reference: Supported Meta Tags

編輯:默認值「WIDTH = 980,用戶可擴展= YES」可能不適合所有的設備和瀏覽器相同的,所以一個完整的解決方案,你需要確定你正在運行的瀏覽器和相應地設置默認值

+0

我測試了你的建議 - 沒有成功。它絕對不是從「width = device-width」更新爲其默認寬度或者任何小於容器寬度的寬度(例如,調整到1200 px,但不調整到980 px)。它將「user-scalable = no」更改爲「user-scalable = yes」,這是完美的。但沒有成功將「設備寬度」更新爲任何默認寬度。 – artuska

+0

我剛剛在Android 4.0.4上使用Chrome進行測試,結果很有用。我將稍後更新Apple設備。 –

+0

@ArielDeil一旦我們移除了視口元標記,那麼我們能夠添加它們嗎?我的意思是我需要添加和刪除按鈕點擊元標記。我有Java文件代碼也像下面WebSettings settings = appView.getSettings(); \t \t settings.setBuiltInZoomControls(true); \t \t settings.setSupportZoom(true); \t \t settings.setDefaultZoom(ZoomDensity.MEDIUM);你可以檢查一下嗎? – Mallikarjun