在Safari App Extension中以编程方式加载弹出窗口

时间:2018-10-17 18:14:14

标签: javascript swift safari safari-extension

我目前实现了一个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]

对此有任何帮助吗?只是不可能吗?还是我错过了什么?

谢谢您的帮助。

1 个答案:

答案 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>

祝你好运。