CHROME扩展开发之·Manifest V3中的屏幕外文档

发表于2023年1月25日星期三

  要替换从后台页面到扩展服务工作进程的过渡中的功能,开发人员可以使用从Chrome 109开始的 chrome.offscreen API和清单权限。请求此权限允许创建屏幕外文档以使用DOM API,而不会突然打开新窗口或选项卡,从而中断用户体验。 chrome.offscreen API现已在Chrome扩展中提供。


  在Chromium中,Manifest V3扩展是基于服务工作者的,但是服务工作者不支持与基于完整文档的页面(包括背景和事件页面)相同的API和机制。此外,使用内容脚本访问网页上的DOM API会使扩展在页面到页面的基础上受到不同内容安全策略的支配。为了帮助解决这个问题,我们引入了Offscreen Documents来支持DOM相关的功能和API,允许Manifest V3扩展在运行时通过专用的API打开最小的、限定范围的和相对未许可的屏幕外文档。

功能信息

  由于屏幕外文档是专门设计来处理Service Worker中不支持的用例(例如,音频播放),因此此页面的生存期及其将被授予的权限与扩展Service Worker的生存期是分开的。该页面将具有类似于Manifest V2中的事件页面的生存期机制,因为当它停止执行操作时,它将被拆除。此外,用户代理可以对特定于指定目的的生命周期施加进一步的限制。屏幕外文档被设计用来填补只有DOM API才能访问的API的空白;因此,扩展API不需要直接在此上下文中公开。为了减少扩展使用这些作为“后台页面替换”的可能性,只有 chrome.runtime 消息传递API暴露给屏幕外文档。(开发人员也可以通过他们的服务工作者将屏幕外文档声明为客户端来使用Web消息传递。由于某些用例-特别是站点抓取-需要访问跨源框架,因此我们允许这些文档遵循与扩展页面相同的规则嵌入跨源框架。在屏幕外文档中,扩展名指定的内容脚本能够在这些框架中运行,以便抓取任何必要的内容,就像它们对任何正常网页一样。

原因,并要求一个目的

  创建屏幕外文档需要说明原因和进一步的理由。这些原因在API参考文档中列出,并以不同的方式处理文档的生存期。例如,为音频播放而打开的文档当前对其生存期应用的规则与为剪贴板管理而打开的文档不同。您还可以在对正中添加有关屏幕外文档用途的进一步详细信息,对正是开发人员编写的字符串,而不是对文档有影响的参数。随着开发人员分享他们的反馈和用例,随着时间的推移,可能会向API添加更多原因。

走向未来

  为了便于实现,这个API的第一个版本每次只支持每个扩展、每个配置文件的单个页面。在未来的版本中,我们可能会放宽这一点,以支持多个页面。目前,如果扩展在分割模式下运行,并具有活动的隐身配置文件,则正常配置文件和隐身配置文件都可以有一个离屏文档。还计划在以后的某个时间点给予扩展工作者DOM功能。您可以通过将使用屏幕外API的函数与service worker中的等效注释函数配对,以便在以后进行交换,从而使扩展“面向未来”。

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

  此外,随着DOM功能和API被添加到service worker,创建文档的原因列表将根据service worker的当前状态和使用屏幕外文档的原因而被添加或减少。

结论

  Offscreen Documents允许需要DOM或窗口交互访问的扩展,这些扩展目前在service worker中无法实现。它还提供了一种灵活的方法,可以添加新的用例,也可以删除未来解决的用例。对于特定的用例,扩展应该使用建议的屏幕外文档API,并且扩展的主要后台上下文应该仍然是清单中指定的服务工作者。屏幕外文档不应该是存储主扩展逻辑的地方,因为它具有有限的API访问权限。屏幕外文档的生命周期与创建它的service worker无关。Service worker生命周期注意事项和与扩展中的service worker生命周期相关的用例将在单独的博客文章中介绍。使用屏幕外文档的原因将随着时间的推移而变化,因为功能和API被添加到服务工作者本身。我们渴望听到开发人员的反馈,因为这展开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值