1

我正在开发一个 Safari 应用程序扩展,我想识别打开的选项卡。我发现没有 id 或没有办法做到这一点。

Chrome 有一个很棒的 AP​​I 可以做到这一点:https ://developer.chrome.com/extensions/tabs 。如何使用 Safari 应用程序扩展(在 Swift 中)做到这一点?

Safari 选项卡 API 很差,不包含 ID(https://developer.apple.com/documentation/safariservices/sfsafaritab

4

3 回答 3

0

你说的对。API 并不容易使用。但是,有一种方法可以获取 ID。SFSafariPage本身。

SFSafariPage采用NSSecureCoding. _ 您可以使用savedPage.isEqual(newPage)来比较您是否来自同一页面getActiveTab或其他内容。页面是指针或代理。但内容是独一无二的。

PS你应该非常小心SFSafariExtensionHandler。处理程序始终是一个新对象。使用单例模型保存页面索引可以确保数据不会丢失。

于 2020-04-12T14:59:13.363 回答
0

更多细节会有所帮助。你是什​​么意思'ID'?你究竟想做什么?您可以使用SFSafariApplication API访问扩展处理程序中的选项卡。我自己没有测试过,但它可能看起来像这样:

SFSafariApplication.getActiveWindow { (window) in
    window?.getActiveTab { (tab) in
       ...do something with the tab...
    }
}
于 2019-07-25T11:20:46.860 回答
0

您能否详细说明您要实现的目标?

我想,在最坏的情况下,您可以在每个页面中注入一个脚本,在那里您将生成一个随机 ID,将其发送到主机应用程序,主机应用程序会将它们全部存储到 UserDefaults 中。稍后,当您需要检索一个选项卡时,您将遍历所有选项卡并与您所针对的选项卡建立一些通信dispatchMessageToScript

SFSafariTab继承hashValueNSObject。这可以让您识别您的标签。

于 2019-07-31T04:38:11.763 回答