[英]How can I close a Safari App Extension popover programmatically?
[英]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對象似乎沒有顯示彈出窗口的方法。
打開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.