以编程方式更改Safari浏览器扩展的图标?

以编程方式更改Safari浏览器扩展的图标?,safari,icons,safari-extension,Safari,Icons,Safari Extension,我有一个禁用模式的Safari浏览器扩展。我想做的是在用户进入禁用模式时以编程方式更改工具栏图标 是否有一个API可以让我实现这一点?如果有,它是什么?您扩展的任何工具栏项都可以在中作为数组引用 safari.extension.toolbarItems 每个工具栏项都有一个可以更改的图像属性。这将导致工具栏图标立即更改 // Change the toolbar icon. var changeToolbarIcon = function(newIconName) { var iconU

我有一个禁用模式的Safari浏览器扩展。我想做的是在用户进入禁用模式时以编程方式更改工具栏图标


是否有一个API可以让我实现这一点?如果有,它是什么?

您扩展的任何工具栏项都可以在中作为数组引用

safari.extension.toolbarItems
每个工具栏项都有一个可以更改的图像属性。这将导致工具栏图标立即更改

// Change the toolbar icon.
var changeToolbarIcon = function(newIconName) {
  var iconUri = safari.extension.baseURI + 'icons/' + newIconName;
  safari.extension.toolbarItems[0].image = iconUri;
};

使用新的Safari应用程序扩展API,只要您有一个对
SFSafariPage
的引用,并且该页面未被锁定(锁定选项卡的窗口为
nil
),您就可以通过回调链获取该页面选项卡窗口的工具栏项,然后为每个工具栏项设置图标

扩展页{
func getContainingWindow(completionHandler:@escaping(SFSafariWindow?)->Void){
self.getContainingTab{$0.getContainingWindow{completionHandler($0)}
}
func getToolbarItem(completionHandler:@escaping(SFSafariToolbarItem?)->Void){
self.getContainingWindow{
($0==nil)?completionHandler(nil):$0.unsafelyUnwrapped.getToolbarItem{completionHandler($0)}
}
}
}
let选项卡:SFSafariTab=。。。
tab.getToolbarItem{中的项
项目?.setImage(NSImage(…)
}

注意:上述内容适用于Safari扩展JS。Safari应用程序扩展(Safari 10/macOS 10.12中新增)目前似乎没有提供公共API来更改工具栏项图像(仅启用/禁用状态和徽标)。