首页 > 解决方案 > 在 Safari App Extension 中以编程方式加载弹出框

问题描述

我目前实现了一个 Safari 应用程序扩展,我希望它能够使用键盘快捷键显示扩展的弹出窗口。

使用旧的 Safari 扩展 API,这是通过使用

safari.extension.toolbarItem[0].showPopover()

在插入的 JavaScript 中。然而,这在新的 Safari 应用程序扩展 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]

对此有什么帮助吗?这是不可能的吗?还是我错过了什么?

谢谢您的帮助。

标签: javascriptswiftsafarisafari-extension

解决方案


他们不支持动态打开弹出框。但是无论如何,如果您设法动态更改 info.plist 文件并能够注入扩展名,那么您将能够这样做。

另一种方法是,打开 info.plist 文件并选择“SFSafariToolbarItem”属性,然后将“Action”更改为“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>

祝你好运。


推荐阅读