把你的网站改造成一个iOS Web App

开发 项目管理
iOS上的一个Web App(下图中的「念」)和Native App(原生应用)在外观上看起来基本上一样,但是其使用的技术是HTML,CSS,Javascript,而不是原生应用所使用的Objective-C。

前言

iOS上的一个Web App(下图中的「念」)和Native App(原生应用)在外观上看起来基本上一样,但是其使用的技术是HTML,CSS,Javascript,而不是原生应用所使用的Objective-C。

01

本文简单介绍一下如何把一个Web站点改造成iOS上的Web App,这里假设你的网站是响应式设计(responsive design)或者已经做过移动端的适配。

viewport

我们在HTML中加上viewport(这里假设用户已经对viewport有所了解) meta标签:

  1. <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指的是初始缩放倍数为1.0(即不缩放)maximum-scale=1.0指的是***的缩放倍数是1.0,user-scalable=no指用户不可以手动进行缩放。这些参数请根据自己的情况进行调整。本站调整完成后,效果如下:

02

Icon

当用户通过safari访问我们网站的时候,用户是可以把网站的URL以一个快捷方式的形式添加到主屏幕的,展示形式跟原生的应用是一样,所以我们要给我们的网站添加应用Icon。

03

iOS所用的icon是png格式的,其提供了apple-touch-iconapple-touch-icon-precomposed两种icon,使用方式如下:

  1. <link rel="apple-touch-icon" href="/apple-touch-icon.png"/> 
  2. <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png"/> 

以上你只能选其一,二者的区别在于如果使用apple-touch-icon,那么iOS会给icon加上一些NB的效果,包括圆角,阴影,反光。如果使用apple-touch-icon-precomposed则iOS不会加这个效果。

如果你的网站也要可以在Ipad上访问,那么你还要针对不同的设备准备不同尺寸的icon,你可以通过sizes属性来指定icon的尺寸:

  1. <link rel="apple-touch-icon" href="touch-icon-iphone.png" /> 
  2. <link rel="apple-touch-icon" sizes="72x72" href="touch-icon-ipad.png" /> 
  3. <link rel="apple-touch-icon" sizes="114x114" href="touch-icon-iphone-retina.png" /> 
  4. <link rel="apple-touch-icon" sizes="144x144" href="touch-icon-ipad-retina.png" /> 

如果你不指定size属性,那么默认为57x57,我们可以看到ipad所需icon的尺寸是72x72retina屏幕的iphone所需的尺寸是114x114retina屏幕的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加上一个启动界面,很简单:

  1. <link rel="apple-touch-startup-image" href="/startup.png"> 

iPhoneiPod touch上,尺寸大小必须为320 x 460

隐藏Safari用户栏

为了更加像原生应用,我们还可以对Safari的用户栏和地址栏进行隐藏,这个叫作standalone模式,加入以下meta进入此模式:

  1. <meta name="apple-mobile-web-app-capable" content="yes" /> 

你可以通过window.navigator.standalone来检测当前是否是standalone模式。效果如下:

04

链接问题

在Safari中,如果点击一个链接,那么Safari将会打开一个新的tab,显然做为一个应用这体验简直太差了,需要在HTML中加入以下JavaScript来阻止此行为:

 

  1. <script type="text/javascript" charset="utf-8"> 
  2. // Mobile Safari in standalone mode 
  3. if(("standalone" in window.navigator) && window.navigator.standalone){ 
  4.  
  5.     // If you want to prevent remote links in standalone web apps opening Mobile Safari, change 'remotes' to true 
  6.     var noddy, remotes = true
  7.  
  8.     document.addEventListener('click', function(event) { 
  9.  
  10.         noddy = event.target; 
  11.  
  12.         // Bubble up until we hit link or top HTML element. Warning: BODY element is not compulsory so better to stop on HTML 
  13.         while(noddy.nodeName !== "A" && noddy.nodeName !== "HTML") { 
  14.             noddynoddy = noddy.parentNode; 
  15.         } 
  16.  
  17.         if('href' in noddy && noddy.href.indexOf('http') !== -1 && (noddy.href.indexOf(document.location.host) !== -1 || remotes)) 
  18.         { 
  19.             event.preventDefault(); 
  20.             document.location.href = noddy.href; 
  21.         } 
  22.  
  23.     },false); 
  24. </script> 

以上代码来自gist

***

Have fun :)

参考:

Configuring Web Applications

Everything you always wanted to know about touch icons

原文链接:http://weizhifeng.net/make-web-app-more-native.html

责任编辑:陈四芳 来源: weizhifeng.net
相关推荐

2020-07-07 07:55:53

web app数据科学机器学习

2024-04-01 13:18:15

App架构服务端

2021-10-29 12:01:11

HTTP代码前端

2022-10-17 10:28:05

Web 组件代码

2011-08-29 10:51:51

UbuntuWindows7

2011-08-09 18:06:20

windows7windowsXP

2018-10-11 21:00:18

2013-08-09 09:49:19

开源怎么开源库开源

2013-05-13 09:31:29

Web App开发WebApp

2021-06-07 12:08:06

iOS Python API

2021-03-17 10:16:39

树莓派音乐系统Linux

2018-10-16 09:45:36

谷歌AI游戏

2014-09-25 09:51:29

Android App个人博客

2020-07-28 14:23:55

代码开发Github

2009-12-30 10:49:26

MPLS VPN

2017-02-24 10:30:51

iOS开源App Store

2019-08-06 13:37:55

微服务架构数据

2015-08-25 09:51:50

WebAppNative App

2019-01-11 09:41:56

网易考拉服务架构微服务

2021-01-14 16:25:18

iPhone 7服务器开发者
点赞
收藏

51CTO技术栈公众号