sidebarAction.setIcon()

设置侧边栏的图标。

您可以将单个图标指定为图像文件的路径或sidebarAction.ImageDataType对象。

您可以通过提供包含多个路径或ImageData对象的字典来指定不同尺寸的多个图标。这意味着图标不必针对具有不同像素密度的设备进行缩放。

这是一个异步函数,它返回一个Promise

图标类型

您的扩展应该在sidebar_action清单键中为侧边栏指定一个图标。这称为“清单图标”。

如果未在sidebar_action键中指定图标,则会显示浏览器的默认图标。这称为“默认图标”。

如果使用setIcon()设置新图标,并包含tabId选项,则该图标仅为给定选项卡设置。此图标称为“特定于选项卡的图标”。

如果使用setIcon()设置新图标,并包含windowId选项,则该图标仅为给定窗口设置。此图标称为“特定于窗口的图标”,它将出现在该窗口中所有未设置特定于选项卡的图标的选项卡中。

如果使用setIcon()设置新图标,并且省略了tabIdwindowId选项,则会设置“全局图标”。然后,全局图标将出现在所有未设置特定于选项卡的图标且其窗口未设置特定于窗口的图标的选项卡中。

语法

js
let settingIcon = browser.sidebarAction.setIcon(
  details         // object
)

参数

details

object。具有以下属性的对象

imageData 可选

sidebarAction.ImageDataTypeobject。这既可以是单个ImageData对象,也可以是字典对象。

使用字典对象以不同尺寸指定多个ImageData对象,以便图标不必针对具有不同像素密度的设备进行缩放。如果imageData是字典,则每个属性的值都是一个ImageData对象,其名称是其大小,如下所示

js
let settingIcon = browser.action.setIcon({
  imageData: {
    16: image16,
    32: image32,
  },
});

浏览器将根据屏幕的像素密度选择要使用的图像。有关此内容的更多信息,请参阅选择图标大小

path 可选

stringobject。这既可以是图标文件的相对路径,也可以是字典对象。

使用字典对象以不同尺寸指定多个图标文件,以便图标不必针对具有不同像素密度的设备进行缩放。如果path是字典,则每个属性的值都是一个相对路径,其名称是其大小,如下所示

js
let settingIcon = browser.action.setIcon({
  path: {
    16: "path/to/image16.jpg",
    32: "path/to/image32.jpg",
  },
});

浏览器将根据屏幕的像素密度选择要使用的图像。有关此内容的更多信息,请参阅选择图标大小

如果path为空字符串,则浏览器将使用默认图标。

如果path不为空但未指向图标文件,则图标将隐藏。

如果pathnull,并且指定了tabId,并且指定的选项卡已设置特定于选项卡的图标:则特定于选项卡的图标将重置为全局图标(如果设置了全局图标)或清单图标。

如果pathnull,并且省略了tabId,并且已设置全局图标,则它将重置为清单图标。

tabId 可选

integer。仅为给定选项卡设置图标。

windowId 可选

integer。仅为给定窗口设置图标。

  • 如果同时指定了windowIdtabId,则函数将失败,并且不会设置图标。
  • 如果同时省略了windowIdtabId,则全局设置图标。

返回值

一个Promise,一旦图标设置完成,它将不带任何参数完成。

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

示例

以下代码在用户单击浏览器操作时切换活动选项卡的侧边栏图标

js
let on = false;

function toggle(tab) {
  if (on) {
    browser.sidebarAction.setIcon({
      path: "off.svg",
      tabId: tab.id,
    });
    on = false;
  } else {
    browser.sidebarAction.setIcon({
      path: "on.svg",
      tabId: tab.id,
    });
    on = true;
  }
}

browser.browserAction.onClicked.addListener(toggle);

注意:此 API 基于 Opera 的chrome.sidebarAction API。