把你的網(wǎng)站改造成一個iOS Web App
前言
iOS上的一個Web App(下圖中的「念」)和Native App(原生應用)在外觀上看起來基本上一樣,但是其使用的技術是HTML,CSS,Javascript,而不是原生應用所使用的Objective-C。
本文簡單介紹一下如何把一個Web站點改造成iOS上的Web App,這里假設你的網(wǎng)站是響應式設計(responsive design)或者已經(jīng)做過移動端的適配。
viewport
我們在HTML中加上viewport(這里假設用戶已經(jīng)對viewport有所了解) meta標簽:
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
其中width=device-width
指的是移動瀏覽器所顯示的寬度等于設備的物理寬度,initial-scale=1.0
指的是初始縮放倍數(shù)為1.0(即不縮放),maximum-scale=1.0
指的是***的縮放倍數(shù)是1.0,user-scalable=no
指用戶不可以手動進行縮放。這些參數(shù)請根據(jù)自己的情況進行調(diào)整。本站調(diào)整完成后,效果如下:
Icon
當用戶通過safari訪問我們網(wǎng)站的時候,用戶是可以把網(wǎng)站的URL以一個快捷方式的形式添加到主屏幕的,展示形式跟原生的應用是一樣,所以我們要給我們的網(wǎng)站添加應用Icon。
iOS所用的icon是png
格式的,其提供了apple-touch-icon
和apple-touch-icon-precomposed
兩種icon,使用方式如下:
- <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
- <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png"/>
以上你只能選其一,二者的區(qū)別在于如果使用apple-touch-icon
,那么iOS會給icon加上一些NB的效果,包括圓角,陰影,反光。如果使用apple-touch-icon-precomposed
則iOS不會加這個效果。
如果你的網(wǎng)站也要可以在Ipad上訪問,那么你還要針對不同的設備準備不同尺寸的icon,你可以通過sizes
屬性來指定icon的尺寸:
- <link rel="apple-touch-icon" href="touch-icon-iphone.png" />
- <link rel="apple-touch-icon" sizes="72x72" href="touch-icon-ipad.png" />
- <link rel="apple-touch-icon" sizes="114x114" href="touch-icon-iphone-retina.png" />
- <link rel="apple-touch-icon" sizes="144x144" href="touch-icon-ipad-retina.png" />
如果你不指定size
屬性,那么默認為57x57
,我們可以看到ipad
所需icon的尺寸是72x72
,retina屏幕的iphone
所需的尺寸是114x114
,retina屏幕的ipad
所需的尺寸是144x144
。
如果沒有當前設備所需尺寸的icon,那么iOS將會選用icon中所有大于此設備所需尺寸的最小的一個。如果沒有比設備所需尺寸大的icon,那么選用***的那個icon。如果有多個符合條件的icon,那么iOS會選擇有precomposed
關鍵詞的那個。
如果在HTML中沒有指定icon,那么iOS會到WEB根目錄下尋找對應的icon。假設設備需要57x57
的icon,那么iOS將以下面的順序進行訪問:
- apple-touch-icon-57x57-precomposed.png
- apple-touch-icon-57x57.png
- apple-touch-icon-precomposed.png
- apple-touch-icon.png
#p#
啟動界面
像原生應用一樣,你也可以給Web App加上一個啟動界面,很簡單:
- <link rel="apple-touch-startup-image" href="/startup.png">
在iPhone
和iPod touch
上,尺寸大小必須為320 x 460
。
隱藏Safari用戶欄
為了更加像原生應用,我們還可以對Safari的用戶欄和地址欄進行隱藏,這個叫作standalone
模式,加入以下meta進入此模式:
- <meta name="apple-mobile-web-app-capable" content="yes" />
你可以通過window.navigator.standalone
來檢測當前是否是standalone
模式。效果如下:
鏈接問題
在Safari中,如果點擊一個鏈接,那么Safari將會打開一個新的tab,顯然做為一個應用這體驗簡直太差了,需要在HTML中加入以下JavaScript來阻止此行為:
- <script type="text/javascript" charset="utf-8">
- // Mobile Safari in standalone mode
- if(("standalone" in window.navigator) && window.navigator.standalone){
- // If you want to prevent remote links in standalone web apps opening Mobile Safari, change 'remotes' to true
- var noddy, remotes = true;
- document.addEventListener('click', function(event) {
- noddy = event.target;
- // Bubble up until we hit link or top HTML element. Warning: BODY element is not compulsory so better to stop on HTML
- while(noddy.nodeName !== "A" && noddy.nodeName !== "HTML") {
- noddynoddy = noddy.parentNode;
- }
- if('href' in noddy && noddy.href.indexOf('http') !== -1 && (noddy.href.indexOf(document.location.host) !== -1 || remotes))
- {
- event.preventDefault();
- document.location.href = noddy.href;
- }
- },false);
- }
- </script>
以上代碼來自gist。
***
Have fun?。海?/p>
參考: