我目前实现了一个Safari App Extension,我希望它能够使用键盘快捷键显示该扩展程序的弹出窗口。
使用旧的Safari扩展API,该操作通过使用
完成safari.extension.toolbarItem[0].showPopover()
在插入的JavaScript中。但是,新的Safari App Extension API中已不再可能。
我目前正在做的是监听注入的JavaScript中的快捷方式,并向扩展发送消息:
document.onkeyup = function(e) {
if (e.shiftKey && e.altKey && e.which == 80) {
safari.extension.dispatchMessage("showPopover");
}
};
在扩展程序中,我有一个消息侦听器,该消息侦听器应加载弹出窗口:
override func messageReceived(withName messageName: String, from page:
SFSafariPage, userInfo: [String : Any]? = nil) {
page.getPropertiesWithCompletionHandler { properties in
if messageName == "showPopover" {
// Here the popover should be loaded...
}
}
}
我不知道该怎么做。 Apple文档不提供任何信息。 Stackoverflow和Github也没有帮助。 但是,我在Stackoverflow上发现了以下两个问题,它们似乎试图做类似的事情,但是没有运气:[1],[2]
对此有任何帮助吗?只是不可能吗?还是我错过了什么?
谢谢您的帮助。
答案 0 :(得分:0)
他们不支持动态打开弹出窗口。但是无论如何,如果您设法动态更改info.plist文件并能够注入扩展名,那么您将能够这样做。
另一种方法是,打开info.plist文件并转到“ SFSafariToolbarItem”属性, 然后将“操作”更改为“ Popover”
您的代码会喜欢以下内容,
<key>SFSafariToolbarItem</key>
<dict>
<key>Action</key>
<string>Popover</string>
<key>Identifier</key>
<string>Button</string>
<key>Image</key>
<string>ToolbarItem.pdf</string>
<key>Label</key>
<string>Test Safari Extension</string>
</dict>
祝你好运。