没有合适的资源?快使用搜索试试~ 我知道了~
7890当Web访问方式不是Web浏览器时,Web视图中有什么?渐进式Web应用程序功能分析0Thomas Steiner GoogleGermany GmbH 20354Hamburg, Germanytomac@google.com0摘要0渐进式Web应用程序(pwa)是一类新型的Web应用程序,主要通过Service Workers API实现。ServiceWorkers允许应用程序通过拦截网络请求来提供编程或缓存的响应以实现离线工作,ServiceWorkers可以在应用程序未运行时接收推送通知并在后台同步数据,并且与Web应用程序清单一起允许用户将pwa安装到设备的主屏幕上。由于ServiceWorkers是Web标准,因此支持已经在几个独立的AndroidWeb浏览器中实现,其中包括(但不限于)Chrome及其开源基础Chromium,Firefox,Edge,Opera,uc浏览器,三星Internet以及期待已久的iOSSafari。在本文中,我们研究了Web视图中pwa功能支持的情况,即明确不是独立浏览器的应用内Web体验。这种应用内浏览器通常可以在诸如微信或WhatsApp之类的聊天应用程序,Facebook或Twitter之类的在线社交网络以及Gmail之类的电子邮件客户端中找到,或者简单地在任何显示原生应用程序内的Web内容的地方。我们开发了一个名为pwa FeatureDetector的开源应用程序,可以轻松测试应用内浏览器(以及自然的独立浏览器),并评估不同设备和Web视图对pwa功能的支持水平。一方面,我们的结果显示各种Web视图技术和它们所基于的浏览器引擎之间存在很大差异,但另一方面,对于Android来说,结果与设备的操作系统无关,这对于许多设备制造商的问题更新政策是个好消息。这些发现有助于开发人员在确定pwa是否是适合其目标用户的Web访问方式时做出明智的选择。0CCS概念0• 信息系统 → 浏览器;0关键词0渐进式Web应用程序,Service Workers,Web视图,Android,iOS0本文根据知识共享署名-非商业性-禁止演绎4.0国际(CC BY-NC-ND4.0)许可发布。作者保留在个人和公司网站上传播作品的权利,并附上适当的归属。WWW'18 Companion,2018年4月23日至27日,法国里昂,©2018IW3C2(国际万维网会议委员会),根据知识共享CC BY-NC-ND 4.0许可发布。ACMISBN 978-1-4503-5640-4/18/04。https://doi.org/10.1145/3184558.318874201 引言0近年来,从浏览器到本机应用程序再到浏览器的范式转变。Web目前正在通过Web应用程序进行一场革命,更具描述性的是渐进式Web应用程序,或简称为pwa。我们是如何到达这里的?01.1 渐进式Web应用程序的历史0自2005年左右,Web开发已经从静态多页面文档转变为单页面应用程序,这主要得益于XMLHttpRequestAPI的强大支持,这一过程最终导致Garrett创造了术语Ajax(异步JavaScript和XML[18])来描述这种转变。尽管在2007年的iPhone等设备上推动了基于Web的应用程序,但与通过应用商店分发而不是Web的本机应用程序相比,Web应用程序的尝试大多失败了。本机应用程序不仅可以直接访问硬件,例如相机和麦克风,还可以访问各种传感器,如加速度计或地理定位,而且总体上提供更好的用户体验并且启动更快,与在运行时加载浏览器相比。此外,先进的离线支持和推送通知对于当时的Web应用程序来说几乎是不可想象的,而Web应用程序图标(已经可以添加到设备的主屏幕上)大多只是带有全屏模式之外的书签而已。虽然可以使用AppCache实现简单的离线场景[36],但更复杂的离线场景容易出错且难以正确实现[7]。随着Web平台的成熟,越来越多的与硬件相关的API在浏览器中得到实现,最终是在2014年Chromium浏览器中添加了ServiceWorkers[33],这才开始解锁一类新的Web应用程序,这些应用程序可以在离线时工作,接收推送通知并在后台同步数据,即使应用程序未运行,并且与Web应用程序清单[12]一起,允许用户将pwa实际安装到设备的主屏幕上,并与操作系统进行适当的集成[24]。其他Android浏览器,如Mozilla Firefox,MicrosoftEdge,Opera,uc浏览器,三星Internet以及期待已久的iOS上的Apple Safari,以及其他几个浏览器都开始实现ServiceWorkers。现在,即使是像Twitter或trivago这样的跨国公司也在押注pwa[17,39],中国的巨大国内玩家如腾讯新闻或新浪微博也在押注pwa[41]。图1显示了在Android上的GoogleChrome浏览器中运行的Flipkart的pwa,Flipkart是印度流行的购物网站。01.2 研究问题和论文结构0在本文中,我们将研究一种特殊的访问PWA的方法,即通过内置浏览器而不是独立浏览器来访问它们,这些内置浏览器渲染Web内容。0开发者论坛 WWW 2018,2018年4月23日至27日,法国里昂7900图1:以Flipkart(https://www.fipkart.com)为例展示一些PWA功能的屏幕截图:(i)添加到主屏幕提示,(ii)主屏幕上的图标,(iii)启动时的闪屏,(iv)全屏模式下无URL栏启动,以及(v)离线状态的信号。0在原生应用程序的上下文中,这种应用程序与内置浏览器一起显示Web内容。具有内置浏览器的应用程序的示例包括微信(W ¯eixìn)或WhatsApp等聊天应用程序,Facebook或Twitter等在线社交网络,以及Gmail等电子邮件客户端,或者简单地在原生应用程序中显示Web内容的任何地方。这些应用程序内部利用的技术被称为WebViews。为了理解为什么这是一个有趣的研究问题,首先需要了解像微信这样的应用程序以及WebViews在中国等市场中的作用。Chan在AndreessenHorowitz的一篇文章中写道[14](我们的强调):“数百万(注意,不仅仅是数千)轻量级应用程序存在于微信中,就像网页存在于互联网上一样。这使得微信更像是移动网站的浏览器,或者可以说是一个移动操作系统-完全具备自己专有的应用商店。微信上的轻量级应用程序称为“官方账户”。在经过简短的申请过程后获得微信的批准,平台上有超过1000万个这样的官方账户-从名人、银行、媒体机构和时尚品牌到医院、药店、汽车制造商、互联网初创公司、个人博客等等。”Chan继续说道:“微信专注于处理管道-通过将用户从钱包菜单链接到应用程序内的网页来监督这些现有服务的集成。这是微信成为移动(和Web)世界集成浏览器的又一种方式。”值得注意的是,这种发展对开放Web构成了威胁。正如杨和杨在《金融时报》[40]中写道:“[微信的]新闻订阅和搜索工具仅从微信的墙内提取内容,而不是从开放的Web中提取,包括个人用户发布的更新(称为时刻)、公司账户和大量的微信账户,这些账户被报纸和独立博客作者使用。”尽管我们个人不赞同这种发展,并且我们是开放Web的支持者,但我们仍然研究了应用内封闭Web体验及其对PWA的影响。在本文的剩余部分,我们首先在第2节中介绍Android和iOS上WebViews的技术背景。然后在第3节中描述了我们研究的PWA功能及其底层API,并介绍了我们的应用程序PWA功能检测器。接下来,我们在第4节中展示和讨论我们的结果。我们在第5节中展望未来的工作,并在第6节中得出结论。01 我们将Web View的一般概念与Android类WebView区分开来。02 WEB VIEWS的背景0在原生应用中集成Web内容有不同的方法,每种方法都有其自己的优点和缺点。在接下来的内容中,我们将描述两个流行的移动操作系统Android和iOS上的选项。虽然Android浏览器自2014年以来就支持Service Worker[16],但截至撰写本文的时间(2018年2月),Safari在iOS上首次在iOS 11.3的Beta版本中支持Service Worker[30]。实现仍然不完整,存在一些错误,但根据渐进增强的原则[13],情况有望随着时间的推移而改善。02.1 Android上的Web视图0带有WebView的AndroidWeb视图。在Android操作系统中,WebView[2]是显示网页的View子类。开发者可以基于此类创建自己的Web浏览器,或者仅在应用程序中显示一些在线内容。它不包括完全开发的Web浏览器的任何功能,例如导航控件或地址栏。WebView默认情况下只显示网页。因此,它使用系统浏览器的渲染引擎来显示网页,并包括导航历史记录的前进和后退、缩放、执行文本搜索、注入自定义JavaScript等方法。Looper[28]描述了该组件的开发如下:“早期版本的Android操作系统依赖于WebKit渲染引擎来驱动其WebView,在Android4.4之后,实现了各种版本的Chromium。通常,随着Android操作系统的每次更新,新版本的Chromium也会被包含在内,从而可以访问新的渲染引擎功能。这对于必须支持早期Android版本的开发者来说,会导致向后兼容性问题。为了解决这个问题,从Android5.0开始,引入了自动更新的WebView概念。Android 5.0WebView是一个系统级.apk文件,可以在GooglePlay上自动更新。”0使用CustomTabsIntent的Chrome自定义标签。虽然WebView与用户的常规浏览活动完全隔离,但自Chrome45(2015年9月)以来,Chrome自定义标签[22]可以通过CustomTabsIntent在Android上自定义和与ChromeActivity交互。这使得Web内容感觉像是应用程序的一部分,同时保留了完整的Web浏览器的功能和性能,通过共享的cookiejar和权限模型,用户无需登录到他们已经连接到的站点,或重新授予权限。0使用TrustedWebUtils的可信任Web活动。Chrome自定义标签解决了AndroidWebView的许多问题,但是它们必须全屏显示并带有强制性的URL栏约束。截至2017年10月,可信任的Web活动[21]是一种将Web应用内容(如PWA)与Android应用集成的新方法。它们可以使用TrustedWebUtils进行实例化,并使用基于Chrome自定义标签的通信协议。可信任Web活动中的内容是可信的-应用程序和打开的站点应来自同一开发者,这是通过数字资产链接进行验证的。2个02 数字资产链接:https://developers.google.com/digital-asset-links/0开发者跟踪WWW 2018年4月23日至27日,法国里昂7910宿主应用程序无法直接访问受信任Web活动或任何其他类型的Web状态中的Web内容。Web和本地内容之间的转换是在活动之间进行的。应用程序的每个活动(即屏幕)要么完全由Web提供,要么由Android活动提供。尽管在撰写本文时没有强制执行,但可信任的Web活动最终需要满足类似于“改进的添加到主屏幕”流程[24]的内容要求,该流程旨在成为交互性和性能的基准。02.2 iOS上的Web视图0带有UIWebView的iOSWeb视图。与Android类似,iOS上的Web内容也可以通过一个简单的系统级Web视图UIWebView [5]进行嵌入。2011年初,随着iOS4.3的发布,苹果引入了Nitro,一种更快的即时(JIT)JavaScript引擎,可以大大加快浏览器加载复杂Web页面的性能。Nitro只适用于Safari:第三方开发者无法从UIWebView基于的Web视图中获得更快的性能,这被广泛认为是一种鼓励使用Safari而不是Web视图和保存在iPhone主屏幕上的Web应用的计算移动[37]。0使用WKWebView的iOSWeb视图。2014年6月,苹果宣布了WKWebView[6],这是一个新的API,允许开发人员在自定义的Web视图中显示Web内容,具有与Safari相同的性能优势。WKWebView以安全性为设计理念,具有Safari的Nitro引擎,同时允许开发人员自定义用户界面和功能。由于苹果的AppStore限制,iOS上的第三方浏览器在内部需要依赖WKWebView。相关影响已经记录,例如Edge for iOS [29]或Chrome for iOS [15]。0使用SFSafariViewController的iOS Web视图。2015年9月,随着iOS9的发布,苹果推出了一个名为SFSafariViewController[4]的新的Web视图,它使应用程序能够将显示Web内容的责任委托给Safari本身,避免了为内置浏览器编写自定义代码的需要。直到iOS10,SFSafariViewController与Safari共享cookie和网站数据,这意味着如果用户已经在Safari中登录到某个网站,并且在SFSafariViewController中打开了该网站的链接,他们不需要再次登录。从iOS11开始,cookie和网站数据不再自动共享,但开发人员可以根据需要利用SFAuthenticationSession [3]在用户同意的情况下共享数据。02.3 两个操作系统之间的相似之处0这两个操作系统的发展有明显的相似之处,可以总结如下。从最初的速度较慢、逐渐改进的简单Web视图,即Android上的WebView(从WebKit到Chromium的透明内部切换)和iOS上的UIWebView和WKWebView,逐渐演变为更强大和更好集成的浏览器选项卡体验,即Android上的CustomTabsIntent和iOS上的SFSafariViewController,这两者(仅在iOS11之后经用户同意)与特定系统的主要浏览器共享cookie、权限等。目前,仅有Android的Trusted Web Activity没有相应的iOS版本。03 检测PWA功能0什么才能使一个Web应用成为渐进式Web应用并没有明确定义。其中最开放的定义来自三星[34],三星是三星Internet浏览器的制造商(我们的重点):“渐进式Web应用(PWA)是常规的移动和桌面Web应用程序,可以在任何Web浏览器中访问。在支持新的开放Web标准的浏览器中[...]它们可以提供额外的功能,包括离线支持和推送通知”。就像Ajax[18]一样,pwa这个术语成为了一个包罗万象的品牌,用于以某种方式或其他方式使用服务工作者API的Web应用程序,感觉(本地)“类似应用程序”,如果最新的浏览器功能可用(渐进增强[13]),或者可以安装到主屏幕上。Russell[32]列出了一些对他所称之为“基线应用”的要求:“渐进式Web应用在技术属性上被功能性地定义,这些属性允许浏览器检测到网站满足某些标准,并值得被添加到主屏幕上。[...]主屏幕上的应用程序:0•无论网络状态如何,都应该立即加载。[他们]不需要完全离线运行,但必须在不需要网络往返的情况下将其自己的用户界面显示在屏幕上。 •应该与用户所在的位置联系在一起。应用程序背后的品牌或网站不应该是一个谜。 •可以在没有额外浏览器界面的情况下运行(例如,URL栏)。[...]为了防止被强制门户(甚至更糟),应用程序必须通过tls连接加载。0接着,Russell将这些要求转化为更具技术性的术语,写道pwa必须(我们的重点):0•从安全来源发起。通过tls和绿色锁显示(没有活动的混合内容)。 •离线加载(即使只有一个自定义的离线页面)。由此可以推断,渐进式Web应用程序需要服务工作者。 •引用Web应用程序清单[...]0因此,我们认为“pwa特性”是指需要一个或多个Service WorkerAPI的任何特性。此外,如果Web View实现了ServiceWorkers,我们还会考虑以下详细介绍的其他最新浏览器API。03.1 检测Service Worker的支持0通过在navigator对象上调用register方法来安装ServiceWorker,其中第一个参数是必需的,并且包含指向包含ServiceWorker代码的JavaScript文件的URL。这个基于Promise的API在成功的情况下返回一个ServiceWorkerRegistration对象,如果之前没有ServiceWorker,则是新创建的,如果之前存在ServiceWorker,则是更新的[33]。为了检测给定的WebView是否支持pwa特性,我们可以简单地检查API的存在性,然后尝试注册一个Service Worker,如清单1所示。03.2 考虑到渐进式Web应用的特性0离线功能即使设备处于离线状态[33],例如当所谓的飞行模式被激活或设备暂时没有网络覆盖,仍然能够至少在某种程度上加载和工作。02018年4月23日至27日,法国里昂举办的开发者大会WWW 2018console.log(registration);console.log(error);});}// nav ==> navigator// win ==> window// doc ==> document// reg ==> ServiceWorkerRegistrationconst detectFeatures = (reg) => {};};7920推送通知 能够显示推送通知,如Push API[11]中所定义的,例如在应用程序未运行时指向用户的新内容。添加到主屏幕能够安装(添加)到设备的主屏幕上,以便轻松访问,如[24]中所述。后台同步能够在后台同步数据[33],例如在聊天应用程序中的临时离线情况后以延迟方式发送消息。导航预加载 能够在ServiceWorker尚未启动的情况下开始网络导航请求[8],否则将是一个阻塞操作。静默推送 能够使用Web Budget API[10]来确定是否可以在静默推送通知时启动潜在昂贵的操作,例如后台刷新。存储估算能够估算应用程序已使用的可用存储,并了解浏览器强制执行的可用配额[35]。持久存储能够持久存储数据,即使内存不足,也不会被浏览器在没有用户同意的情况下清除[35]。Web分享能够调用操作系统的原生共享小部件,如Web Share API[19]中所定义的。媒体会话能够在平台用户界面上显示自定义的媒体元数据,自定义可用的平台媒体控件,并访问通知区域和移动设备锁屏上找到的平台媒体键,如媒体会话标准[26]中所定义的。媒体能力能够根据给定格式的解码和编码能力以及设备显示来做出最佳决策,以找到最佳匹配,如媒体能力标准[25]中所定义的。设备内存能够读取设备的可用随机访问内存(RAM)量(以GB为单位),以便允许服务器根据内置内存自定义应用程序体验[31]。获取已安装的相关应用能够检测与pwa一起安装的相应原生应用程序是否已安装,以便例如避免在原生应用程序和pwa上同时显示推送通知[23]。支付请求能够作为商家、用户和支付方式之间的中介,通过支持不同的安全支付方法的标准化支付通信流程来实现[9]。凭证管理能够从浏览器请求用户的凭证,并帮助浏览器正确存储凭证以便将来使用以便于登录[38]。03.3 检测各种pwa功能0渐进增强的核心原则[13]是功能检测。功能检测的思想是运行一个测试,确定当前浏览器是否支持某个特定功能,然后有条件地运行代码,以在支持该功能和不支持该功能的浏览器中提供可接受的体验。它与基于浏览器嗅探的方法不同,后者是基于用户代理字符串的。0// 这通常应该在`window.onload`触发后发生,以优先显示内容 if('serviceWorker' in navigator) {0navigator.serviceWorker.register(scriptURL, options).then(registration => {0}).catch(error => {0} else {0console.log('不支持Service Workers');0清单1:检查Service Worker支持。0return {0'Offline Capabilities':在win中的'caches','PushNotifications':在reg中的'pushManager','Add to HomeScreen':doc.createElement('link')0.relList.supports('manifest') &&'onbeforeinstallprompt' in win,0'Background Sync':在reg中的'sync','NavigationPreload':在reg中的'navigationPreload','SilentPush':在nav中的'budget' &&0'reserve' in nav.budget,0'Storage Estimation':在nav中的'storage' &&0'estimate' in nav.storage,0'Persistent Storage':在nav中的'storage' &&0'persist' in nav.storage,0'Web Share':在nav中的'share','MediaSession':在nav中的'mediaSession','MediaCapabilities':在nav中的'mediaCapabilities','DeviceMemory':在nav中的'deviceMemory','获取已安装的相关应用程序':0'getInstalledRelatedApps' in nav,0'Payment Request':在win中的'PaymentRequest','CredentialManagement':在nav中的'credentials',0清单2:检测各种pwa功能。0关于功能支持,通常会做出基于用户代理字符串的假设,这被普遍认为是有问题的和不良的做法[1]。清单2显示了我们运行的测试,以便检测上一小节中列出的pwa功能。如前所述,ServiceWorkerRegistration,即活动的ServiceWorker,是所有测试的先决条件。变量nav代表navigator,win代表window,doc代表document,reg代表ServiceWorkerRegistration纯粹是为了代码缩小的目的。03.4 实现细节0我们开发了一个名为pwa FeatureDetector的开源应用程序,可以轻松测试应用内浏览器(以及自然的独立浏览器),并检查可用的pwa功能。应用程序的代码可以在https://github.com/tomayac/pwa-feature-detector找到,应用程序本身部署在https://tomayac.github.io/pwa-feature-detector/。当window.load事件触发时,它尝试注册一个无操作的ServiceWorker,在成功的情况下立即声明其客户端。0Developers Track WWW 2018, 2018年4月23日至27日,法国里昂7930(a) 在基于Chrome65的WebView中的微信中。0(b) 在基于Chrome65的CustomTabsIntent中的Twitter中。0图2:在Android 8.1.99上运行的pwa功能检测器。0为了获得ServiceWorkerRegistration,需要在上述代码中执行的功能检测测试中。最后,它以表格形式显示结果,并打印浏览器的用户代理字符串。图2a显示了在基于Chrome65的WebView中的聊天应用程序微信上运行的pwa功能检测器的屏幕截图。相比之下,图2b显示了在相同设备上运行的pwa功能检测器,但这次是在社交网络应用程序Twitter中,该应用程序不使用WebView,而是使用CustomTabsIntent显示Web内容。尽管底层浏览器引擎完全相同(Chrome/65.0.3310.3),但基于CustomTabsIntent的应用内浏览器明显在pwa功能竞争中胜出。对于非领域专家,我们注意到在Android上,可以通过查看显示的用户代理字符串中的字符串“wv”来轻松发现WebView[20]。相应的iOS屏幕截图,同样基于相同的底层浏览器引擎(Safari11.1)在同一设备上,可以在图3a中看到在Facebook中显示的WKWebView,以及在图3b中看到在Twitter中显示的SFSafariViewController。04 结果和讨论 4.1 Android0我们在代表性的一系列具有不同Android操作系统版本、浏览器引擎和中国和德国用户的几个应用程序中运行了pwa功能检测器。我们涵盖了从Android 6(“棉花糖”)到Android7(“牛轧糖”)再到(撰写时)最新的Android8(“奥利奥”)的所有内容。对于浏览器引擎,我们有运行Chrome53、55、57、59、61、63和65的设备。所有收集到的屏幕截图都可以在以下网址找到:https://photos.app.goo.gl/Kh3DyhpL6Q58G7tn1。中国的微信[14]的流行在我们所涵盖的应用程序中得到了明显的反映。0(a) 在基于Safari11.1的WKWebView中的Facebook。0(b) 在基于Safari11.1的SFSafariViewController中的Twitter。0图3:在ios 11.3 Beta 3上运行的pwa功能检测器。0我们观察到了微信(在用户代理字符串中自称为“MicroMessenger”)、新浪微博、Facebook、FacebookMessenger和Twitter。表1显示了我们基于WebView的应用内浏览器的结果,表2显示了CustomTabsIntent的结果。两个表格的结果主要按浏览器引擎版本排序,其次按Android版本排序。正如表格所示,Android版本对支持的pwa功能集合没有影响,这是有道理的,因为第2节中的技术背景信息解释了操作系统版本和WebView版本的解耦。0WebView结果讨论。表1毫不意外地显示,底层浏览器引擎越成熟,pwa功能越多。我们看到,根据清单2中的功能检测测试报告,从最早检查的浏览器引擎开始,报告的可工作的pwa功能有离线功能、后台同步、凭据管理和添加到主屏幕。然而,我们需要仔细观察。0报告的pwa功能可工作。离线功能从一开始就得到支持,离线功能的功能正常工作。凭据管理功能可能错误地暴露出来,这在Chromium bughttps://crbug.com/589829中有追踪。添加到主屏幕功能在理论上从一开始就得到支持,但实际情况并不清晰。首先,关于何时确切地触发安装提示的条件并没有公开。[24]中列出的条件是必要的,但不足够。功能测试所做的是检查浏览器是否支持在潜在的安装提示之前刷新的onbeforeinstallprompt事件,以及它是否知道如何处理Web AppManifest。然而,浏览器是否实际显示提示留给浏览器实现者决定[12]。后台同步功能在理论上从一开始就得到支持,但在尝试使用时失败。这在Chromium bughttps://crbug.com/570713中有追踪。持久存储功能Chrome55添加了对持久存储的支持[35],但是虽然存在navigator.storage.persist方法并且可以调用,但结果始终为负,这意味着数据实际上永远无法持久化。导航预加载功能在Chrome 59中添加,正常工作。静默推送功能在Chrome61中添加了一个返回空值的navigator.budget.reserve方法,其中0开发者追踪WWW 2018,2018年4月23日至27日,法国里昂FeatureExamplesOffline Capabilities✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓Credential Management✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓Add to Home Screen✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓Background Sync✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓Persistent Storage╳╳╳✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓Navigation Preload╳╳╳╳╳╳╳╳╳✓✓✓✓✓✓✓✓✓✓Silent Push╳╳╳╳╳╳╳╳╳╳╳✓✓✓✓✓✓✓✓Storage Estimation╳╳╳╳╳╳╳╳╳╳╳✓✓✓✓✓✓✓✓Device Memory╳╳╳╳╳╳╳╳╳╳╳╳✓✓✓✓✓✓✓Media Capabilities╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳Getting Installed Related Apps╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳Web Share╳╳╳╳╳╳╳╳╳╳╳✓╳╳╳╳╳╳╳Media Session╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳Payment Request╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳Push Notifications╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳Android Version7.07.1.17.1.27.06.0.17.07.07.1.17.1.17.07.08.1.07.08.1.08.1.08.1.08.1.998.1.998.1.99Browser EngineChrome 53 Chrome 53 Chrome 53 Chrome 55 Chrome 57 Chrome 57 Chrome 57 Chrome 57 Chrome 57 Chrome 59 Chrome 59 Chrome 61 Chrome 63 Chrome 63 Chrome 63 Chrome 63 Chrome 65 Chrome 65 Chrome 65ApplicationMicroMessenger 6.6.1MicroMessenger 6.6.1MicroMessenger 6.6.1Weibo 7.12.0MicroMessenger 6.6.1MicroMessenger 6.6.1MicroMessenger 6.6.1MicroMessenger 6.6.1MicroMessenger 6.6.1Weibo 8.0.2Weibo 8.0.2Facebook 154.0.0.33.385Weibo 8.0.2MicroMessenger 6.6.1Facebook 154.0.0.33.385Facebook 148.0.0.20.381MicroMessenger 6.6.1Facebook 155.0.0.22.96WebViewFeatureExamplesOffline Capabilities✓✓✓✓Credential Management✓✓✓✓Add to Home Screen✓✓✓✓Background Sync✓✓✓✓Persistent Storage✓✓✓✓Navigation Preload✓✓✓✓Silent Push✓✓✓✓Storage Estimation✓✓✓✓Device Memory╳✓✓✓Media Capabilities╳╳✓✓Getting Installed Related Apps ╳✓✓✓Web Share✓✓✓✓Media Session✓✓✓✓Payment Request✓✓✓✓Push Notifications✓✓✓✓Android Version8.1.08.1.08.1.998.1.99Browser EngineChrome 61 Chrome 63 Chrome 65 Chrome 65ApplicationTwitter 7.28.0Twitter 7.28.0Twitter 7.27.0Chrome Custom TabFeatureExamplesOffline Capabilities✓✓Credential Management╳╳Add to Home Screen✓✓Background Sync╳╳Persistent Storage╳╳Navigation Preload╳╳Silent Push╳╳Storage Estimation╳╳Device Memory╳╳Media Capabilities╳╳Getting Installed Related Apps ╳╳Web Share╳╳Media Session╳╳Payment Request╳✓Push Notifications╳╳iOS Version11.3 Beta 1 11.3 Beta 1Browser EngineSafari 11.1 Safari 11.1ApplicationFacebook 155.0.0.36.93Twitter 7.157940表1:按浏览器引擎和Android版本排序的各种Android WebView上不断改进的pwa功能支持情况。Chrome 61中唯一看似支持的WebShare功能实际上是一个错误(https://crbug.com/765923)。0表2:按浏览器引擎和Android版本排序的各种AndroidCustomTabsIntent上不断改进的pwa功能支持情况。0是必要的,但不足够。功能测试检查的是浏览器是否支持在潜在的安装提示显示之前刷新的onbeforeinstallprompt事件,以及它是否知道如何处理Web AppManifest。然而,浏览器是否实际显示提示留给浏览器实现者决定[12]。后台同步功能在理论上从一开始就得到支持,后台同步存在,但在尝试使用时失败。这在Chromium bughttps://crbug.com/570713中有追踪。持久存储功能Chrome55添加了对持久存储的支持[35],但是虽然存在navigator.storage.persist方法并且可以调用,但结果始终为负,这意味着数据实际上永远无法持久化。导航预加载功能在Chrome59中添加,正常工作。静默推送功能在Chrome61中添加了一个返回空值的navigator.budget.reserve方法,其中0表3:ios上WKWebView(Facebook)和CustomTabsIntent(Twitter)的pwa功能支持情况。0预期为布尔值。与用户可见的推送通知一样,它不应该工作。存储估算功能在Chrome61中添加,按预期工作。设备内存功能在Chrome63版本中添加,按预期工作。Web共享功能在Chrome61中引入,据报告在Chrome61的一个版本中工作,但该问题已在Chromium bughttps://crbug.com/765923中修复,该功能不再在浏览器中公开。0pwa功能报告不起作用。0推送通知功能被确认不起作用。支付请求功能被确认不起作用。0开发者追踪WWW 2018,2018年4月23日至27日,法国里昂3https://bugs.webkit.org/buglist.cgi?component=Service%20Workers&list_id=3439423&product=WebKit&resolution=---4https://webkit.org/status/5https://adodson.com/notifcation.js/7950媒体会话功能被确认不起作用,尽管可能在将来启用,如Chromium bughttps://crbug.com/678979中所讨论。媒体功能被确认不起作用,尽管可能在将来启用,如Chromium bughttps://crbu
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功