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

时间:2012-10-02 10:36:22

标签: safari icons safari-extension

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

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

2 个答案:

答案 0 :(得分: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;
};

The Safari Documentation

答案 1 :(得分:0)

使用新的Safari App Extensions API,只要您引用了SFSafariPage,并且此页面未固定(固定标签的窗口为nil),就可以得到页面的选项卡窗口的工具栏项,通过一系列回调,然后为每个工具栏项设置图标。

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(...))
}