内嵌式安装弃用迁移常见问题解答

自 2018 年 6 月 12 日起,内嵌式安装已弃用。如需了解详情,请参阅我们的 Chromium 博文

时间表问题

2018 年 6 月 12 日将会发生哪些变化?

对于在 2018 年 6 月 12 日或之后首次发布的 Chrome 应用商店商品(例如扩展程序和应用),都将停用内嵌式安装。“已停用”表示尝试以内嵌方式安装时,系统会自动重定向到 Chrome 应用商店中相应产品的详情页面,用户可在此页面完成安装。对于商店中在此日期之前首次发布的现有商品,不会有任何变化。

2018 年 9 月 12 日有哪些变化?

无论发布日期,什么内容都会遭到停用。尝试对所有内容进行内嵌式安装的所有操作都将重定向到 Chrome 应用商店,用户可以在其中完成安装。

在 2018 年 9 月 12 日之前我需要做什么?

您无需进行任何更改,但我们建议您查看安装流程,并将 chrome.webstore.install() 调用替换为直接前往相应产品的 Chrome 应用商店商品详情的导航路径。这样,现在您可以验证它是否能够提供最佳用户体验。

此外,我们还建议您在网站的安装流程中纳入新的 Chrome 应用商店下载徽章

M71(2018 年 12 月)会有哪些变化?

从 M71 开始,Chrome 将不再支持 chrome.webstore.install() 方法,且调用该方法将失败,从而导致您网站上的安装流程中断。此时,调用该 API 将抛出 JavaScript TypeError。您应在此日期之前移除对 API 方法的所有调用。

停用内嵌式安装后

安装流程是怎样的?

当您的网站调用 chrome.webstore.install() 时,Chrome 不会再立即触发对话框,而是会打开一个指向 Chrome 应用商店详情页面(即 https://chrome.google.com/webstore/detail/EXTENSION_ID)的新前台标签页。在该页面中,用户可以通过点击“安装”完成标准安装流程,系统将显示一个对话框来提示用户读取权限以及进行安装或取消。该对话框关闭后,此标签页将保留在 Chrome 应用商店中。

如何判断我的安装是否成功?

当您调用 chrome.webstore.install() 时,系统将触发 failedCallback,并显示一条错误,指明用户已重定向到 Chrome 应用商店。此窗口不会指明安装是否成功。请注意,从 Chrome 71 开始,对 chrome.webstore.install() 的调用将失败,因此系统将永远不会执行 failedCallback。

如果没有此 API,您的网站仍可通过在扩展程序与您的网站之间通信来检测是否已安装相应扩展程序。这可以通过扩展消息传递和清单中的 externally_connectable 属性来完成。

"externally_connectable": {
  "matches": ["https://www.example.com/*"]
}
// JS running on https://example.com
try {
  chrome.runtime.sendMessage('EXTENSION_ID', MESSAGE, function() {
    if (chrome.runtime.lastError) {
      // Extension is not installed.
    }
  });
} catch (e) {
  // Extension is not installed.
}

替换以下内容:

  • EXTENSION_ID:您的扩展程序的 ID。
  • MESSAGE:要发送到扩展程序的消息字符串或对象。

如何在安装后触发信息页?

使用 chrome.runtime 事件并在安装后打开新标签页。下面是一个可以在后台网页中使用的示例:

chrome.runtime.onInstalled.addListener(function listener(details) {
  if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {
    chrome.tabs.create({url: "https://www.example.com/"});
    chrome.runtime.onInstalled.removeListener(listener);
  }
});

我可以申请豁免吗?

不,此政策变更适用于 Chrome 应用商店中的所有产品,无一例外。