我想以编程方式触发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对象似乎没有显示弹出窗口的方法。
答案 0 :(得分:3)
打开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)
}
}
答案 1 :(得分:0)
SFSafariApplication.getActiveWindow { (window) in
window?.getToolbarItem(completionHandler: { (item) in
item?.showPopover()
})
}