簡體   English   中英

如何以編程方式打開Safari Extension ToolbarItem popover

[英]How to open Safari Extension ToolbarItem popover programmatically

我想以編程方式觸發Safari Extension toolbarItem上的“click”事件,以便在網頁上發生某些事情后出現我的自定義彈出窗口。 我正在使用新的Xcode擴展IDE,並使用界面構建器構建了我的popover。 StackOverflow上的所有答案目前都處理Safari擴展構建器中內置的擴展,而不是Xcode接口中的擴展。 例如,我嘗試過注入Safari JS解決方案,例如:

safari.extension.toolbarItems[0].showPopover();

但沒有任何反應,我不認為它在Xcode中構建擴展時應該可行。 我不關心彈出窗口是在注入的javascript中還是在我的SafariExtensionHandler.Swift文件中觸發 - 我只需要一種方法來顯示它而無需用戶單擊工具欄項。

我使用擴展名的info.plist將我的popover與我的工具欄項相關聯,我已將其鏈接到下面:

https://i.stack.imgur.com/VxyLs.png

該擴展與本機CocoaOS應用程序捆綁在一起,並使用在WWDC '15(下面的鏈接)中引入的新Xcode范例構建。 我可以使用以下方法訪問SafariExtensionHandler.Swift中的Toolbaritem:

 func getToolbarItem(completionHandler: @escaping (SFSafariToolbarItem?) -> Void) {
    SFSafariApplication.getActiveWindow {$0?.getToolbarItem (completionHandler: completionHandler)}
}

但toolbarItem對象似乎沒有顯示彈出窗口的方法。

https://developer.apple.com/videos/play/wwdc2016/214/

打開Safari擴展的Info.plist並找到SFSafariToolbarItem鍵,然后查找Action子鍵並確保將其設置為Popover

此外,請確保您的SFSafariExtensionViewController子類指定所需的preferredContentSize

import SafariServices

class SafariExtensionViewController: SFSafariExtensionViewController {

    static let shared = SafariExtensionViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        preferredContentSize = NSSize(width: 330, height: 119)
    }

}
SFSafariApplication.getActiveWindow { (window) in
    window?.getToolbarItem(completionHandler: { (item) in
        item?.showPopover()
    })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM