javascript - 在 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]
对此有什么帮助吗?这是不可能的吗?还是我错过了什么?
谢谢您的帮助。
解决方案
他们不支持动态打开弹出框。但是无论如何,如果您设法动态更改 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>
祝你好运。
推荐阅读
- python - 如何将求和的行变成列
- python - 无法使用 python 中的子进程库杀死或终止 Windows 10 中的 UWP 应用程序
- mysql - 将 MySQL 查询从用户名更改为电子邮件会导致超时
- php - 在 WooCommerce 中为不同运输类别的运输包裹拆分购物车
- macos - 为什么 Gatekeeper 会忽略未签名的应用程序包?
- python - 我正在尝试将 RGB 转换为 Lab,然后将 a 和 b 通道归零以获得灰度图像,但我得到的图像带有红橙色
- vb.net - 在 VB.NET 中记录使用情况的最佳方式?(到服务器)
- python - UnicodeDecodeError: 'charmap' 编解码器| 安装 pip python-stdnum==1.8 时出错
- ruby-on-rails - 验证是否可以清除不良数据,但仍让表单的其余部分继续创建?
- regex - 正则表达式捕捉多个匹配看后看