如何在 Safari 应用程序扩展中获取活动选项卡?

Posted

技术标签:

【中文标题】如何在 Safari 应用程序扩展中获取活动选项卡?【英文标题】:How to get active tab in a Safari App Extension? 【发布时间】:2016-09-27 12:20:28 【问题描述】:

当我按照 Apple 示例进行操作时,我总是得到一个 nil activeTab

override func toolbarItemClicked(in window: SFSafariWindow) 
    // This method will be called when your toolbar item is clicked.

    window.getActiveTab(completionHandler:  (activeTab) in
        print(activeTab)
        activeTab?.getActivePage(completionHandler:   (activePage) in
            print(activePage)
            activePage?.getPropertiesWithCompletionHandler(  (properties) in
                print(properties)
                if properties?.url != nil 
                    let urlString = properties!.url.absoluteString
                    print("URL!", urlString)
                    let videoURL = self.youtubeDl(urlString: urlString)
                    if videoURL != nil 
                        window.openTab(with: videoURL!, makeActiveIfPossible: true, completionHandler: nil)
                    
                
            )
        )
    )

【问题讨论】:

【参考方案1】:

是的,有一个 getActiveTab:

SFSafariApplication.getActiveWindow  (window) in
    window?.getActiveTab  (tab) in 
        tab?.getActivePage(completionHandler:  (page) in
        
    

【讨论】:

嗨,这个 getActiveTab 是异步方法吗?【参考方案2】:

您的 Safari 应用程序扩展程序只能访问您的扩展程序配置访问的站点的选项卡。

在您的 Info.plist 中,验证 SFSafariWebsiteAccess dictionary:

Level 等于“Some”或“All”。

Allowed Domains 数组中列出了所有必需的域(如果 Level="Some")。

请注意,您的扩展程序的网站访问权限显示在 Safari > Preferences > Extensions 中。我们鼓励您将您的网站访问权限限制为“某些”(和明确的域),除非您确实需要访问每个网站。

【讨论】:

所以没有像activeTab in WebExtension这样的东西?【参考方案3】:

您应该转到 info.plist,NSExtension->SFSafariWebsiteAccess 并将某些内容(例如 * - 适用于所有站点)设置为允许域。如果没有这个选项,我总是从窗口得到 nil。我认为如果该站点不允许,您的扩展程序将无法工作。

【讨论】:

以上是关于如何在 Safari 应用程序扩展中获取活动选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何在选项卡面板中获取活动选项卡索引?

safari app extensions:从swift后台进程向所有选项卡广播消息

如何在 chrome 扩展程序中获取选项卡通知,以便扩展程序可以在每次新通知到达时显示桌面警报

获取选项卡式活动的当前选定选项卡

如何获取活动功能区选项卡名称?

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?