Safari app extension 如何在Safari应用程序扩展中识别选项卡(或获取其id)?

Safari app extension 如何在Safari应用程序扩展中识别选项卡(或获取其id)?,safari-app-extension,Safari App Extension,我正在开发Safari应用程序扩展,我想识别打开的选项卡。我找不到身份证也找不到办法 Chrome有一个很棒的API来实现这一点:。我如何使用Safari应用程序扩展(在Swift中)实现这一点 Safari tab API非常差,不包含ID()再详细一点可能会有所帮助。“ID”是什么意思?你到底想做什么? 您可以使用访问扩展处理程序中的选项卡。我自己没有测试过,但它可能看起来像这样: SFSafariApplication.getActiveWindow { (window) in w

我正在开发Safari应用程序扩展,我想识别打开的选项卡。我找不到身份证也找不到办法

Chrome有一个很棒的API来实现这一点:。我如何使用Safari应用程序扩展(在Swift中)实现这一点


Safari tab API非常差,不包含ID()

再详细一点可能会有所帮助。“ID”是什么意思?你到底想做什么? 您可以使用访问扩展处理程序中的选项卡。我自己没有测试过,但它可能看起来像这样:

SFSafariApplication.getActiveWindow { (window) in
    window?.getActiveTab { (tab) in
       ...do something with the tab...
    }
}

再详细一点会有帮助的。“ID”是什么意思?你到底想做什么? 您可以使用访问扩展处理程序中的选项卡。我自己没有测试过,但它可能看起来像这样:

SFSafariApplication.getActiveWindow { (window) in
    window?.getActiveTab { (tab) in
       ...do something with the tab...
    }
}

你能详细说明一下你想要达到的目标吗

我想,在最坏的情况下,您可以在每个页面中插入一个脚本,在其中生成一个随机ID,并将其发送到宿主应用程序,宿主应用程序将把它们全部存储到UserDefaults中。然后,当您需要检索一个选项卡时,您将迭代所有选项卡,并使用
dispatchMessageToScript
与目标选项卡建立一些通信


SFSafariTab
NSObject
继承
hashValue
。这可以让你识别你的标签。

你能详细说明一下你想要实现的目标吗

我想,在最坏的情况下,您可以在每个页面中插入一个脚本,在其中生成一个随机ID,并将其发送到宿主应用程序,宿主应用程序将把它们全部存储到UserDefaults中。然后,当您需要检索一个选项卡时,您将迭代所有选项卡,并使用
dispatchMessageToScript
与目标选项卡建立一些通信


SFSafariTab
NSObject
继承
hashValue
。这可以让你识别你的标签。

你是对的。这个API不容易使用。但是,有一种方法可以获取ID。
sfsafari页面
本身

sfsafari页面
采用
NSSecureCoding
。您可以使用
savedPage.isEqual(newPage)
来比较从
getActiveTab
或其他地方获得的相同页面。页面是指针或代理。但内容是独一无二的

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

你说得对。这个API不容易使用。但是,有一种方法可以获取ID。
sfsafari页面
本身

sfsafari页面
采用
NSSecureCoding
。您可以使用
savedPage.isEqual(newPage)
来比较从
getActiveTab
或其他地方获得的相同页面。页面是指针或代理。但内容是独一无二的

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

您好,谢谢您的建议,但它不起作用。实际上,SFSafariTab不是一个表示tab对象的类,而是这个tab的代理。(“Safari窗口中选项卡的代理。”)。每次调用的哈希或对象内存引用更改:/对不起,我最初的回答,你完全正确。我编辑了我的答案。哈哈,我刚刚意识到奎因基本上推荐了同样的东西:)根据你的新描述,我想象了这个例子:你有两个标签(google.com和ebay.com)。生成随机ID(1和2),并按照建议存储在UserDefaults中。如果我关闭易趣标签,你怎么知道的?:)您好,谢谢您的建议,但它不起作用。实际上,SFSafariTab不是一个表示tab对象的类,而是这个tab的代理。(“Safari窗口中选项卡的代理。”)。每次调用的哈希或对象内存引用更改:/对不起,我最初的回答,你完全正确。我编辑了我的答案。哈哈,我刚刚意识到奎因基本上推荐了同样的东西:)根据你的新描述,我想象了这个例子:你有两个标签(google.com和ebay.com)。生成随机ID(1和2),并按照建议存储在UserDefaults中。如果我关闭易趣标签,你怎么知道的?:)您好,通过使用活动选项卡,我不知道它是哪个选项卡。你可以查看Chrome文档(),我可以通过id识别标签。如果我打开一个标签,我可以从后台再看到它,我不能说“这是我打开的同一个标签”。例如,我想打开两个选项卡,当我收到请求时,能够知道“这是第一个选项卡,第二个选项卡”啊,我明白了。我想知道您是否可以在javascript中使用一些状态?例如,当您打开一个新选项卡时,发送一条消息,该消息将设置由您的扩展管理的某个标识符。您好,通过获取活动选项卡,我不知道它是哪个选项卡。你可以查看Chrome文档(),我可以通过id识别标签。如果我打开一个标签,我可以从后台再看到它,我不能说“这是我打开的同一个标签”。例如,我想打开两个选项卡,当我收到请求时,能够知道“这是第一个选项卡,第二个选项卡”啊,我明白了。我想知道您是否可以在javascript中使用一些状态?例如,当您打开一个新选项卡时,发送一条消息,该消息将设置由您的扩展管理的某个标识符。