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

标签 javascript swift safari safari-extension

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

使用旧的 Safari Extension API,这是通过使用

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

在插入的 JavaScript 中。然而,这在新的 Safari App Extension API 中不再可能。

我目前正在做的是监听注入(inject)的 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]

有什么帮助吗?这是不可能的吗?还是我遗漏了什么?

感谢您的帮助。

最佳答案

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

另一种方法是,打开 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>

祝你好运。

关于javascript - 在 Safari App Extension 中以编程方式加载弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861211/

相关文章:

swift - 当使用类型为“((UIContentContainer, C ~~

ios - Firebase 数据库索引路径

ios - 在 UILabel 中为不同类型的文本内容应用差异字体 - ios

firebase - 使用 FCM 在 Apple Safari 中推送通知

ios - iAd Producer - 如何在 safari 中打开 URL?

html - Safari 9.0 无法播放存储服务器上的mp4视频

javascript - 使用javascript检测浏览器选项卡切换/浏览器最小化

javascript - 如何制作不同的菜单项下拉菜单

javascript - location.href 的正确语法是什么

javascript - 网页元素上的缩放事件