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

5

我有一个Safari浏览器的扩展,其中含有禁用模式。我想在用户进入禁用模式时自动地通过编程更改工具栏图标。

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

2个回答

10

你的扩展程序中的任何工具栏项都可以作为一个数组进行引用。

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 文档


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

1
使用新的Safari应用扩展API,只要您有对的引用,并且此页面未被固定(固定选项卡的窗口为),则可以通过一系列回调获取该页面的选项卡窗口工具栏项目,然后设置每个工具栏项目的图标。
extension SFSafariPage {

    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 tab: SFSafariTab = ...

tab.getToolbarItem { item in
    item?.setImage(NSImage(...))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接