“添加到主屏幕”行为变更

自从我们首次推出“添加到主屏幕”横幅以来,我们一直致力于更清晰地标记渐进式 Web 应用,并简化用户安装这些应用的方式。我们的最终目标是在所有平台的地址栏中提供安装按钮,而在 Chrome 68 中,我们正在朝着这一目标做出改变。

具体变化

从 Chrome 68 版开始,Chrome 将不再显示添加到主屏幕横幅(Android 版 Chrome 68 版于 2018 年 7 月发布)。如果网站符合添加到主屏幕条件,Chrome 将显示迷你信息栏。然后,如果用户点击迷你信息栏,或者您在用户手势中对 beforeinstallprompt 事件调用 prompt(),Chrome 将显示一个模态的“添加到主屏幕”对话框。

A2HS 横幅 Chrome 67 及更早版本

A2HS 横幅屏幕截图

当网站满足添加到主屏幕的标准,且网站未在 beforeinstallprompt 事件中调用 preventDefault() 时,系统会自动显示该提示

通过对 beforeinstallprompt 事件调用 prompt() 来显示。

迷你信息栏 Chrome 68 及更高版本

A2HS 信息栏屏幕截图
当网站满足添加到主屏幕的标准时显示

如果用户关闭了该通知,则在经过足够长的时间(约 3 个月)后,系统才会再次显示该通知。

无论是否在 beforeinstallprompt 事件中调用了 preventDefault(),都会显示。

在 Chrome 的未来版本中引入多功能框安装按钮后,此界面处理方式将被移除。

A2HS 对话框

A2HS 对话框的屏幕截图

通过在 Chrome 68 及更高版本中,从 beforeinstallprompt 事件的用户手势内调用 prompt() 来显示。

当用户在 Chrome 68 及更高版本中点按迷你信息栏时显示。

在所有 Chrome 版本中,当用户从 Chrome 菜单中点击“添加到主屏幕”后显示。

迷你信息栏

迷你信息栏的屏幕截图。
迷你信息栏

迷你信息栏是 Chrome 界面组件,网站无法控制,但用户可以轻松将其关闭。用户关闭后,该通知在经过足够长的时间(目前为 3 个月)后才会再次显示。当网站满足添加到主屏幕条件时,无论您是否对 beforeinstallprompt 事件执行 preventDefault() 操作,系统都会显示迷你信息栏。

多功能框中“安装”按钮的早期概念。
多功能框中安装按钮的早期概念
在努力为所有平台打造一致的体验(包括在多功能框中添加安装按钮)的过程中,迷你信息栏是 Chrome 在 Android 上提供的一种临时体验。 ## 触发“添加到主屏幕”对话框
桌面渐进式 Web 应用上的“安装”按钮。
桌面渐进式 Web 应用上的“安装”按钮

您可以在页面加载时提示用户(权限请求的反模式),也可以通过某些界面指示您的应用可以安装,然后显示模态安装提示。例如,此桌面 PWA 在用户个人资料名称的正上方添加了一个“安装应用”按钮。

在用户手势操作后提示安装应用,这样用户会觉得不那么像垃圾内容,并且更有可能点击“添加”而不是“取消”。在应用中添加“安装”按钮意味着,即使用户今天选择不安装应用,该按钮明天或在用户准备好安装时仍会显示。

监听 beforeinstallprompt 事件

如果您的网站满足添加到主屏幕条件,Chrome 将触发 beforeinstallprompt 事件,保存对该事件的引用,并更新您的界面以指示用户可以将您的应用添加到其主屏幕。

let installPromptEvent;

window.addEventListener('beforeinstallprompt', event => {
  // Prevent Chrome <= 67 from automatically showing the prompt
  event.preventDefault();
  // Stash the event so it can be triggered later.
  installPromptEvent = event;
  // Update the install UI to notify the user app can be installed
  document.querySelector('#install-button').disabled = false;
});

如果应用已安装,则不会触发 beforeinstallprompt 事件(请参阅添加到主屏幕的条件)。但如果用户稍后卸载了该应用,则每次网页导航时都会再次触发 beforeinstallprompt 事件。

显示含 prompt() 的对话框

“添加到主屏幕”对话框。
“添加到主屏幕”对话框

如需显示“添加到主屏幕”对话框,请在用户手势中对已保存的事件调用 prompt()。Chrome 会显示一个模态对话框,提示用户将您的应用添加到其主屏幕。然后,监听 beforeinstallprompt 事件的 userChoice 属性返回的 promise。在提示显示且用户做出回应后,该 Promise 会返回一个具有 outcome 属性的对象。

btnInstall.addEventListener('click', () => {
  // Update the install UI to remove the install button
  document.querySelector('#install-button').disabled = true;
  // Show the modal add to home screen dialog
  installPromptEvent.prompt();
  // Wait for the user to respond to the prompt
  installPromptEvent.userChoice.then(choice => {
    if (choice.outcome === 'accepted') {
      console.log('User accepted the A2HS prompt');
    } else {
      console.log('User dismissed the A2HS prompt');
    }
    // Clear the saved prompt since it can't be used again
    installPromptEvent = null;
  });
});

您只能对延迟事件调用一次 prompt(),如果用户在对话框中点击“取消”,您需要等到在下次网页导航时触发 beforeinstallprompt 事件。与传统的权限请求不同,点击“取消”不会阻止未来对 prompt() 的调用,因为该调用必须在用户手势中调用。

其他资源

如需了解详情,包括以下信息,请参阅应用安装横幅

  • 有关 beforeinstallprompt 事件的详细信息
  • 跟踪用户对“添加到主屏幕”提示的响应
  • 跟踪应用是否已安装
  • 确定应用是否作为已安装的应用运行