我们将开始测试新的扩展程序菜单,请做好准备

发布时间:2024 年 11 月 19 日

在 2024 年 Google I/O 大会上,我们分享了扩展程序菜单即将发生的一些早期设计变更,以便用户更好地控制扩展程序可以访问的网站。我们很快就会开始测试这些更改,首先面向 Canary 版用户中的一小部分用户进行测试,希望日后能够面向更多用户推出。

过去,在与开发者讨论这项变更时,我们经常会听到他们对更改扩展程序在安装时请求主机权限的方式所产生的影响表示担忧。新菜单不会影响任何默认行为。扩展程序将继续在安装时获得对所有请求的主机的访问权限。这些更改旨在让用户更轻松地发现现有的控件。

本文简要介绍了预期结果,以及如何使用新 API 为扩展程序做好准备,以便在用户拒绝访问网页时进行处理。

有何变化?

为了让用户能够更好地控制自己的扩展程序,我们将推出一个新的扩展程序菜单。扩展程序在安装时仍会被授予对所有请求的主机的访问权限,但用户现在可以更轻松地控制每个扩展程序的访问权限。

新扩展程序菜单的设计(正在完善中)
新版扩展程序菜单的设计(仍在开发中)

新菜单(图片显示的是当前设计,可能会发生变化)更清晰地显示了哪些扩展程序可以在网页上运行,并让用户能够根据需要更改访问权限。用户还可以禁止所有扩展程序在特定网站上运行。如前所述,我们不会更改任何可用设置或默认设置,而是致力于让用户更轻松地发现我们现有的功能。

添加网站访问权限请求

我们设计了一个新 API 来补充这些变更,并在设计过程中参考了 WebExtensions 社区群组中的其他浏览器和开发者的宝贵意见。

如果用户拒绝了对某个网页的访问权限,扩展程序现在可以使用新的 permissions.addSiteAccessRequest API 请求访问权限。当扩展程序执行此操作时,用户会在工具栏中的扩展程序拼图块旁边看到“允许”消息。以下是我们正在探索的一种设计:

针对 example.com 的网站访问权限请求
example.com 上的网站访问权限请求

当用户点击扩展程序菜单中的“允许”时,系统会向该扩展程序授予对主机的永久访问权限。用户日后可以通过访问扩展程序菜单或 chrome://extensions 页面再次拒绝授予权限。点击工具栏中的“允许 1?”可更快地授予即时访问权限。

扩展程序可以使用 tabId 调用 permissions.addSiteAccessRequest,以显示对该标签页的权限请求。您现在就可以使用功能检测功能,安全地开始在扩展程序中使用它。对于未使用新菜单的用户,该 API 不会执行任何操作,但随着新菜单的逐步推出,采用该 API 将对使用新菜单的用户有所裨益。

chrome.tabs.onUpdated.addListener(async (tabId, changes) => {
  if (typeof changes.url !== 'string') return;

  const url = new URL(changes.url);

  // If we are on the /checkout page of example.com.
  if (url.origin === 'https://example.com' && url.pathname === '/checkout') {
    const hasPermission = await chrome.permissions.contains({
      origins: ['https://example.com/*']
    });

    // We already have host permissions.
    if (hasPermission) {
      return;
    }

    // Add a site access request if the API is available.
    if (chrome.permissions.addSiteAccessRequest) {
      chrome.permissions.addSiteAccessRequest({ tabId });
    }
  }
});

在此示例中,我们仅在用户位于 /checkout 页面时添加请求。您可以在我们的 chrome-extensions-samples 代码库中查看完整代码

扩展程序应注意何时向用户请求访问权限。用户更有可能忽略噪声请求,Chrome 可能会限制过多请求。用户还可以选择关闭扩展程序显示请求的功能。因此,您应仅在特定情况下(即您非常确信用户会与您的扩展程序互动)请求访问权限。

请求会绑定到特定标签页,并会在用户导航到其他来源时自动清除。您可以使用相应的 removeSiteAccessRequest 方法明确清除请求(例如,如果请求绑定到特定路径)。

由于此 API 与新的扩展程序菜单相关联,因此如果未启用新菜单,系统会忽略调用。不过,我们建议您立即试用该 API,并考虑在您的扩展程序中采用该 API。随着新菜单更改逐步面向更多用户显示,您将能够提供出色的用户体验。

如需详细了解如何使用可选权限,请参阅权限文档

试试看

Chrome 133.0.6838.0 及更高版本(目前在 Chrome Canary 中)默认启用此 API。如需启用新菜单,请前往 chrome://flags,然后启用“Extensions Menu Access Control”(扩展程序菜单访问权限控制)标志。

请注意,这项工作仍在进行中,可能会继续发展和变化。我们建议您在 Chrome Canary 中进行测试,以便获得最新的体验。

您可以在 chromium-extensions 邮寄名单中针对新设计提供反馈,我们会在继续改进新菜单时参考这些反馈。