【问题标题】:In Chrome extensions, why use a background page with HTML?在 Chrome 扩展程序中,为什么要使用带有 HTML 的背景页面?
【发布时间】:2016-07-11 01:44:01
【问题描述】:

我了解 Chrome 扩展程序的背景页面永远不会显示。对我来说,背景页面应该只包含脚本是有道理的。在什么情况下需要 HTML 标记?

https://developer.chrome.com/extensions/background_pages 有一个带有 HTML 背景页面的示例,但我无法让它工作(可能是因为我不确定它应该做什么)。

是否有任何简单的 Chrome 扩展示例可以演示 HTML 标记如何在后台页面中发挥作用?

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

    历史原因

    从技术上讲,背景页面是一个完整的单独文档 - 除了它没有在实际选项卡中呈现。

    为了简单起见,也许扩展开始时要求通过background_page manifest 属性为背景页面提供一个完整的HTML 页面。那是唯一的形式。

    但是,正如您的问题所证明的那样,除了保存脚本之外,大多数情况下并不清楚该页面实际上可以用于什么。这使得整个事情只是一个样板。

    这就是为什么当 Chrome 引入 "manifest_version": 2 in 2012 作为扩展的大改版时,他们添加了另一种格式,background.scripts 数组。这会将样板文件卸载到 Chrome,然后 Chrome 将为您创建一个背景页面文档,简称为 _generated_background_page.html

    今天,这是首选方法,尽管background.page 仍然可用。

    实际原因

    综上所述,您有时仍希望在背景页面的文档中包含实际元素。

    • <script> 用于将脚本动态添加到后台页面(只要它们conform to extension CSP)。
      除此之外,由于您不能通过background.scripts 数组包含外部脚本,因此您需要为此目的为您列入白名单的人创建一个<script> 元素。
    • <canvas> 用于准备图像数据以供其他地方使用,例如 Browser Action icons
    • <audio> 用于制作声音。
    • <textarea> 代表 (old-school) working with clipboard(实际上不要这样做)。
    • <iframe> 用于将外部页面嵌入到背景页面中,这有时有助于提取动态数据。
    • ..可能更多。

    哪个样板“更好”是有争议的:预先将元素创建为文档,或根据需要使用document.createElement 及其朋友。

    在任何情况下,背景页面始终是页面,无论是由您提供还是由 Chrome 自动生成。你可以使用所有你想要的 DOM 函数。

    【讨论】:

      【解决方案2】:

      我的两分钱:

      Google Mail Checker为例,它在background.html中声明了一个canvas

      <canvas id="canvas" width="19" height="19">
      

      然后它可以操作background.js中的canvas并调用chrome.browserAction.setIcon({imageData: canvasContext.getImageData(...)})来改变浏览器动作图标。

      我知道我们可以通过background.js 动态创建canvas,但是在做涉及DOM 元素的事情时,直接使用html 似乎更容易。

      【讨论】:

      • 另一个例子是&lt;audio&gt; 元素或&lt;iframe&gt;
      • &lt;textarea&gt; 用于剪贴板操作。
      • @Xan,你能发帖回答 Xan 吗?你在这方面了解得更多:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多